回答
使用NSAssert()及其同伴。
在項目中爲您的發佈配置定義NS_BLOCK_ASSERTIONS
。
Xcode 4 tremplates在發佈配置中禁用了NSAsserts
。它增加了
-DNS_BLOCK_ASSERTIONS=1
爲 「其他C標誌」 爲 「釋放」。
從文檔:如果宏NS_BLOCK_ASSERTIONS
預處理器被定義
斷言被禁用。
NSAssert宏評估條件並作爲斷言處理程序的前端。
每個線程都有自己的斷言處理程序,它是類NSAssertionHandler
的一個對象。調用時,斷言處理程序將輸出包含方法和類名稱(或函數名稱)的錯誤消息。然後它會引發一個NSInternalInconsistencyException
異常。如果條件評估爲NO,宏將在當前線程的斷言處理程序上調用handleFailureInMethod:object:file:lineNumber:description:
,並將desc作爲描述字符串傳遞。
該宏只能在Objective-C方法中使用。
當定義了NDEBUG
時,斷言是有條件地編譯出代碼的。如果在相應的構建設置部分中定義了NDEBUG=1
,則無論發行版或調試模式如何,都將停用代碼中的斷言。
正如Zaph表示-DNS_BLOCK_ASSERTIONS=1
已經發布。但是,如果你想檢查這一點。
首先在文檔中觀察到NSAssert已被宏NS_BLOCK_ASSERTIONS
禁用。然後將其添加到構建和觀察它的規定確定:
#ifdef NS_BLOCK_ASSERTIONS
#error Error - NS_BLOCK_ASSERTIONS is defined
#endif
然後改方案發布(CMD - 轉移 - <)
然後觀察了構建失敗。因此NS_BLOCK_ASSERTIONS
定義爲NSAssert
被禁用。
現在,從Xcode 6開始,設置爲ENABLE_NS_ASSERTIONS
,默認情況下,其設置爲調試配置爲1
,版本爲0
。
你可以選擇到它的發佈版本通過將ENABLE_NS_ASSERTIONS=1
的說法,這是我正在做的運行單元測試檢查斷言條件在命令行上,但在其他方面應與DEBUG
標誌關運行。
更新:驗證了這一點在Xcode 8中也適用。
在Xcode中7,進入項目構建設置,並在搜索欄中搜索「斷言」。這將顯示「Apple LLVM 7.0 - 預處理」部分。有一個名爲「啓用基礎聲明」的設置。
我已經成功地從那裏啓用/禁用NSAssert。
,嚮應用的AppName.xcodeproj/project.pbxproj文件添加了一個ENABLE_NS_ASSERTIONS = NO;標誌 – computingfreak
這就是我在上面做我main()
:
#if defined(NDEBUG)
{
// The assertion code below should be compiled out of existence in a release
// build. Log an error and abort the program if it is not.
bool ok = true;
NSCAssert(ok = false, @"NS assertions should be disabled but are not");
if (!ok)
{
NSLog(@"Detected release build but NS_BLOCK_ASSERTIONS is not defined");
return -1;
}
}
#endif
注意,因爲main()
是一個C函數,而不是一個Objective-C的功能,NSCAssert
上面使用,而不是NSAssert
。 (NSAssert
預計self
有效。)
- 1. 在發佈版本中聲明是否被禁用?
- 2. 如何知道中斷是否被禁用?
- 3. 如何知道Android應用程序是否被禁用ICS
- 4. NS_BLOCK_ASSERTIONS是否禁用NSAssert和assert()調用?
- 5. 如何知道在log4j中,ERROR級別是否被觸發?
- 6. 如何知道它是否是svn中的新版本?
- 7. 如何知道該應用程序是否被替換爲另一個版本(不是升級版本)
- 8. 如何知道TStringList是否被刷新
- 9. 如何知道PHAsset是否被修改?
- 10. 如何知道mapView是否被加載?
- 11. 如何通知Javascript是否在瀏覽器中被禁用
- 12. git是否知道在何時使用哪個版本?
- 13. 如何知道FastCGI是否被用來運行PHP腳本
- 14. 如何知道dealloc是否在iphone sdk中被調用?
- 15. 如何知道發行版使用的Linux內核版本?
- 16. 有沒有辦法知道異常是否被禁用?
- 17. 如何在發佈版本
- 18. linkedin rest api:我如何知道邀請是否被髮送?
- 19. 如何知道窗口「加載」事件是否已被觸發
- 20. 如何知道您是否擁有Docker版本1.13?
- 21. 如何知道所有版本的簽名是否相同?
- 22. 如何知道是否安裝了Flash的調試版本?
- 23. NodeJS MySQL - 如何知道連接是否發佈
- 24. 如何知道是否發佈了ios代理
- 25. 如何禁用新版本通知?
- 26. 我如何知道哪個版本是版本庫中的最新版本號?
- 27. 是否發佈新版本從AppStore中刪除現有版本?
- 28. 如何知道文本是否有效
- 29. 在GWTP中,如何知道演示者是否被透露?
- 30. 如何知道客戶端是否在Awesome WM中被殺掉
坦率地說,這是一個瘋狂的設計,默認情況下,在發佈版本中不會關閉斷言。在我知道的每個其他C編譯器面前飛行。 –
@SevaAlekseyev同意,當發佈聲明仍然通過時,我們感到震驚。完全非常規。我們的理念是'快速發展,生產難'。 –