iOS 在Xcode项目中配置多个环境

ios 多环境及多target配置

前言:

      多环境:即不同环境,比如测试服务器环境,用户体验环境,正式发布环境。不同环境可以打出不同的包并且同时安装在同一测试机上。

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


Xcode官网文档:

点我


多环境配置

参考链接

手把手教你一个ios App配置多环境变量(三种方式 build configuration 、xcconfig文件、多Target)


多target 构建相似App

一、场景应用举例:

 猿题库客户端技术细节:使用多target构建大量相似App

二、如何创建target

方式1:直接复制某个target(将会共用复制的大部分东西)

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

方式2:通过新建target , 引入的target内容完全独立(包括Appdelegate info.plist等),当然也可以共享。

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

三、如何实现共享

 
 可以查看某个文件哪些target可以使用,如下图:
iOS 在Xcode项目中配置多个环境_第1张图片
同理,如果想实现某个文件的共享,则查看其target membership 和操作来实现。

新生成的文件怎么共享,在创建新文件的时候,点击option,选择需要的target.如下图只给App1使用:
iOS 在Xcode项目中配置多个环境_第2张图片
可以通过宏切换/(swift custom flags)和条件编译来操作共享代码的不同业务。
综合使用:ios多个target使用 [简书--ShanJiJi]

注意点:

扩展:preprocessing Macors 通过宏切换

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

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

iOS 在Xcode项目中配置多个环境_第3张图片

代码中的条件编译:

 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配置  
方式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,移动开发,#,Xcode)