为什么要使用多target?
因为在一些外包公司,很多项目都非常类似,甚至有时候只是修改了一下主题颜色,换一下图标,或者增减了一些小功能,但是其他7成以上的代码都是可以复用的。如果我们直接copy多一份代码来做新项目的话,那么当原始代码的某个功能出现bug的时候,我们可能要同时去修改十几个其他项目的那行代码,这是一件非常痛苦的事,繁琐而且容易出错。但是多target的话,就没有这个问题了。
使用步骤:
下面我用一个微博的代码来做一个示范吧。



4.点击Xcode左上角Run,Stop旁边的Target名称,在下拉框中选择Manager Schemes

5.新建一个文件夹,文件夹拖拉到项目中的时候,target只选择wechat。




9.步骤9和步骤11其实实现的是一样的,不过是两种不同的方法


11.点击wechat target,点击Build Setting,搜索info.plist.修改info.plist的url地址。(此步骤和步骤9是一样的效果的,不过是两种不同的方法设置。)

12.再搜索Preprocessor Macros,把debug状态和release状态的值都修改为wechatApp。



其他问题
一个工程多个target引入CocoaPods的方式
(推荐)方式一:通过abstract方式引入
#targetA: [AFNetworking,Masonry]
#targetB:[AFNetworking,SDWebImage]
abstract_target 'abstract_pod' do #这里的abstract_pod在实际targets中不存在,是虚拟
pod 'AFNetworking'
target 'targetA' do
pod 'Masonry'
end
target 'targetB' do
pod 'SDWebImage'
end
end
方式二:循环target 添加pod
#多个target的pod引入,方式一:如每个pod都引入masonry
targetArray = ['target1','target2']
targetArray.each do |t|
target t do
pod 'Masonry', '~> 1.1.0'
end
end
方式三:提取公共pods 各个target引入
#多个target的pod引入,方式二:如每个pod都引入masonry
def commonPods
pod 'Masonry', '~> 1.1.0'
end
#工程一:
target 'AnyDoorDemo' do
commonPods
pod 'AFNetworking', '~> 3.2.1'
target 'AnyDoorDemoTests' do
inherit! :search_paths
pod 'Specta', '~> 1.0.7'
pod 'OCMock', '~> 3.4.2'
pod 'Expecta', '~> 1.0.6'
end
target 'AnyDoorDemoUITests' do
inherit! :search_paths
# Pods for testing
end
end
#工程二:
target 'HostApp' do
commonPods
end
模板样例
#添加索引库索引文件地址
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
#多个target的pod引入
def commonPods
pod 'Masonry', '~> 1.1.0'
end
#工程一:
target 'AnyDoorDemo' do
commonPods
pod 'AFNetworking', '~> 3.2.1'
#测试相关↓
target 'AnyDoorDemoTests' do
inherit! :search_paths
pod 'Specta', '~> 1.0.7'
pod 'OCMock', '~> 3.4.2'
pod 'Expecta', '~> 1.0.6'
end
target 'AnyDoorDemoUITests' do
inherit! :search_paths
# Pods for testing
end
end
#工程二:
target 'HostApp' do
commonPods
end
网友评论