Linux配置scheme环境,用 Xcode Configuration 和 Scheme 配置项目环境

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

logo.svg

想象一个场景,我们正在开发一款支付系统,这个支付系统同时支持有Web版和原生的iOS APP版本。

这个支付系统有三个环境:dev: 调用支付的开发环境接口,并不会真的扣钱。

qa: 调用支付的测试环境接口,假的测试账户中的余额会发生变化。

production: 调用产品环境中的支付接口,账户余额和钱会真实发生变化。

对于 Web 版的系统,我可以在浏览器中打开三个窗口,然后依次输入不同环境下的域名: www.dev.pay-example.com,www.qa.pay-example.com,www.prod.pay-example.com 来分别进行测试。

对于 iOS APP 呢?我们想要的其实是类似的,打开一台手机,我们可以同时安装三个APP:PayExampleDev,PayExampleQA,PayExample 然后可以切换APP来使用它们。

那么怎样通过一个 iOS 工程打包出三个不同的 APP 呢?方法很多,本文我们就来介绍通过 Xcode Configuration 和 Scheme 的配置方式来实现。新建 Group,命名为:Configuration

在 Configuration 中新建不同环境下的 Configuration Settings file

具体步骤如下图:

1.gif

配置项目的 Configuration在不同的 Configuration file 中,配置需要的键值对,用于在项目中引用,具体配置,请参考 Demo源码

Project -> Info -> Configurations

将 Configurations 配置为 Dev、QA、Prod,并配置对应的 Configuration File

具体步骤如下图:

4a9cf63b3a899e17734bf88631482fb2.gif

创建 scheme创建 scheme (PayExampleDev、PayExampleQA、PayExampleProd),供不同环境使用

Edit Scheme -> Step -> Info -> Build Configuration,配置对应的 Build Configuration 为 Dev、QA、Prod

3.gif

在项目配置中引用 xcconfig 中定义的变量PayExample target -> General -> Display Name

配置 Display Name 为 $(PE_BUNDLE_NAME)

具体步骤如下图:

74fcf29d4d7bb846aa6e3eba7c7bde6e.gif

在某一个 Scheme 上执行某操作时,在此 Scheme 的此步骤上定义的 BuildConfig 就会生效。

比如:

用于打包 QA 环境的scheme PayExampleQA,其 Build 配置的 Build Configuration 为 QA

QA 在 Configuration 中配置的 config 文件为:qa.xcconfig

项目中,APP 的 Display Name 的值为:$(PE_BUNDLE_NAME)

qa.xcconfig 中 PE_BUNDLE_NAME 的值为 PayExampleQA

如此 PayExampleQA scheme 在打包后,显示的APP名称为 PayExampleQA

Setup bundle identifier

iOS 中是通过 bundle identifier 来标识不同的应用的。也就是说,想要通过一份代码同时编译出三个应用安装到设备中,我们需要在 dev.xcconfig, qa.xcconfig, prod.xcconfig 中分别定义 BUNDLE_IDENTIFIER ,并在项目配置中引用它。

当我们直接在配置中定义 PE_BUNDLE_ID ,并在项目配置中引用它时(Xcode10.1 (10B61)),会发现配置无效(如下图)

6379220e3706be93e8fa31b757bccce9.png

当查看 info.plist 时,可以发现 Bundle identifier 的 value 是 $(PRODUCT_BUNDLE_IDENTIFIER)。 我们可以在 Project -> Build Settings -> Product Bundle Identifier 中配置它的值为 $(PE_BUNDLE_ID)。具体操作如下图:

a14c553a209262aba28f9409f4ac6019.gif

最终效果

完成上述配置以后,我们可以在不同 Scheme 下执行 run 命令将 APP 安装到模拟器中,查看效果:

6.gif

What’s More

如果你需要在 Jenkins 或者 Travis 中搭建 pipeline,此配置同样适用。

当我们用脚本来打包 APP 时,会执行如下命令:1

2

3

4

5xcodebuild archive -workspace 项目名称.xcworkspace

-scheme scheme名称

-archivePath archive包存储路径

CODE_SIGN_IDENTITY=证书

PROVISIONING_PROFILE=描述文件UUID

通过指定不同的 scheme 即可管理不同环境下的项目配置。

构建 pipeline 将会在后续文章中详细介绍,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux进入字符界面编程,MPlayer字符界面操作方法

一、启动播放时参数:在终端下敲入:./mplayer 提示各种使用帮助信息-vo 选择视频输出模式和设备(用-vo help查看列表)-ao 选择音频输出模式和设备(用-ao help查看列表)-ss 寻找指定的(多少秒或hh:mm:ss)位置-nosound 不播放声音-fs -vm -zoom …

linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...

Ubuntu 20.04将删除Amazon Web应用程序,原因就是这款应用很少有用户使用,但需要的用户也可另行安装。在过去的8年中,Amazon Web应用程序已成为Ubuntu桌面的一部分,现在,Ubuntu 20.04已决定退出。亚马逊网络启动器是在U…

linux 双网卡 debian,Debian 双网卡bond

1. 安装ifenslaveifenslave的作用是网卡的负载均衡# apt-get install ifenslave2. 修改/etc/network/interface复制代码代码如下:{rootb01 359 ~}# cat /etc/network/interfaces# This file describes the network interfaces available on your system# and how to activate t…

C++对象数组与对象指针

C对象数组 1.1数组不仅可以由简单的变量组成,而且还可以由对象组成。 1.2对象数组的初始化: A.如果构造函数只有一个参数,在初始化数组时可以在花括号里提供实参。Student stud[3]{10,18,12}; B.如果构造函数有多个参数,在初始化数组时&a…

linux下sqlmap安装教程,(转)Sqlmap官网下载与安装教程[windows/linux版本]

转自:http://www.vuln.cn/2000sqlmap的功能与强大性不必多言,方便大家下载,给大家整理了下sqlmap最新版的官网与github下载地址。官网下载地址github下载环境与安装windows系统环境安装windows下安装sqlmap需要python环境支持安装好后&#x…

C++共用数据的保护

C中往往通过使用const,来使数据在一定范围内共享又不能被随意修改。 C常对象 1.1常对象的一般形式为:A.Time const t(1,2,3);B.const Time t(1,2,3);1.2常对象的数据成员都是常变量而且必须要有初值。1.3不能调用常对象的非const型的成员函数&#xff0…

linux gcc本地链接lib文件(c静态,动态),GCC中静态连接和动态连接的区别(LINUX下)...

最近正在学习库的用法,写了最基础的libmystring.a的库(里面只有一个add函数),然后编写test程序测试add函数,用ar命令创建好libmystring.a库后,用以下命令编译静态连接的a.outgcc –static test.c –L ./ –lmystring –o a.out得到…

C++对象的动态建立和释放

1.1前面的方法是静态的&#xff0c;而在c中要动态的建立对象可以用new&#xff0c;删除对象用delete。 C对象动态建立和释放 1.1用new运算符之后&#xff0c;返回一个指向新对象的指针。Box *ptnew Box(1,2,3);1.2通过pt来访问这个对象cout << pt->height;cout <&…

linux18.04循环登陆,ubuntu18.04 循环登陆

主要原因是驱动不对&#xff0c;重新按装驱动就是了&#xff0c;按以下步骤进行&#xff1a;1、sudo apt-get remove --purge nvidia-*2、sudo apt-get autoremove3、sudo reboot重新启动后&#xff1a;sudo ubuntu-drivers autoinstallubuntu 18.04 不同桌面的切换 gdm3/light…

C++对象的赋值和复制

C对象的赋值 1.1对象之间的赋值是用“”运算符来实现的&#xff0c;“”在c中扩展为重载运算符来实现对象间的赋值。t1t2;1.2对象赋值是对数据成员的赋值&#xff0c;而不是对成员函数的赋值。因为数据成员占用内存空间&#xff0c;而成员函数只是一段共用代码。1.3类的数据成员…

linux附加重定向,关于Linux:如何将stdout和stderr重定向并附加到带有bash的文件中?...

要将stdout重定向到bash中的截断文件&#xff0c;我知道要使用&#xff1a;cmd > file.txt要重定向bash中的stdout&#xff0c;附加到一个文件&#xff0c;我知道要使用&#xff1a;cmd >> file.txt要将stdout和stderr重定向到截断的文件&#xff0c;我知道要使用&…

C++静态成员

在同类的多个对象之间实现数据共享&#xff0c;往往使用静态成员而不是全局变量。 C静态数据成员 1.1静态数据成员是一种特殊的数据成员。static int height;1.2静态数据成员可以通过类名来引用&#xff0c;也可以通过对象来引用。1.3静态数据成员不属于某一个对象&#xff0c;…

实践平台linux,关于构造Linux系统实践平台的设想

摘 要 当前虽然有很多高校将Linux课程作为本科学生的必修课&#xff0c;但是在高校中专业的Linux实验室却并未普及。在不增加机房管理员工作量以及学生可以充分体验Linux系统性能的前提下&#xff0c;本文提出了一种利用网络来实现Linux系统实践平台的构造方法&#xff0c;并且…

ndk linux 最新版本,NDK各版本下载

翻不了墙的话&#xff0c;可以用迅雷下载最新版本r20https://dl.google.com/android/repository/android-ndk-r20-windows-x86.ziphttps://dl.google.com/android/repository/android-ndk-r20-windows-x86_64.ziphttps://dl.google.com/android/repository/android-ndk-r20-dar…

c语言常用字符串处理函数6,【总结】C语言中常见的字符串处理函数

-------------------------------------------------------------------------------------------C语言中没有字符串类型&#xff0c;但是为了方便对字符串进行操作&#xff0c;提供了许多字符串处理函数。如&#xff1a;输入输出字符串&#xff0c;字符串的拷贝&#xff0c;连…

c语言 样例测试覆盖,白盒测试实例之十一——逻辑覆盖测试

逻辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖。从覆盖源代码的不同程度可以分为以下六个标准&#xff1a;语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。先看一下具体例子的源代码(C语言)&#xff1a…

C++运算符重载函数作为类成员函数和友元函数

C运算符重载函数作为类成员函数 1.1成员函数的重载运算符左侧是一个类对象&#xff0c;而且与运算符函数类型相同。因为必须通过类的对象去调用该类的成员函数&#xff0c;而且只有运算符重载函数和返回值类型相同&#xff0c;运算结果才有意义。1.2将双目运算符重载为友元函数…

C语言辅导试题答案,C语言试题含答案).doc

一、单项选择题(在每小题的四个备选答案中&#xff0c;选出一个正确的答案&#xff0c;并将其代码填入题干后的括号内。每小题1分&#xff0c;共20分)1&#xff0e;程序中定义以下宏 #define S(a,b) a*b若定义 int area; 且令areaS(31,34),则变量area的值为( )A 10B 12C 21D 28…

C++重载流插入运算符与流提取运算符

C重载流插入运算符与流提取运算符 1.1 "<<" 流插入运算符&#xff0c;">>"流提取运算符。1.2对“<<”和“>>”重载的函数的形式如下&#xff1a;istream & operator >> (istream &,自定义的类&);ostream & …

c语言tcp push函数,如何在FreeBSD中使用TCP_NOPUSH调用sendfile之前添加头文件

我知道技术上FreeBSD中的TCP_NOPUSH和Linux中的TCP_CORK假设是类似的。如何在FreeBSD中使用TCP_NOPUSH调用sendfile之前添加头文件在Linux中&#xff0c;我可以设置TCP_CORK&#xff0c;发送头文件sendfile()&#xff0c;并且取消设置TCP_CORK以在文件前面插入头文件。在FreeBS…