1、选择Target的主项目TestA:
右键->Duplicate
->Duplicate only
生成对的Target
文件:TestA-coply,TestA-coply.plist
2、修改Target的名字:
选择Manager Schemes
->TestA-coply
->TestB
target列表->TestA-coply
->TestB
plist文件TestA-coply.plist
->TestB.plist
3、创建分类管理文件,有助于管理:
一般是plist,可以调整名字,然后修改
对应关联target路径
若有xxx.entitlements文件也可以,修改
对应target路径
类似图片资源集合、三方配置文件等
3.1、对应Target的配置文件plist修改:
Build settings
->搜索plist
->修改info.plist File
路径为:$(SRCROOT)/TestA/TargetB/TestB.plist
测试验证是否成功,修改TextB.plist中项目名,看target中TestB项目名是否改变
3.2、若有xxx.entitlements文件,
同理->搜索entitlements
->修改Code Signing Entitlements
路径
4、Target图片资源文件差异化:
右键New File
->选择Asset Catalog
->创建是选择关联对应Target
4.1、注意
若资源关联多个Target,单独的则不生效
关联单独target的资源不起作用,会使用关联多个Target资源的,
比如TestAAssets
图片资源关联两个Target(TestA,TestB)
则TestBAssets
图片资源关联TestB的就不生效了,
这是运行TestB
项目,用到图片资源也是TestAAssets
同理其他资源文件也可以设置不同Target,如类、LaunchScreen等
5、Target功能差异化运行,通过Macros宏处理
选择Target中项目TestA
->Build Settings
->搜索Macros
Preprocessor Macros
中,默认是DEBUG=1
,双击添加APP_TYPE=1
(APP_TYPE可以自己定义,值也可以自己设置定义,这里用1,2,3,标识不同Target),
需要Preprocessor Macros
中Debug\Release模式里都对应设置
同理Target的TestB
也对应设置,APP_TYPE=2
切换对应项目调试
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
#if APP_TYPE == 1
NSLog(@"TestA项目");
#elif APP_TYPE == 2
NSLog(@"TestB项目");
#endif
return YES;
}