美文网首页
iOS开发一个Project多个Target的使用

iOS开发一个Project多个Target的使用

作者: 小丫小峰子 | 来源:发表于2017-07-28 17:49 被阅读0次

引言

苹果商店里面有些app区分免费版和收费版,如凤凰视频(探索版、专业版),但是仔细看,里面大部分内容都是一样的,只有部分是不同的,如icon、启动页等,那么他是怎么做到的呢?一个版本一份代码么?很显然不是,这样会出现很多重复的工作。答案是:一份代码,生成多个target

Target

  • Copy Bundle Resources
    指生成的product的.app内将包含的资源文件
  • Compile Sources
    指有哪些源代码被编译
  • Link Binary With Libraries
    指编译过程中会引用哪些库文件
  • info.plist文件
    项目的一些核心的配置信息,包括:app名称、app唯一标示(Bundle identifier)、版本号等

利用target包含的内容的特性,即可达到一份代码产出多个target,从而生成多个app的目的。

新建target

选中项目左侧的project,点击XCode菜单栏 Editor->Add Target->Application->Singe View Application->Product Name


这样会产生新的AppDelegate和app新的入口,不能达到我们的目的

拷贝target

选中原来的target,右击选择 Duplicate

会产生新的target-copy和对应的info.plist,双击可修改拷贝的target名称和info.plist的文件名,但是拷贝的info.plist独立于项目工程目录外边,我们可以右击show in Finder拖到合适的目录下以方便管理,如Supporting Files。


这样就可以配置新拷贝的target的info.plist,如app名称改为“Target收费版”,原来的是“Target免费版”。

区分图片资源

由于我们的图片资源都放在.xcassets里面,因此要为每个target都创建一个.xcassets,分别为Assets-free.xcassets 和 Assets-charge.xcassets,然后为每个target的Copy Bundle Resources选择配置对应的.xcassets以达到加载不同的图片资源的目的。

免费版 收费版

至此,相同文件名的不同图片放在对应的.xcassets下,通过[UIImage imageNamed:@"图片名"];不同target就可以根据相同的图片名加载不同的图片资源。

icon和启动图要针对每个target单独设置

免费版 收费版

区分逻辑代码

我们针对每个target,都定义一个名称相同、值不同的宏,在代码里面通过这个宏的值来区分target,以达到区分逻辑的目的。

注意Debug和Release模式都要设置

免费版 收费版

至此,不同target的全局宏已设置好,代码这样判断:

//TARGET就是之前定义的宏的名称

if (TARGET == 0) {
        //免费版
        self.title = @"Target免费版";
} else if (TARGET == 1) {
        //收费版
        self.title = @"Target收费版";
 } else {
        //...
}
icon和app名称对比 免费版 收费版

相关文章

网友评论

      本文标题:iOS开发一个Project多个Target的使用

      本文链接:https://www.haomeiwen.com/subject/mahflxtx.html