CloudKit - "Неверный идентификатор пакета для контейнера"
Я только что создал проект в Xcode 9 beta 6 и добавил этот код:
let privateDB = CKContainer.default().privateCloudDatabase
let greatID = CKRecordID(recordName: "GreatPlace")
let place = CKRecord(recordType: "Place", recordID: greatID)
privateDB.save(place) { (record, error) in
if error != nil {
let er = (error as! CKError).errorUserInfo
print("Error: \n")
print("CKErrorDescription: \(er["CKErrorDescription"]!)\n")
print("ContainerID: \(er["ContainerID"]!)\n")
print("NSDebugDescription: \(er["NSDebugDescription"]!)\n")
print("NSUnderlyingError: \(er["NSUnderlyingError"]!)\n")
print("NSLocalizedDescription: \(er["NSLocalizedDescription"]!)\n")
print("ServerErrorDescription: \(er["ServerErrorDescription"]!)\n")
}
if record != nil {
print("record: \(record!)")
}
}
и добавьте эти возможности:
и когда я запускаю код, я получаю это сообщение об ошибке:
Что я делаю не так?
8 ответов
Была ошибка, из-за которой некоторые ассоциации были пропущены. Эта ошибка была исправлена, и мы автоматически исправили ассоциации контейнеров / приложений, которые были нарушены в течение этого времени.
Если по какой-то причине вам все еще нужно восстановить ассоциацию, вы можете использовать панель "Возможности" в XCode или использовать developer.apple.com -> Сертификаты, идентификаторы и профили -> Идентификаторы приложений -> выбрать идентификатор -> Редактировать -> Редактировать в iCloud -> установите флажок для диссоциации контейнера, сохранения, а затем повторного связывания.
Если вы все еще застряли, пожалуйста, напишите cloudkit[at]apple.com
Благодаря Дэйву Браунингу, это основано на его ответе.
Следующее сработало для меня:
Проверьте идентификатор контейнера
- Проверьте идентификатор контейнера, используемый для инициализации
CKContainer
- Примечание. Если вы используете
NSPersistentCloudKitContainer
мы бы не использовали идентификатор контейнера напрямую, он был бы автоматически выбран из файла прав.
Попробуйте отключить и включить iCloud в идентификаторе приложения.
Отключить и включить iCloud в идентификаторе приложения
- Перейдите на https://developer.apple.com и войдите в систему.
- Выбирать
Certificates, Identifiers & Profiles
- Выбирать
Identifiers
(идентификаторы приложений) - Изменить идентификатор приложения для приложения
- Снимите флажок iCloud
- Сохранять
- Проверить iCloud
- Выйдите из Xcode и очистите DerivedData
- Запустить приложение
Используя Xamarin.IOS, мне пришлось выбрать ручную подготовку, а не автоматическую в файле info.plist.
В моем случае мне пришлось удалить приложение с устройства и инициализировать его заново. Потом это снова сработало.
Для меня проблема в том, что для создания контейнера я использую . У меня есть два разных идентификатора пакета (отладка и выпуск) иCKContainer.default()
примет идентификатор контейнера CK таким же, как идентификатор пакета приложения. Когда я перехожу на создание контейнера для использованияCKContainer(identifier: “my_cloudkit_identifier”)
Я мог бы использовать один и тот же контейнер CK для отладки и выпуска.
Была такая же проблема. что сработало для меня, так это изменение имени группы iCloud.
Раньше было примерно так:
iCloud.com.companyName.appName.randomString
После изменения на:
iCloud.com.companyName.randomString
он начал работать и синхронизироваться.
Если после добавления нового контейнера он красный, нажмите кнопку обновления (из-под групп) и попробуйте выполнить чистую установку на свой телефон, и она должна работать.
У меня и моего друга такая же проблема. Мы сделали 2 разных проекта, и у них обоих было одно и то же сообщение об ошибке "Неверный идентификатор пакета для контейнера", что является случаем CKError 10.
Мы вызываем нашу функцию извлечения, чтобы получить запись "Users" по умолчанию в viewDidLoad.
func fetchWorkoutCompleted(completion: @escaping (Error?) -> Void = { _ in }) {
cloudKitManager.fetchRecord(ofType: "Users", sortDescriptors: nil) { (records, error) in
if let error = error {
print(error.localizedDescription)
completion(error)
return
}
guard let records = records else { completion(nil); return }
completion(nil)
}
}
Возникла та же проблема с CloudKit:"Неверный идентификатор пакета для контейнера", и Дэйв помог исправить и вернуться к делу!