一般情况下,我们是一个App应用对应一个Xcode Project,但是如果你需要同时开发多个产品,而这些产品90%的数据结构以及交互方式都一样,呈现在用户面前的这两个产品,最大的不一样就是UI元素以及某些配色时,如果这个时候还是一个App一个Xcode Project,普遍的做法是:
你会先开发完成一个产品,然后在复制到其他的产品中,非常的麻烦而且效率很低,你需要一个一个文件去比对。如果你使用模块的方式,开发完一个模块,然后再利用Pod的方式导入到其他产品中,虽然这样可行,但是涉及到产品的迭代开发以及产品的随时会变的交互,模块的细化分很难实现。
如果你也面临这样的问题,不放考虑一下下面讲的一个工程来开发多个App:
1、创建新的Target
如果现在你已经有个一个产品叫MultipleTargetA,如下图所示:

这时你想添加一个叫MultipleTargetB的产品,你需要做的是按如下的步奏进行创建:
选择Project -> Targets -> 右击MultipleTargetsA -> 选择Duplicate,这时我们就按照MultipleTargetsA复制了一个产品MultipleTargetsA copy,并且你会看到多出了一个文件MultipleTargetsA copy-Info.plist,如下图所示:

将TARGETS里面的MultipleTargetsA copy改名为MultipleTargetsB(选中回车进入编辑)。
2、编辑plist文件
上面讲到了当我们创建新的Target后会多出一个MultipleTargetsA copy-Info.plist文件,这个plist文件就是控制MultipleTargetsB的名称,版本等信息的文件,我们为了统一将他改为MultipleTargetsB-Info.plist,在修改名字之前你需要在MultipleTargetsB的Build Settings中找到MultipleTargetsA copy-Info.plist一项,待会儿我们修改完这个plist文件以后,还需要在这里填入它正切的位置信息。这样程序执行时才能找到它,不然程序是不能通过编译的:

处理完上面的操作后,程序能正常通过编译后我们还需要修改plist文件里面的一下符合我们预期的信息:

3、定义Preprocessor Macros
现在我们的工程里面同时包含了两个Target,现在工程里面的类是这两个Target公用的,如果你想在一个类里面区分是MultipleTargetsA还是MultipleTargetsB,这时你就需要用到Preprocessor Macros了,它的定义很简单,选中一个Target,然后在Build Settings里面搜索Preprocessor Macros一项,然后在里面添加表明是MultipleTargetsA的宏:

假如我们为MultipleTargetsA和MultipleTargetsB分别按如上步奏添加了标识:MultipleTargetsA和MultipleTargetsB,那在某个类里面判断现在编译的目标是哪个Target就变得简单了
1 2 3 4 5 6 7 8 | |
4、修改Scheme
现在MultipleTargetsB的Scheme还是MultipleTargetsA copy:

我们可以通过Manage Schemes,选择MultipleTargetsA copy,然后按回车键进行编辑,将它改为MultipleTargetsB:

5、资源文件和类文件
上面说了几个APP%90是相同的,不同的地方的资源文件和类文件如果要加以区分,比如A.m类属于MultipleTargetsA而不属于MultipleTargetsB,这时我们可以利用Xcode的Target Membership功能,来选择该类属于哪个Target。

对于Assets文件来说,它只能整体的选择某个Target,所以不同的Target你可能需要建立不同的Assets文件。