我有一个应用程序,使用Settings -> iCloud
和iCloud将用户数据保存在私人数据库中。我已编写代码来处理用户何时退出iCloud并通过其设备上的Xcode
作为其他用户返回。我目前处于Beta测试模式,当我尝试将其作为内部测试人员时,应用程序会在我更改帐户时崩溃。当我使用CloudKit
模拟器或真实设备在开发模式下测试时,我的代码效果很好。我的问题是:当{iCloud帐户在设备上更改时,func isCloudAccountAvailableASync() {
container.accountStatusWithCompletionHandler { (accountStatus, error) in
switch accountStatus {
case .Available:
print("INFO: iCloud Available!")
// begin sync process by finding the current iCloud user
self.fetchUserID()
return
case .NoAccount:
print("INFO: No iCloud account")
case .Restricted:
print("WARNING: iCloud restricted")
case .CouldNotDetermine:
print("WARNING: Unable to determine iCloud status")
}
// if you get here, no sync happened so make sure to exec the callback
self.syncEnded(false)
}
}
func fetchUserID(numTries: Int = 0) {
container.fetchUserRecordIDWithCompletionHandler( { recordID, error in
if let error = error {
// error handling code
// reach here then fetchUser was a failure
self.syncEnded(false)
}
else {
// fetchUserID success
if self.lastiCloudUser == nil {
print("INFO: our first iCloud user! \(recordID)")
self.saveUserID()
}
else if !recordID!.isEqual(self.lastiCloudUser) {
// User has changed!!!!!!!!!!!!!
self.saveUserID()
// delete all local data
// reset the saved server token
self.saveServerToken(nil)
// try again with reset fields
}
// else user never changed, then just create a zone
// continue the sync process
self.initZone()
}
})
}
个应用是否能够处理?如果是这样,这种情况是否可以通过TestFlight进行内部测试。我处理帐户更改的代码低于......
Dyld Error Message:
Library not loaded: @executable_path/../Frameworks/libcrypto.1.0.0.dylib
Referenced from: /Applications/MyApplication v123/MyApplication.app/Contents/MacOS/MyApplication
Reason: no suitable image found. Did find:
/Applications/MyApplication v123/MyApplication.app/Contents/MacOS/../Frameworks/libcrypto.1.0.0.dylib: code signature invalid for '/Applications/MyApplication v123/MyApplication.app/Contents/MacOS/../Frameworks/libcrypto.1.0.0.dylib'
--- EDIT / UPDATE:--- 这是我的崩溃日志的截图
---编辑/更新2:--- 我能够使用不同的崩溃日志生成另一个崩溃。此崩溃日志仍然没有指向我的代码,但至少描述了一个函数......
答案 0 :(得分:0)
很难说你的应用程序完全崩溃了。 您必须注意,在更改帐户后,您应该重置应用程序的状态(清除本地用户数据并导航离开具有用户特定数据的屏幕) 在启动应用程序时,您应该调用这样的函数:
func reactToiCloudloginChanges() {
NotificationCenter.default.addObserver(forName: NSNotification.Name.NSUbiquityIdentityDidChange, object: nil, queue: nil) { _ in
// The user’s iCloud login changed: should refresh all local user data here.
Async.main {
self.viewController?.removeFromParentViewController()
// Or some other code to go back to your start screen.
}
return
}
}
答案 1 :(得分:0)
我一直让它崩溃,并以某种方式得到了一个崩溃日志,其中包含一行代码,我可以链接到我的Xcode项目中的一行。我的问题是NSOrderedSet和iOS 9 That issue can be found here。我不知道为什么我之前在崩溃日志中只有十六进制,如果有人知道如何处理十六进制崩溃日志我很乐意听到它。
以下是我原来问题的答案: