簡單的**如下,?
1
2
3
4
#if defined(debug)||defined(_debug)
nslog(@
"測試**"
);
nslog(@
"test coding"
);
#endif
上面的#if #endif巨集定義的意思就是如果定義了debug,那麼就使用nslog輸出;否則這段**直接忽略。有人會疑問這個debug和_debug來自**,這個其實不用擔心,這個來自於xcode的預設設定,我們可以取消debug模式,開啟release發布模式,如下截圖所示,
選擇product->scheme->edit scheme,
下圖可以選擇debug和release兩種模式,
這裡我選擇了release,那麼則預設沒有定義debug,則上面**中#if...#endif之間的輸出nslog不會執行。這樣就在發布程式的時候,節省了一些硬體裝置的資源。
那麼,如何在 swift 專案裡正確地設定 logging 呢?以下我以 crashlytics 為例,當然,用其他工具甚至不用第三方工具也是可以的。
在過去 objective-c 專案裡,針對 development 環境和 release 環境使用不同的方法進行 logging 我們是通過 preprocessor macros 來進行的。比如 debug 是作為乙個預設的 macro 加進去的:看下圖,只要有 $(inherited) 這個在,debug 這個 macro 就會存在專案的 development 模式。
那麼在 swift 專案裡面我們如何去區分 debug 和 release 模式呢?自然也有類似的方式。
實際上,swift 語言也支援類似於 c 語言一樣的 macro,常用的那些基本能滿足我們的使用需求。使在 swift 專案裡也和 objective-c 一樣使用 debug 來區分 debug 和 release,我們只需要到 target 的 build settings 裡面,找到 swift compiler custom flags,在 debug 處傳入乙個 -d debug 即可。
這樣如果你的專案混合了 objective-c 和 swift,objective-c **依然會通過之前的 debug 來做正確的分支編譯,swift 編譯器也可以通過這個專門的 custom flags 來作分支編譯。
定義好了這個,我們就可以做正確的 logging 處理了。
主要說明:
於是我在 swift **裡重寫了 nslog 這個方法,使其根據不同的編譯環境使用不同的 crashlytics 方法,達到了我預期的效果。
這裡還有一點可以改進或討論的餘地,由於 swift 把 string 的使用變得很方便,我從環境變數構建乙個字串再也不用像 objective-c 那樣:
nslog而是直接使用靈巧的 swift 方式:(@"hello, this is %@, i'm %d"
,name
,age
")
nslog因而我用不著 args 部分,只通過 getvalist() 傳乙個空的引數列表進去即可。在實際的使用過程中,這個新包裝的 nslog 也永遠也不需要去用到引數列表部分,直接用 swift 的方式即可。("hello, this is
\(name
), i'm
\(age)"
)
根據上圖,由於我當前是 debug 環境,xcode 直接高亮了 #if debug 那一塊,方便我識別。這樣,開發環境中我就可以在終端裡看到 log 輸出,而在正式發布的時候它們就不會輸出來。我可以像以前一樣在專案的其他地方繼續用 nslog,所更改的地方也就是這麼乙個設定+短短的幾行就完成了。
除了因為混合 objective-c 和 swift 環境的情況下,我們需要分別設定和確認 macro/flag 有沒有被設定這點瑣碎外,其他我用的還是蠻愉快的。
最後希望正式版早日審核通過 :)
DEBUG和RELEASE 的區別
debug和release 版本差異及除錯相關問題 記憶體分配問題 1.變數未初始化。下面的程式在debug中執行的很好。thing search thing something bool found for int i 0 i whatever.getsize i found it if foun...
debug和release版本對比
debug和release,在我看來主要是針對其面向的目標不同的而進行區分的 debug通常稱為除錯版本,通過一系列編譯選項的配合,編譯的結果通常包含除錯資訊,而且不做任何優化,以為開發人員提供強大的應用程式除錯能力。release通常稱為發布版本,是為使用者使用的,一般客戶不允許在發布版本上進行除...
Debug和Release之區別
debug 通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程 序。release 稱為發布版本,它往往是進行了各種優化,使得程式在 大小和執行速度 上都是最優的,以便使用者很好地使用。debug 模式下會將很多除錯資訊新增到程式中,而release模式下不會有,速度有一定變化...