2017-09-19 39 views
4

由於我使用的是Xcode 9,因此與鑰匙串通信的所有單元測試均已中斷。它也發生在Xcode GM上。正如我追蹤到的,在讀寫時沒有OSStatus錯誤,但從鑰匙串中讀取並不會返回任何結果,並導致使用鑰匙串的所有單元測試都失敗。當Apple發佈帶有iOS 10模擬器的Xcode 8時,我已經遇到類似這樣的情況,該模擬器的keychain無法正常工作,並且Apple在Xcode 8.2中修復了此問題。其他人是否也面對iOS 11模擬器的這個問題?對此有何想法?從Keychain中讀取Xcode 9模擬器不會返回任何信息

+0

嘿Elyas,​​我正面臨類似的問題。我的單元測試在iOS 9.3和10.3.1模擬器中都在使用XCode 8.3.3。但是,如果我使用XCode 9運行它們,它們會在所有模擬器(iOS 9.3,10.3.1和11.0)上失敗。 希望知道您是否找到解決方案。 – Gix

回答

9

最後我們發現了這個問題。正如@Gix所說,問題出在我們框架內的單元測試。 SDK測試沒有應用上下文,所以沒有可用的鑰匙串。但實際上,我們並不想像@Gix那樣將測試從SDK移動到應用程序中。所以我們可以通過在SDK項目中添加一個應用程序目標來解決問題,然後將其設置爲SDK單元測試的主機。現在單元測試已通過。但我仍然不明白爲什麼它只在新的xCode失敗。我們意識到它不是iOS 11模擬器問題,因爲xCode9中的iOS 10模擬器也發生了同樣的故障。所以這個限制是xCode9模擬器應用程序的一個屬性,可以通過我提供的解決方案來修復。它仍然是混亂的,但它的工作原理,你不需要將測試從SDK移動到應用程序!

+0

同樣在這裏,自Xcode 9以來,除非我將AppTarget添加到我的框架中,否則Keychain的單元測試失敗。 – zero3nna

1

剛剛發現在我身邊,所以我想我會讓你知道,如果你有同樣的問題。

我的問題是我有我的項目設置的方式。在我的項目中,我有一個包含3個項目的工作區,其中1個是主應用程序,1個是框架/庫,1是Pods項目。我正在訪問框架中的鑰匙串,我的單元測試目標是這個項目的一部分。

在經過與代客圖書館(您可以find here)背後的團隊進行廣泛討論並與Dan Federman一起工​​作之後,我們發現我的單元測試目標需要成爲主應用項目的一部分。一旦我將庫項目中的所有測試複製到主應用程序項目中,一切都運行並正常工作。

希望這會有所幫助!