1. 程式人生 > >iOS開發:Release/Debug模式與Configuration

iOS開發:Release/Debug模式與Configuration

一、release與debug模式

Debug和Release僅僅是編譯選項的不同,那麼為什麼要區分Debug和Release版本呢?

Debug和Release,主要是針對其面向的目標不同的而進行區分的。

Debug通常稱為除錯版本,通過一系列編譯選項的配合,編譯的結果通常包含除錯資訊,而且不做任何優化,為開發人員提供強大的應用程式除錯能力。

而Release通常稱為釋出版本,是為使用者使用的,一般客戶不允許在釋出版本上進行除錯。所以不儲存除錯資訊,同時,它往往進行了各種優化,以期達到程式碼最小和速度最優。為使用者的使用提供便利。

我們說一下在xcode上怎麼配置debug和release。

1. 配置

首先為了讓debug和release的區別更加明顯,我們會給各自一個option,這樣我們可以保證在debug中輸出的log,到了release就看不到了。

比如下圖的-DMY_DEBUG  -DMY_RELEASE,到了程式碼裡面如下實現

#ifdef  MY_DEBUG
NSLog(@"debug version")
#endif

      

2. 執行

再次我們可以配置debug和release,那編譯的時候怎麼選擇是用debug還是release,答案如下(通過product-》edit scheme調出)

    

二、Build Configuration

Xcode預設會有2個編譯模式,一個是Debug,一個是Release。

Release下不能除錯程式,編譯時有做編譯優化,會比用Debug打包出來的執行快,另外包也會更小。


使用場景

我自己碰到的使用場景是,我司的域名有3套:

  1. 針對開發時的域名
  2. 針對預上線時的域名
  3. 針對上線時對外公開的域名

這個時候,就會有多套域名,全部加起來可能有15個左右。每次打包時,就會特別混亂。(註釋掉現在使用的域名,開啟原本註釋掉的那部分,出差錯的可能蠻高的,而且不利於閱讀)

這個時候,我們就使用它來針對3個環境下不同域名做配置。

配置Build Configuration

1. 新增Configuration

這裡我們新增DEVELOP、BETA、保留原有的(release)。這裡我們選擇直接duplicatte Debug的配置,因為Release的不能做斷點除錯。


2. 檢視Configuration

新增完第1步的Configuration之後,在Edit Scheme裡就會看到新新增的配置項

3. 更改Preprocessor Macros

第1步裡我們直接複製了Debug的配置項,那這裡的值就會有問題,需要自己設定。


4. 在程式裡配置對應的Configuration下不同域名


也可以這樣使用


5. 測試

執行程式,修改Scheme下不同的Configuration,就能得到不同的值,那結果就是正確的了。

三、基於以上的實驗,app還可以在不同環境下配置不同的AppIcon和AppName

AppIcon

使用Asset Catalog,分別給三種環境下配置3個名字

  • AppIcon
  • AppIconDEVELOP
  • AppIconBETA

然後去Target - Build Settings裡搜尋Asset Catalog App Icon Set Name這一項


App Name

Target - Build Settings裡點+號,新增一個User-Defined Setting

比如我們請一個叫APP_DISPLAY_NAME的key值,下面BETA叫BETA,DEVELOP叫DEVELOP, Release還是用系統原配置。

進到Target - Info裡,修改Bundle name為$(APP_DISPLAY_NAME)




執行結果

打包配置

這幾天我們做了一件很蠢的事,把開發用的環境打包發給了Apple。
為了彌補這件事,順便規範以後的打包問題,於是做了一些配置上的補救。
查了下Apple的文件,原來可以配置,我將Release環境以外的Skip Install配置成NO,就不會Archive出ipa了。



參考文章: