多环境:即不同环境,比如测试服务器环境,用户体验环境,正式发布环境。不同环境可以打出不同的包并且同时安装在同一测试机上。
利用多Target , 还可以用来开发同一项目多App(那些App有高度复用性,有很多模块都是通用的。)比如某某洗车用户端和商家端,都具有相同的登录注册页面流程,大部分共用的请求接口。
点我
参考链接
手把手教你一个ios App配置多环境变量(三种方式 build configuration 、xcconfig文件、多Target)
方式1:直接复制某个target(将会共用复制的大部分东西)
iOS开发之多个targetcsdn--浪得虚名
方式2:通过新建target , 引入的target内容完全独立(包括Appdelegate info.plist等),当然也可以共享。
iOS一个工程实现多个Target (csdn -- 王颜华)
参考: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))
label.textColor = UIColor.red
#if APP_2 //可以用来区别不同target
label.text = "这是App2"
#else
label.text = "这是App1"
#endif
self.view.addSubview(label)
多target' podFile配置
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