iOS App配置多環(huán)境變量 + 使用fastlane快速打包并上傳蒲公英/AppStore

本項(xiàng)目包含 “iOS App配置多環(huán)境變量 + 使用fastlane快速打包并上傳蒲公英/AppStore”

GitHub:MultipleEnvironment

參考


需求:切換以下功能時(shí)無需修改代碼

  1. 切換服務(wù)器時(shí)。
  2. 開發(fā)、測試環(huán)境下的 “分享、統(tǒng)計(jì)” 等功能 使用開發(fā)渠道統(tǒng)計(jì)數(shù)據(jù),上線后才使用線上渠道統(tǒng)計(jì)。
  3. 開發(fā)、測試環(huán)境顯示全部功能,而正式上線時(shí)需服務(wù)端控制該功能的顯示/隱藏(例如:躲避蘋果的支付審核,測試環(huán)境下允許支付寶、微信、蘋果內(nèi)購 3種支付方式,而審核時(shí)只顯示蘋果內(nèi)購支付)(注:千萬不要試圖躲避內(nèi)購,否則蘋果生氣了后果很嚴(yán)重,親身體驗(yàn))

定義三個(gè)項(xiàng)目環(huán)境變量。

  • dev: 開發(fā)
  • adhoc: 測試
  • appstore: 線上

可選方案:

  1. 利用Build Configuration來配置多環(huán)境
  2. 利用xcconfig文件來配置多環(huán)境
  3. 利用Targets來配置多環(huán)境

配置步驟:

  1. 根據(jù)本項(xiàng)目需求,采用最簡單輕量級(jí)的方案 "Build Configuration" 來配置多環(huán)境。

  2. 為 "dev", "adhoc", "appstore" 3種環(huán)境分別創(chuàng)建 Debug、Release版的Configuration。

    1. 在Xcode的 Project 里面找到 Configurations。
    2. dev: 將"Debug"改名為"dev-debug",將"Release"改名為"dev-release",
    3. adhoc: 點(diǎn)擊 "+" -> "Duplicate Debug Configuration",改名為 "adhoc-debug", 再點(diǎn)擊 "+" -> "Duplicate Release Configuration" 改名為 "adhoc-release"。 這里使用 Duplicate,如果項(xiàng)目已經(jīng)安裝過cocoapods,則會(huì)把對(duì)應(yīng) Debug、Release環(huán)境下的配置一并拷貝過來。
    4. appstore: 同"adhoc"。
      注意:如果使用了cocoapods,完成后需要pod install一下。


      configurations_1.jpg
    configurations_2.jpg
  3. 選中 "對(duì)應(yīng)的Target" -> "Build Settings" -> "Active Compilation Conditions(Swift版,如果是OC,則是Preprocessor Macros)" 為不同環(huán)境配置不同的宏定義。(系統(tǒng)默認(rèn)已在Debug環(huán)境下帶有“DEBUG”標(biāo)志)

    1. dev-debug: DEBUG dev
    2. dev-release: dev
    3. adhoc-debug: DEBUG adhoc
    4. adhoc-release: adhoc
    5. appstore-debug: DEBUG appstore
    6. appstore-release: appstore

    這樣做比較靈活,項(xiàng)目中就可以自由組合 DEBUG、dev、adhoc、appstore 來判斷環(huán)境條件了。

    compilation_conditions.jpg
  4. 配置Scheme。

    1. 新建3個(gè)Scheme,"New Scheme", 名字可以為“工程名+ dev、adhoc、appstore等后綴”,自己看得懂就行。
    2. 創(chuàng)建后要勾選shared選項(xiàng),這樣該scheme才會(huì)加入到git中,與他人共享,然后可以刪掉最開始那個(gè)無用的Scheme了。
    3. "Edit Scheme",需要為每個(gè)Scheme的 "Run", "Test", "Archive"... 之類的 配置 "Build Configuration",按需選則對(duì)應(yīng)的。
      例如 系統(tǒng)默認(rèn)對(duì)應(yīng)的 Debug、Release如下
      dev: "Run" - "dev-debug"
      "Test" - "dev-debug"
      "Profile" - "dev-release"
      "Analyze" - "dev-debug"
      "Archive" - "dev-release"
scheme_1.jpg
scheme_2.jpg

代碼中的使用:

  1. 配置不同服務(wù)器地址
#if dev
let ServerURL = "http://aaa.com"
#elseif adhoc
let ServerURL = "http://bbb.com"
#elseif appstore
let ServerURL = "http://ccc.com"
#endif
  1. 開發(fā)、測試環(huán)境下,配置渠道。
#if dev || adhoc
channel = "development"
#else
channel = "appstore"
#endif
  1. Debug && dev環(huán)境下添加額外功能
#if DEBUG && dev 
// add some feature 
#endif

使用:

需要切換環(huán)境時(shí),直接選中對(duì)應(yīng)的Scheme,run就好了。


補(bǔ)充:

如果想在同一部手機(jī)上安裝多個(gè)不同環(huán)境下的相同App,可選擇 "對(duì)應(yīng)Target" -> "Build Settings" -> "+" -> "Add User-Defined Setting" 為不同Scheme配置不同包名、應(yīng)用名、應(yīng)用圖標(biāo)等,但是要注意,如果App里中有和 包名bundle Id相關(guān)的配置,則要小心了,例如推送證書,它指定推送到對(duì)應(yīng)bundle id的應(yīng)用上(親身踩坑)。 此時(shí)簡單的使用 "Build Configuration" 則無法滿足需求,可選擇 多Targets來配置多環(huán)境、多證書之類。


fastlane自動(dòng)打包上傳

使用fastlane快速打包并上傳蒲公英/AppStore這篇文章寫得非常清晰詳細(xì)了。我的fastlane配置文件已經(jīng)在項(xiàng)目中了 /fastlane/Fastfile。更多fastlane的actions信息可以在fastlane actions文檔中查看
在項(xiàng)目根目錄下使用:

  • "fastlane dev": 打開發(fā)環(huán)境的包并上傳蒲公英
  • "fastlane adhoc": 打測試環(huán)境的包并上傳蒲公英
  • "fastlane release": 打正式包并提交到"https://appstoreconnect.apple.com"上。
    其中 "fastlane release"正式包還需配置/fastlane/Appfile中的 "App Store Connect Team ID"和"Developer Portal Team ID"。(注意這里使用 release而不是appstore字段,是因?yàn)閍ppstore字段已經(jīng)被fastlane作為其他用途了)

補(bǔ)充:打包后,在項(xiàng)目根目錄下會(huì)出現(xiàn) ipa包,它已被.gitignore忽略,并且 每次打新包都會(huì)自動(dòng)覆蓋舊ipa包。通過fastlane打的包也會(huì)出現(xiàn)在 Xcode的Organizer中.


使用Jenkins持續(xù)集成

本項(xiàng)目未使用,可參閱利用Jenkins持續(xù)集成iOS項(xiàng)目

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • fastlane運(yùn)行所需要的環(huán)境: OS X 10.9以上 Ruby 2.0 以上 Xcode 擁有一個(gè)開發(fā)者賬號(hào)...
    阿姣_0405閱讀 3,026評(píng)論 0 4
  • 版本記錄 前言 我們?cè)谧鯝pp開發(fā)的時(shí)候,開發(fā)人員開發(fā)完成以后就要交給QA進(jìn)行測試了,有幾種方式,一種就是將QA的...
    刀客傳奇閱讀 3,705評(píng)論 0 12
  • 前言 眾所周知,現(xiàn)在App的競爭已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 9,071評(píng)論 34 59
  • 看到一篇對(duì)iOS多環(huán)境配置介紹不錯(cuò)的文章,翻譯了一下,原文鏈接這里: 原文鏈接 下面的例子展示了如何在Xcode中...
    可了個(gè)可閱讀 4,768評(píng)論 5 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,969評(píng)論 19 139