iOS 多target、多环境认识及使用

为什么要多target?

比如现在你公司有一个产品分为普通用户版、VIP用户版、SVIP版等。其实大部分功能是一样的,只不过有一些功能需要成为VIP或者SVIP才能使用,这时候多target就是最佳选择。
简单的说,产品功能类似,只有部分功能需要做不同处理的时候选择使用多target。

为什么要多环境?

一般情况下我们做产品的时候都会有开发接口、测试接口、正式接口等,也就是说在不同情况下使用不同的url去请求数据,这个时候就需要用多环境了。“不同接口”只是一个举例,在做一个产品的时候,不同的情况下会有更多更复杂的不同配置,多环境就能够完美的解决问题。

--------------------------------------------------------------------------------------------------------------------
多target的创建
屏幕快照 2017-06-13 上午10.26.32.png

点击 Duplicate就会复制出一份XXX Copy的target,可以看到工程目录中多了一个XXX copy-Info.plist文件,就是这个新target的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,要不然就会报错。
  • 修改Target名称、修改plist名称、修改schemes
  • 修改Bundle Identifier、选择不同证书、一些基本配置进行修改。
设置预编译宏

Target 开发版->Build Settings然后搜索Preprocessor Macros然后增加宏,区别不同target、shemes


多环境创建

1.添加Build Configuration

  • 打开项目的workspace,进入Xcode的主界面。选中主要工程的project -> info,找到Configurations, 点击下方的“+”。
F7D5A7EF-DE86-4ECF-90E3-3686B13EBF5A.png
  • 从图中可以看到两个已经添加好的Configuration: Debug 和 Release,选择“deplicate debug configuration”,添加一个新的configuration,命名为DEV。
  • 从图上可以看到,configuration都已经有了默认的configuration set(也就是xxconfig文件)。这是因为我的工程中已经包含了cocoapods。默认的configuration set是pods添加的。
  • 这个时候新增加的build configuration并没有对应的pods的xcconfig,所以项目会报错。把新建的configuration 对应的set 设置为none
  • 命令行运行 pod install
之后可能会有ld: library not found for -lPods-之类的错误,在target->BulidPhase->Link Binary With Libraries 中将libPod.a删除即解决
  • 重要说明:如果没安装cocoapods忽略最后三步

2.新建并配置xcconfig文件

  • command + "n", 选择 iOS -> Other -> Configuration settings file
    新建4个xxconfig文件,我采用以下命名:


    0C9189D1-2335-4828-AFDE-1BF699A9C693.png

    如果是3个target、5种环境就要创建15个xcconfig文件。

  • 说明: 在commom.xcconfig中设置所有环境的共同配置,如:

BUILD_VERSION = 1.0.0

在其它xcconfig文件中做如下配置:

//导入公共 config

#include "Common.xcconfig"

//导入pods 对应的 config

#include "Pods/Target Support Files/Pods-DMMutiTargetScheme-DMMutiTargetSchemeBase/Pods-DMMutiTargetScheme-DMMutiTargetSchemeBase.debug.xcconfig"
特别注意:- 可能会因为项目名称的不同导致路径不同,如果不太确定的可以再次pod install。
pods会给出提示,其中包含了正确的路径(文件相对路径)。

APP_DISPLAY_NAME = DEV  特有的配置
  • 完成以上后,把build configuration切换成对应的新建的文件
    可能会有如下错误:
diff: /../Podfile.lock: No such file or directory   
diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. 
Run 'pod install' or update your CocoaPods installation.
这种错误就要查看xcconfig文件中,include的pods文件路径是否正确。

#include "Pods/Target Support Files/Pods-[工程名称]-[target名称]/Pods-[工程名称]-[target名称].[环境名称].xcconfig"

3、设置环境变量

完成上面的步骤就已经添加好了环境,剩下的就是设置环境变量
在Info.plist文件中,设置Bundle name 为

4F48BFE5-7BA6-44ED-A588-AE078226FB95.png

应用的名称就会根据配置改变了。

4.然而在代码中需要根据环境改变某些变量的值怎么办呢?

  • 设置预编译头参数
    Project -> Build settings -> Apple LLVM 7.1 - Preprocessing
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容