美文网首页
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