多个Target的使用
2024-08-26 12:25:02
背景介绍
- 开发过程中,我们会在内网搭建一个测试服务器,开发、测试都是在内网进行的。这样产生脏数据不会影响外网的服务器。外网服务器只有最后发布时才会进行一些必要的测试。
- 还有就是要对同一份代码生成不同的product,比如一个游戏有100关,要生成一个免费版(只有20关),可以新建一个Target,设置参数就可以实现,如果通过代码来控制就太麻烦了。
怎么办
- 针对第一个问题,在代码级别,对这个URL的选择,可以使用简单一点的宏来判断。这样所有的请求只要都调用这个宏,就可以做到控制。但是这样写不少限制,那就是很多工程属性不能设置,比如不能改变
Bundle ID
,不能改启动图片,不能改应用名称等。这样的测试版和正式版不能同时安装到同一部手机上,这样测试起来很麻烦,很多情况下我们需要对比正式版和测试版。
#ifndef DEBUG
#define BaseURL @"192.168.1.23" // 内网服务器
#else
#define BaseURL @"112.23.12.34" // 外网服务器(瞎写的)
#endif
- 如果对于上一种方式不满,接下来可以使用更加强大的
Targets
Targets
可以使用更多高级功能,比如一个Target
对应一个Info.plist
- 而
Info.plist
中可以修改的属性太多了,什么启动图片,Bundle Id
、Main Interface
等小改动 - 大的改动,可以修改
Bulid Phases
,设置文件的编译,静态库的链接 - 还可以修改
Bulid Settings
设置工程的编译、链接属性 - 选择不同的证书,开发环境就开发证书,发布时就选发布证书
- 第二个问题也可以用
Targets来
实现,当然通过代码也可以控制,但是代码的话扩展性太差。
Targets操作
复制 Targets
- 新建Xcode时会自动创建一个默认的
Target
,我们如果要自己新增的话,可以通过复制的方式快捷创建第二个。 - 复制会将已有的资源以及工程属性copy一份,在这个基础上进行更改即可。
可以看到工程目录中多了一个文件
Xcode的开发版 copy-Info.plist
,就是这个新文件,所有的配置都可以在这里进行配置
创建全新Targets
- 可用通过菜单
Editor
->Add Target
->Application
->Singe View Application
->Product Name
来新增
Targets之间异同
- 一个Target包含了
Copy Bundle Resources
,Compile Sources
,Link Binary With Libraries
、info.plist
等Copy Bundle Resources
是指生成的product的.app内将包含哪些资源文件Compile Sources
是指将有哪些源代码被编译Link Binary With Libraries
是指编译过程中会引用哪些库文件- 最关键的就是
info.plist
文件,iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等都可用info.plist
来设置。 - 不同的target还可以定义完整的差异化的编译设置, 从简单的调整优化选项, 到增加条件编译所使用的编译条件, 以至于所使用的base SDK都可以差异化指定
注意事项
- 新增文件、资源等,如果有多个
Target
,添加新文件时要注意勾选多个Target
- 修改新文件
Xcode的开发版 copy-Info.plist
- 首先,修改
Target
名称 - 然后,修改
plist
名称 - 最后,修改
schemes
- 首先,修改
- 设置预编译宏
Target 开发版
->Build Settings
然后搜索Preprocessor Macros
然后增加宏测试一下,可用通过预编译宏来区别代码
if (DevelopMent == 1) { // 测试一下,选择不同的Schemes就可以看到输出不同
NSLog(@"DevelopMent=1");
}else {
NSLog(@"DevelopMent=0");
}
- 修改
Bundle Identifier
和选择不同的证书,让app区分开来- 点击
target: Xcode的测试版
->Summary
:提示你需要选择plist文件,选择1)中添加的Xcode的测试版.plist
; - 点击
target: Xcode的开发版
->Summary
:设置Bundle Idenfitier
; - 点击
target: Xcode的测试版
->Build Settings
->Code Signing
:选择另外的证书;
- 点击
结语
- 现在就可以针对不同的
product
设置不同的参数了,生成不同的app那都不是事儿。 - 在代码中通过预编译宏做出区分,然后安心开发app吧
#if DevelopMent == 1
#define BaseURL @"192.168.1.23" // 内网服务器
#else
#define BaseURL @"112.23.12.34" // 外网服务器(瞎写的)
#endif
最新文章
- R语言-Kindle特价书爬榜示例 &; 输出HTML小技巧
- c#操作mysql积累
- Linux下安装性能测试负载机LG
- PHP语言基础简单整理
- mysql 表空间
- 01 - 开发成功的Oracle应用
- scanf()/getchar()和gets()深入分析
- UVa 1301 - Fishnet
- 系统提供的UIImagePickerController
- oracle创建user具体指示
- 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
- Dapper源码学习和源码修改(下篇)
- cnblogs的使用
- UNIX环境高级编程——epoll函数使用详解
- SQL-数据库刷题
- note:debugging requires the debug connect session system privilege
- WorldWind源码剖析系列:角度类Angle
- open live writer 代码着色插件
- 《DSP using MATLAB》示例Example 8.12
- Treap 模板