• xcode多target管理不同的环境(pod多target配置)


    说一下背景

    自从这个项目不死不活的迭代了2年,从项目搭建到现在,一直都是自己在开发和维护,所以项目结构非常清晰,但是之前的水平写的代码现在看来也是惨不忍睹,不过本人比较懒,也就没有考虑过重构的事情 - - 是不是一位不合格的程序员呢,哈哈哈!

    这个项目中开始是用oc写的,今年开始,由于喜欢上了swift,所以导致这次的迭代使用了swift开发,所以项目目前应该算是oc和swift混编(也没看到swift编译快到哪里去呀?),如何混编,这里就不多赘述了,百度搜一下很多,总结一下,大致就两点:

    1.swift调用oc的代码,需要使用“桥接文件”,桥接文件基本上在你创建swift代码的时候会提示你创建,桥接文件里导入的是在swift代码中要使用到的oc代码。 

     桥接文件的配置路径在BuildSettings 中搜索  Swift

      只要路径正确,配置完成后,在桥接文件里引入swift代码中要使用的oc库即可。

    2. oc代码调用swift代码文件。 在创建swift文件的时候,系统会自动创建一个 "productName-Swift.h"的文件,productName就是项目名,在要使用swift代码文件的地方 引入即可。这个文件是找不到的,但实际上是存在的。

    --------------------------分割线-------------------------

    以上是项目的背景,下面要说到使用targets了

    在这个项目之前,从来没有使用过targets,不是懒 而是因为之前的项目没这个必要

    但是这次客户有一个需求,这个app需要有一个内部版本,内部版本开放一些特殊的功能,而线上版本没有,所以才考虑使用targets来配置一下两种环境。

    如果在相同代码或者90%代码不变的情况下,有部署多端或者部署多个环境的要求下,建议还是使用targets来管理,很方便。

    1.创建targets

     这个不多说,很简单,单击目前已有的targets,选择“Duplicate”,复制一个相同环境的tagets,然后修改tagets名称。 然后  Manage Schemes,

     将两个tagets都选上,这样打包或者debug的时候,就可以选择不同的环境配置了

    2.配置内部版target

      上面第一步创建好了targets后,需要对这个targets进行配置,首先就是在BuildSettings中搜索 “preprocessing”,设置一个内部环境独有的宏 kTargetInternal,这样就可以在代码中使用此宏了。

     

    除了配置宏,还要配置info.plist。在上面的步骤中,当我们重新"Duplicate'一个targets的时候,也会重新生成一个plist文件,buildsetting搜索 'Packaging'

    OK,配置结束,这个时候运行基本上没问题,你可以在这个targets中配置属于这个环境独有的图片,启动图等等。

    一定要注意一下,如果你是用oc和swift混编的话,注意这里:

     由于不管有几个targets,在创建swift文件的时候,会默认生成一个productName-Swift.h的文件,所以这里一定不要配 $(TARGET_NAME)-Swift,这样会使你的程序报错,会提示你找不到xxxswift文件。不管在哪个targets中,一定要写死,

    =------------------------------------------------------------------------------------------------------------------------------------------------------------

    以下说一下

    一个工程多个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/LGLee/MySpaces.git'
    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
  • 相关阅读:
    Search a 2D Matrix leetcode java
    Sqrt(int x) leetcode java
    Search for a Range leetcode java
    php获取客户端公网ip代码
    ddns+ros(routeros)+centos7.6+nginx+php+dnspod
    limits.conf文件修改注意事项,限制文件描述符数和进程数
    阿里云本地存储网关的一些特点和注意事项
    ROS根据访问不同的网址,走不同的路由策略的脚本
    漫威所有电影的 按时间线的观影顺序
    sklearn—特征工程
  • 原文地址:https://www.cnblogs.com/niit-soft-518/p/11453449.html
Copyright © 2020-2023  润新知