创建target有两种方式,
1>.是通过新建target可以通过File-->New-->Target,然后选择其中一个模板来创建,app类型的target进行创建
2>.另一种方法是通过对原有的target做duplicate,复制一份
今天主要讲第二种方式创建target过程:
1、创建工程命名:CeShiTarget
2、在TARGET中选中项目,右键->Duplicate->Duplicate Only
3、经过以上步骤创建出来的target命名为之前工程名+copy(CeShiTarget copy),接下来做一下修改:
- 双加CeShiTarget copy重命名如:OtherApp
- 修改生成的CeShiTarget copy-Info.plist文件命名为OtherApp.plist
- 设置OtherApp的Bundle Identifier如:come.huaban.OtherApp,修改Bundle display name 如:OtherApp
- 在Build Setting中搜索packaging设置Info.plist File路径为我们创建的plist路径,Private Headers Folder Path修改为OtherApp/PrivateHeaders
- 在manager schmes中修改新创建target的名称,选中新创建的target->设置->Duplicate->命名为OtherApp,此时可选择将CeShiTarget copy删除
4、生成一个新的target,一定会与原target有区别,这里可以定义预编译宏,来区分两个版本的不同代码,预编译宏可以在Build Settings中Preprocessor Macros定义,比如在我们新建的OtherApp中定义
分别双击Debug、Release点击+号按钮,输入CHANNEL=1
效果:
此时在代码中就可以根据宏做事情
#ifdef CHANNEL
//OtherApp中需要执行的代码
#else
//CeShiTarget中需要执行的代码
#endif
具体怎么执行,一下步骤(我将Main.storyboard删除了,纯代码写)
1>在TARGET(CeShiTarget、OtherApp)->Main Interface清空
2>appDelegate中:
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; self.window.rootViewController = [ViewController new];
3>在ViewController:
#ifdef CHANNEL self.btn.hidden = YES; #else self.btn.hidden = NO; #endif
经过以上就完成设置
可以更进一步设置,如果想设置两个main.m、appdelegate文件分别管理两个应用,其实也很简单
1>选择CeShiTarget文件->show in finder ->创建文件夹命名为OtherApp,将文件夹拖入工程(记得add to targets选择OtherApp),此时工程中两个文件夹CeShiTarget、OtherApp在同一级
2>在OtherApp中创建类OtherAppDelegate继承UIResponder,注意target为OtherApp
创建类OtherAppDelegate,注意targets选择OtherApp
3>创建main.m文件,注意targets选择OtherApp,修改代码如下
3>可以讲OtherApp.plist->show in finder中移动到OtherApp文件夹下并移动到工程,在General中从新选择OtherApp.plist就可以了,在Build Setting ->packaging下查看info.plist file路径是否正确
4>设置AppDelegate、ViewController、CeShiTarget的main.m的target设置为CeShiTarget(点击.m文件在右侧可看到),不要勾选OtherApp
5>以后再创建类或文件是注意targets,否则报错找不到文件
最终目录如下:
同时可以分别设置AppIcon和LaunchImage:
1>Assets.xcassets中创建CeshiTargetAppIcon、CeshiTargetLaunchImage和otherTargetAppIcon、otherTargetLaunchImage,并分别设置图片
2>删除LauchScreen.storyboard,分别在TARGET中设置CeshiTarget和CeshiTarget,如下:
完成