CloudKit App可以处理不同的iCloud帐户

时间:2017-01-26 03:35:48

标签: ios swift authentication cloudkit

我有一个应用程序,使用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:--- 这是我的崩溃日志的截图

CrashLogScreenshot

---编辑/更新2:--- 我能够使用不同的崩溃日志生成另一个崩溃。此崩溃日志仍然没有指向我的代码,但至少描述了一个函数......

CrashLog with sharedIMPL_removeObjectFromSet_core

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。我不知道为什么我之前在崩溃日志中只有十六进制,如果有人知道如何处理十六进制崩溃日志我很乐意听到它。

以下是我原来问题的答案:

  1. 当设备上的iCloud帐户发生变化时,CloudKit应用程序是否能够处理? 回答:是
  2. 如果是这样,是否可以通过TestFlight进行内部测试? 回答:是