美文网首页
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