iOS多个环境配置

前言

多环境:即不同环境,比如开发、测试、正式。保证安全生产,环境隔离的作用。

多Target: 在项目中添加多个 Target,,以达到代码复用。比如开发同一项目多App(那些App有高度复用性,有很多模块都是通用的。某某洗车用户端和商家端)都具有相同的登录注册页面流程,大部分共用的请求接口。

多环境配置

参考手把手教你一个ios App配置多环境变量,文章介绍了 build configuration 、xcconfig文件、多Target的配置。

多target 构建相似App

场景应用举例:

如何创建target

方式1:复制某个target

以某个基target为基础复制出一个新的 target,能够使用基 target之前存在的代码和文件资源,只需要做少量改动即可共享。

iOS开发之多个targetcsdn--浪得虚名

方式2:新建target

 引入的target内容完全独立(包括Appdelegate info.plist等),当然也可以共享。

iOS一个工程实现多个Target (csdn -- 王颜华)

三、如何实现共享

 可以查看某个文件哪些target可以使用,如下图:
同理,如果想实现某个文件的共享,则查看其target membership 和操作来实现。
新生成的文件怎么共享,在创建新文件的时候,点击option,选择需要的target.如下图只给App1使用:
可以通过宏切换/(swift custom flags)和条件编译来操作共享代码的不同业务。
综合使用: ios多个target使用 [简书--ShanJiJi]

扩展:preprocessing Macors 通过宏切换

参考:preprocessor Macors : 全局宏命令的应用

swift 通过宏定义(进行条件编译[比如多app和或不同环境])  如果是纯swift中调用的话 只需要在Swift Compiler - Custom Flags 的Other Swift Flags中添加即可。如果是OC与Swift 混编则还需要在preprocessing Macors 中设置。

代码中的条件编译:​​​​​​​

let label =  UILabel(frame: CGRect.init(x: 20, y: 20, width: 101, height: 50))
// ...
var appName = ""
#if APP_2   //通过预编译命令 来区别不同target
appName = "这是App2"
#else
appName = "这是App1"
#endif
label.text = appName

多target'  podFile配置  
方式1:(推荐) 

platform :ios, '8.0'

# 多个target共用一套pod的写法,项目中不能有名字为CommonPods,防止冲突;
abstract_target 'CommonPods' do

# 共用的pod第三方
pod 'AFNetworking'
pod 'IQKeyboardManager'

    # 项目中的target各自的设置
    target ‘Target1’ do
    #可以在这里添加Target1独自引用的pod第三方
    end
    target 'Target2’ do
    #可以在这里添加Target2独自引用的pod第三方 
    end
end

方式2:

platform :ios, '8.0'

# 共用的pod第三方
pod 'AFNetworking'
pod 'IQKeyboardManager'

# 项目中的target各自的设置
target ‘Target1’ do
 #可以在这里添加Target1独自引用的pod第三方
end

target 'Target2’ do
 #可以在这里添加Target2独自引用的pod第三方 
end

方式3:

 platform :ios, '10.0'

 use_frameworks!

def common_pods   #定义为一个模块 这样就可以多target方便使用
    #MVVM 框架  rx化所需支持库
    pod 'RxSwift', '~> 3.5.0'
    pod 'RxCocoa', '~> 3.5.0'
    pod 'RxOptional', '~> 3.1.3'
    pod 'RxDataSources', '~> 1.0.3'
    pod 'NSObject+Rx', '~> 2.3.0'
    
    pod 'Alamofire', '~> 4.6.0'              #网络请求
    pod 'ObjectMapper', '~> 2.2.5'           #数据模型
    pod 'AlamofireObjectMapper', '~> 4.1.0'
    pod 'SwiftyJSON', '~> 3.1.4'             #Swift 的json 解析
    pod 'MJRefresh', '~> 3.1.12'             #下拉刷新(OC)
    pod 'Kingfisher', '~> 3.10.1'            #网络图片加载
    pod 'SnapKit', '~> 3.2.0'                #布局
    pod 'PKHUD', '~> 4.2.3'                  #hud提示框 swift
    pod 'Diff', '~> 0.5.3'                   # 函数式tableview编程
    
    pod 'AMapLocation-NO-IDFA'               #高德地图定位 无广告
    pod 'AMap3DMap-NO-IDFA’
    pod 'AMapSearch-NO-IDFA'                 #高德地图搜索 无广告
    pod 'JPush'                              #极光推送
    pod 'JShare'                             #极光分享
    pod 'QRCodeReader.swift’, ’~> 7.5.1'     #扫二维码
    pod 'EFQRCode'                           #也是扫二维嘛的
    pod 'EFAutoScrollLabel', '~> 1.0.2'
    pod 'WechatOpenSDK', '~> 1.8.0'          #微信支付/分享SDK
end



target 'CarWashing' do
    common_pods
end

target 'CarWashing-Staff' do
  common_pods
  pod 'AMapNavi-NO-IDFA', '~> 5.2.1'
end



post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == 'RxSwift'
            target.build_configurations.each do |config|
                if config.name == 'Debug'
                    config.build_settings['OTHER_SWIFT_FLAGS'] ||= ['-D', 'TRACE_RESOURCES']
                end
            end
        end
    end
end

参考

手把手叫你一个 iOS app 多环境变量

介绍 Build Configuration、xcconfig、多 target 配置。

在 Xcode 中管理不同的 Build Configuration

除了介绍 Configuaration 理解和配置,还介绍如何在 info.plist 中使用定义 key,以便在代码中使用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值