iOS 中创建一个Universal App并且添加多个target

在iOS中要想做一个通用iPhone和iPad的应用其实很简单,我们只需要在创建建工程的时候选择

iOS 中创建一个Universal App并且添加多个target

这样你创建出来的工程就可以像这样

iOS 中创建一个Universal App并且添加多个target

那么如果要想在工程里判断什么时候处理iPad的逻辑什么时候处理iPhone的逻辑也很简单,只需要添加一个define即可


#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
if (isPad) {
        self.view.backgroundColor = [UIColor yellowColor];
    }else{
        self.view.backgroundColor = [UIColor blueColor];
    }

这样的话,就可以看到效果了,自行测试吧


如果要想改变已经做好的工程也很容易,在target的旁边也有一个选项,也可以改变

iOS 中创建一个Universal App并且添加多个target


添加target

如果你做一个工程有很多相似之处,例如一个是收费版,一个是免费版,那么可以用添加target的方法来完成


从XCode左侧的列表中, 我们可以看到一个Target包含了Copy Bundle Resources, Compile Sources, Link Binary With Libraries. 其中
Copy Bundle Resources 是指生成的product的.app内将包含哪些资源文件
Compile Sources 是指将有哪些源代码被编译
Link Binary With Libraries 是指编译过程中会引用哪些库文件

通过Copy Bundle Resources中内容的不同设置, 我们可以让不同的product包含不同的资源, 包括程序的主图标等, 而不是把XCode的工程中列出的资源一股脑的包含进去.
而这还不是一个target所指定的全部内容. 每个target可以使用一个独立, 不同的Info.plist文件.
我们都知道, 这个Info.plist文件内定义了一个iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等等.

而且不同的target还可以定义完整的差异化的编译设置, 从简单的调整优化选项, 到增加条件编译所使用的编译条件, 以至于所使用的base SDK都可以差异化指定.


可以通过复制target去创建新的target,也可以自己完全创建新的target,之后如果想判断哪个target做什么操作,就可以使用这个方法


NSString* bundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"];
    NSLog(@"name == %@",bundleName);

iOS 中创建一个Universal App并且添加多个target


参考文章:XCode工程内多Targets教程

iOS 中创建一个Universal App并且添加多个target

上一篇:IOS开发之苹果私有API的使用


下一篇:【原创】AndroidStudio Gradle编译脚本中关于插件部分的变更