簡體   English   中英

如何使用外部文件.plist或.xcconfig啟用部分代碼

[英]How to enable parts of code with external files .plist or .xcconfig

我有一個項目正在使用fastlane工具鏈進行構建。

我有多個部署目標(曲棍球應用,試飛,應用商店)-對於每個部署,我都想禁用和啟用某些功能。

例如-當我使用hockeyapp的企業證書進行Alpha構建時,我想禁用flurry分析。

當我進行Beta版構建時,我想更改應用程序ID和/或更改快速鍵

我目前可以使用各種sed命令在fastlane中進行所有工作,以搜索和替換文件等。

話雖這么說,我相信還有更好的方法。

我知道在Obj-c中我可以針對某些構建環境標志#ifdef來啟用/禁用部分代碼。 快速解決此問題的最佳方法是什么。

我是否使用某種自定義.plist文件或.xcconfig設置來告訴應用程序要做什么/使用什么,或者有其他方法嗎?

我感興趣的是

  • 禁用部分代碼(忽略特定配置中的特定功能)
  • 更改代碼(也稱為API_KEY或類似名稱)中使用的值

您仍然可以迅速使用類似於#ifdef預處理程序的東西,並且可以將其與.xcconfig結合使用,后者可用於指定各種變量。 您的腳本可以生成將進入.xcconfig變量的值。

基本設置為:

  1. 創建一個.xcconfig文件,並將其與所需的構建配置關聯(在項目設置->信息中)。
  2. 將變量添加到.xcconfig 例如,如果要激活ALPHA構建,可以執行以下操作: IS_ALPHA_BUILD=-D ALPHA 注意此處需要的-D 如果要關閉該標志,腳本可以將變量保留為空。
  3. 在目標的構建設置中,在“快速編譯器-自定義標志”->“其他快速標志”下,基於.xcconfig文件變量添加標志: ${IS_ALPHA_BUILD} 如果正確設置了.xcconfig則在完成變量的編輯后,應該會看到其內容。
  4. 在代碼中使用標志:

     #if ALPHA print("alpha") #else print("not alpha") #endif 

我希望這會有所幫助,或者至少會為您提供適合您的最佳方法的想法。

我建議將可選代碼放在使用擴展名實現的單獨文件中。 然后,您可以使用項目導航器中的文件屬性來啟用/禁用文件。

即使對於一個項目中有3個目標的單個應用程序,我也要這樣做:完整的IOS版本(付費),有限的IOS版本(免費)和Apple TV版本。

我還使用相同的技術來啟用/禁用用於多個地方的整個類的存根,但實際上只能在其中一個目標中工作。

我有一個類似的概念問題。 我想使用FDD,然后根據需要使用一種機制來禁用功能。 我將嘗試使用pList。 我最初的想法是在plist中聲明所有功能,並為它們提供布爾值。 因此,如果需要啟用功能,我將僅在plist中啟用它。

在編程方面,我計划將所有功能都寫為帶有條件語句的父數據類型的擴展。 因此,從控制器的角度來看,我的代碼工作將減少為僅調用行為/函數。

我希望這是有道理的,我可能會遲早重寫答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM