2016-01-06 43 views
4

當我在Swift中使用XCTest運行單元測試時,它們在代碼覆蓋範圍關閉時運行正常。但是,一旦我嘗試啓用代碼覆蓋,我有一個失敗的構建/測試,4個類給出以下錯誤消息:命令因信號失敗:分段錯誤:11在Swift中打開代碼覆蓋率時出現分段錯誤11

+0

這可能是證書或構建目標的問題嗎?我發現這個消息來源說這是從歸檔中獲取seg故障時的問題。也許嘗試重建證書? http://stackoverflow.com/questions/26731198/swift-segmentation-fault-when-compiling-for-archive-from-ios-7 – Cole

+0

請提供更多詳細信息 –

回答

2

沒有代碼,編譯設置等,很難說肯定,但你應該檢查的一件事是確保你在單元測試類中使用了一個@testable導入標誌。

例如,在您的單元測試課程的頂部名爲MyApp的項目中,您將包含以下導入@testable import MyApp

您還需要檢查以確保您遵循了啓用覆蓋的流程。這些信息被記錄在蘋果的開發者門戶:

Code Coverage | Apple Developer

+0

我已經遵循了所有這些步驟。如果在引入代碼覆蓋率時出現了分段錯誤,那麼將其引入項目以進行調試或研究比我目前所處的位置更深的一般建議是什麼? – fadfad

2

這裏是我工作(因爲所有的其他建議並沒有我的情況下工作)。當試圖運行代碼覆蓋範圍爲ON的單元測試時,我在特定的Swift類上得到了分段錯誤11。事實證明,我們有像這樣一類的財產三元表達式:

let cellBorder : CGFloat = MyHelperClass.isIPad() ? 10.0 : 6.0 

使其成爲一個懶惰的VAR解決了這一問題:

lazy var cellBorder : CGFloat = MyHelperClass.isIPad() ? 10.0 : 6.0 

需要明確的是,代碼編譯和運行良好直到我們嘗試開啓代碼覆蓋範圍。我也發現這個Open Radarthis guy's post概述瞭解決方案。似乎是一個蘋果的錯誤。

+1

這解決了我的問題!太棒了,@ n8tr –

+1

我有同樣的問題。 'lazy'解決了,但是這也解決了它: 'let cellBorder:CGFloat = MyHelperClass.isIPad()? CGFloat(10.0):CGFloat(6.0)' – Dmitry