美文网首页
Xcode下使用多target, 让同一份代码,一个工程 Pro

Xcode下使用多target, 让同一份代码,一个工程 Pro

作者: 啸狼天 | 来源:发表于2020-03-11 13:52 被阅读0次

为什么要使用多target?

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

 使用步骤:

下面我用一个微博的代码来做一个示范吧。
20160531163759167.jpeg
20160531163854784.jpeg
20160531163912815.jpeg

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


20160531163927097.jpeg

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


20160531163943175.jpeg
20160531164001121.jpeg
20160531164016215.jpeg
20160531164030434.jpeg

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

20160531164043989.jpeg
20160531164101849.jpeg

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

20160531164124809.jpeg

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


20160531164139497.jpeg
20160531164156075.jpeg
20160531164211138.jpeg

其他问题

一个工程多个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

相关文章

网友评论

      本文标题:Xcode下使用多target, 让同一份代码,一个工程 Pro

      本文链接:https://www.haomeiwen.com/subject/bgtcjhtx.html