iPad Air、os 12.2.0 でアプリがクラッシュします。Fabric の crashlytics は 315 行目でクラッシュを示します
NSAssert( result == noErr, @"Couldn't add the Keychain Item." );
KeychainItemWrapper.m ファイル内。このメソッドは、UUID を app に格納するために呼び出されます。
func getUUIDString() -> String {
if !uuid.trimmed().isEmpty {
print("uuid ==> \(uuid)")
return uuid // return cached value
}
/// Generate A Dynamic UDID
var toRet = ""
/// Wrapper Object
let keychainWrapperObj = KeychainItemWrapper(identifier: "ManDown", accessGroup: nil)
/// Check is Any UDID Stored
if let udidSavedVal = keychainWrapperObj?.object(forKey: kSecAttrService) {
print("Old UDID is being Used now as ==> \(udidSavedVal as? String ?? "")")
toRet = udidSavedVal as? String ?? ""
}
if toRet.trimmed().isEmpty {
/// We have no UDID Saved Need to get New
if UserDefaultManager.getUUIDSaved() != nil {
toRet = UserDefaultManager.getUUIDSaved()!
//クラッシュの原因となる行 keychainwraper.setobject()
keychainWrapperObj?.setObject(toRet, forKey: kSecAttrService)
} else {
/// Need to Get new UUID
var newUUIDStr: String?
newUUIDStr = UIDevice.current.identifierForVendor!.uuidString
print(newUUIDStr!)
UserDefaultManager.saveUUIDInDefaultAs(UUIDString: newUUIDStr!)
toRet = newUUIDStr!
keychainWrapperObj?.setObject(toRet, forKey: kSecAttrService)
}
}
print("uuid ==> \(toRet)")
uuid = toRet
Crashlytics.sharedInstance().setUserName(uuid)
return uuid
}
私の質問は、どうすればこのクラッシュを解決でき、少なくともこのエラーをさらにデバッグするためにどのように再現できるかということです。Xcode 10.2 swift 4 キーチェーン共有の機能はオンになっていませんが、アプリは引き続き正常に動作しています。
Error logs:
Fatal Exception: NSInternalInconsistencyException
0 CoreFoundation 0x191b53518 __exceptionPreprocess
1 libobjc.A.dylib 0x190d2e9f8 objc_exception_throw
2 CoreFoundation 0x191a6d148 +[_CFXNotificationTokenRegistration keyCallbacks]
3 Foundation 0x1925301c8 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]