最近公司提了很奇葩的需求,需要将1份代码做成2个APP,但是最开始要不一样,在做了某些操作之后又要变成同一APP。对这样的需求,我真的。。。。。
冷静之后想了一下,脑海中想了2个想法:
1.重开一个project,代码写2份
2.运用多Targets进行代码重用。
重新开个project肯定是不现实的,后期BUG修改、新功能开发,那就是1.5倍的量。
那就只有用多Targets了,但是在运用target之前,我们需要先搞清楚几个概念。
相关概念
Target
苹果官方是这样说的:
A target specifies a product to build and contains the instructions for building the product from a set of files in a project or workspace.
翻译我就不翻译了,说下我自己的理解:我觉得target就像是一个"菜谱",它里面包含了怎么把源代码和相关的设置组合起来打包成一个APP的步骤。相应的target里面可以继承project的设置,也可以针对当前target进行单独的设置。
Project
An Xcode project is a repository for all the files, resources, and information required to build one or more software products.
A project contains all the elements used to build your products and maintains the relationships between those elements.
It contains one or more targets, which specify how to build products.
而project我认为更像包含了一道菜的原材料、菜谱、过程等等的大容器。官方也说了,project就是一个包含所以文件、环境、设置等等一系列的仓库。一个project可以包含很多个target,你可以对这些target进行一个统一的管理设置。
Scheme
An Xcode scheme defines a collection of targets to build, a configuration to use when building, and a collection of tests to execute.
scheme就是我们在每次进行编译、运行或打包时候在左上角选取的,它里面包含了每次进行运行时候的target和相应的配置等等。
动工
弄清楚了相应的概念之后我们就可以开始进行一个project产出多个APP了,其实运用的就是一个project对应多个target。
复制当前target
对我们当前的target进行复制,只需要在当前target上右键然后选取duplicate,会弹出以下选项
右边那个选项是复制并变换成iPad应用的,我们不需要,就直接点击duplicate就行了。
这样我们就会得到刚才这个target的复制版本,并且会在左边项目目录的最下边看到一个info.plist,就是这个target的配置info。
( 但是如果你一旦移动了这个文件,当然不是移动引用,是移动它的文件夹位置的话,设置面板就会出现叫你重新选择的选项,只需要重新选择刚才你移动的plist就行了 )。
在你duplicate之后,你的scheme列表里面也会多出来一个相应的scheme。
这个就是你在运行时候选取的对应的APP。
pods设置
如果你项目用到了pods,之前的pods会随着你的duplicate而复制一份,你不需要做任何的改变,在新的target里面就可以进行运用。
但是我们开发肯定会添加其他的第三方框架,这就需要对每个target运用不同的设置了。
platform:ios,'8.0'
abstract_target 'defaults' do
pod 'AFNetworking'
target 'target-1'
pod 'MJRefresh'
target 'target-2'
target 'target-3'
end
这里我们运用的defaults这个target是不存在的,而且项目中也不能存在与之相同名字的target。这样我们workspace里面的所有target就都有公共的库了。
如果想对每个target运用不同的库,就在下面写上需要设置的target,并加上需要的库就行了。