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

本項目包含 “iOS App配置多環境變量 + 使用fastlane快速打包并上傳蒲公英/AppStore”

GitHub:MultipleEnvironment

參考


需求:切換以下功能時無需修改代碼

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

定義三個項目環境變量。

  • dev: 開發
  • adhoc: 測試
  • appstore: 線上

可選方案:

  1. 利用Build Configuration來配置多環境
  2. 利用xcconfig文件來配置多環境
  3. 利用Targets來配置多環境

配置步驟:

  1. 根據本項目需求,采用最簡單輕量級的方案 "Build Configuration" 來配置多環境。

  2. 為 "dev", "adhoc", "appstore" 3種環境分別創建 Debug、Release版的Configuration。

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


      configurations_1.jpg
    configurations_2.jpg
  3. 選中 "對應的Target" -> "Build Settings" -> "Active Compilation Conditions(Swift版,如果是OC,則是Preprocessor Macros)" 為不同環境配置不同的宏定義。(系統默認已在Debug環境下帶有“DEBUG”標志)

    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

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

    compilation_conditions.jpg
  4. 配置Scheme。

    1. 新建3個Scheme,"New Scheme", 名字可以為“工程名+ dev、adhoc、appstore等后綴”,自己看得懂就行。
    2. 創建后要勾選shared選項,這樣該scheme才會加入到git中,與他人共享,然后可以刪掉最開始那個無用的Scheme了。
    3. "Edit Scheme",需要為每個Scheme的 "Run", "Test", "Archive"... 之類的 配置 "Build Configuration",按需選則對應的。
      例如 系統默認對應的 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. 配置不同服務器地址
#if dev
let ServerURL = "http://aaa.com"
#elseif adhoc
let ServerURL = "http://bbb.com"
#elseif appstore
let ServerURL = "http://ccc.com"
#endif
  1. 開發、測試環境下,配置渠道。
#if dev || adhoc
channel = "development"
#else
channel = "appstore"
#endif
  1. Debug && dev環境下添加額外功能
#if DEBUG && dev 
// add some feature 
#endif

使用:

需要切換環境時,直接選中對應的Scheme,run就好了。


補充:

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


fastlane自動打包上傳

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

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

補充:打包后,在項目根目錄下會出現 ipa包,它已被.gitignore忽略,并且 每次打新包都會自動覆蓋舊ipa包。通過fastlane打的包也會出現在 Xcode的Organizer中.


使用Jenkins持續集成

本項目未使用,可參閱利用Jenkins持續集成iOS項目

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容