美文网首页收藏ios
iOS 多target、多环境认识及使用

iOS 多target、多环境认识及使用

作者: ZJ_偶尔上路 | 来源:发表于2017-06-13 11:24 被阅读173次
    为什么要多target?

    比如现在你公司有一个产品分为普通用户版、VIP用户版、SVIP版等。其实大部分功能是一样的,只不过有一些功能需要成为VIP或者SVIP才能使用,这时候多target就是最佳选择。
    简单的说,产品功能类似,只有部分功能需要做不同处理的时候选择使用多target。

    为什么要多环境?

    一般情况下我们做产品的时候都会有开发接口、测试接口、正式接口等,也就是说在不同情况下使用不同的url去请求数据,这个时候就需要用多环境了。“不同接口”只是一个举例,在做一个产品的时候,不同的情况下会有更多更复杂的不同配置,多环境就能够完美的解决问题。

    --------------------------------------------------------------------------------------------------------------------
    多target的创建
    屏幕快照 2017-06-13 上午10.26.32.png

    点击 Duplicate就会复制出一份XXX Copy的target,可以看到工程目录中多了一个XXX copy-Info.plist文件,就是这个新target的info.plist,所有的配置都可以在这里进行配置。

    创建全新Targets

    可用通过菜单Editor->Add Target->Application->Singe View Application->Product Name
    来新增

    Targets之间异同
    • 一个Target包含了Copy Bundle Resources, Compile Sources, Link Binary With Libraries、info.plist等
    • Copy Bundle Resources 是指生成的product的.app内将包含哪些资源文件
    • Compile Sources 是指将有哪些源代码被编译
    • Link Binary With Libraries 是指编译过程中会引用哪些库文件
    • 最关键的就是info.plist文件,iPhone项目的很多关键性内容, 比如程序名称, 最终生成product的全局唯一id等都可用info.plist来设置。
    • 不同的target还可以定义完整的差异化的编译设置, 从简单的调整优化选项, 到增加条件编译所使用的编译条件, 以至于所使用的base SDK都可以差异化指定
    注意事项
    • 新增文件、资源时,如果有多个Target,添加新文件时要注意勾选多个Target,要不然就会报错。
    • 修改Target名称、修改plist名称、修改schemes
    • 修改Bundle Identifier、选择不同证书、一些基本配置进行修改。
    设置预编译宏

    Target 开发版->Build Settings然后搜索Preprocessor Macros然后增加宏,区别不同target、shemes


    多环境创建

    1.添加Build Configuration

    • 打开项目的workspace,进入Xcode的主界面。选中主要工程的project -> info,找到Configurations, 点击下方的“+”。
    F7D5A7EF-DE86-4ECF-90E3-3686B13EBF5A.png
    • 从图中可以看到两个已经添加好的Configuration: Debug 和 Release,选择“deplicate debug configuration”,添加一个新的configuration,命名为DEV。
    • 从图上可以看到,configuration都已经有了默认的configuration set(也就是xxconfig文件)。这是因为我的工程中已经包含了cocoapods。默认的configuration set是pods添加的。
    • 这个时候新增加的build configuration并没有对应的pods的xcconfig,所以项目会报错。把新建的configuration 对应的set 设置为none
    • 命令行运行 pod install
    之后可能会有ld: library not found for -lPods-之类的错误,在target->BulidPhase->Link Binary With Libraries 中将libPod.a删除即解决
    
    • 重要说明:如果没安装cocoapods忽略最后三步

    2.新建并配置xcconfig文件

    • command + "n", 选择 iOS -> Other -> Configuration settings file
      新建4个xxconfig文件,我采用以下命名:


      0C9189D1-2335-4828-AFDE-1BF699A9C693.png

      如果是3个target、5种环境就要创建15个xcconfig文件。

    • 说明: 在commom.xcconfig中设置所有环境的共同配置,如:

    BUILD_VERSION = 1.0.0
    

    在其它xcconfig文件中做如下配置:

    //导入公共 config
    
    #include "Common.xcconfig"
    
    //导入pods 对应的 config
    
    #include "Pods/Target Support Files/Pods-DMMutiTargetScheme-DMMutiTargetSchemeBase/Pods-DMMutiTargetScheme-DMMutiTargetSchemeBase.debug.xcconfig"
    特别注意:- 可能会因为项目名称的不同导致路径不同,如果不太确定的可以再次pod install。
    pods会给出提示,其中包含了正确的路径(文件相对路径)。
    
    APP_DISPLAY_NAME = DEV  特有的配置
    
    • 完成以上后,把build configuration切换成对应的新建的文件
      可能会有如下错误:
    diff: /../Podfile.lock: No such file or directory   
    diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. 
    Run 'pod install' or update your CocoaPods installation.
    这种错误就要查看xcconfig文件中,include的pods文件路径是否正确。
    
    #include "Pods/Target Support Files/Pods-[工程名称]-[target名称]/Pods-[工程名称]-[target名称].[环境名称].xcconfig"
    
    

    3、设置环境变量

    完成上面的步骤就已经添加好了环境,剩下的就是设置环境变量
    在Info.plist文件中,设置Bundle name 为

    4F48BFE5-7BA6-44ED-A588-AE078226FB95.png

    应用的名称就会根据配置改变了。

    4.然而在代码中需要根据环境改变某些变量的值怎么办呢?

    • 设置预编译头参数
      Project -> Build settings -> Apple LLVM 7.1 - Preprocessing

    相关文章

      网友评论

        本文标题:iOS 多target、多环境认识及使用

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