Я пытаюсь реализовать совместное использование цепочки для ключей с помощью KeyChainAccess. Я создал два очень базовых c приложения: приложение 1, которое записывает строку в общую цепочку ключей, и приложение 2, которое считывает данные из общей цепочки ключей и отображает их.
Мой код для приложения 1:
override func viewDidLoad() {
super.viewDidLoad()
//save item to keychain
let keychain = Keychain(service: "app.test", accessGroup: "xxxxx.xxxxx.xxxxx.Keychain-Sharing")
do {
try keychain.set("Some Data Set in app one", key: "sharedData")
print("Success")
label.text = "Success"
}
catch let error {
print("Keychain write failed: \(error)")
label.text = "Keychain write failed: \(error)"
}
}
Мой код для Приложения Два, который читает и отображает из общей цепочки для ключей:
override func viewDidLoad() {
super.viewDidLoad()
//load item from keychain
let keychain = Keychain(service: "app.test", accessGroup: "xxxxx.xxxxx.xxxxx.Keychain-Sharing")
let data = try? keychain.get("sharedData")
print("Data from Keychain: \(data ?? "nil")")
label.text = "Data from Keychain: \(data ?? "nil")"
}
Это очень простой c пример, только чтобы попробовать концепцию, однако я такой обнаружение состоит в том, что когда я запускаю его с помощью симулятора XCode на моем Ma c, он ведет себя, как и ожидалось, я запускаю первое приложение - оно успешно выполняется, затем я запускаю второе приложение и отображается правильная строка.
Когда Затем я пытаюсь запустить его на устройстве (подключив мое устройство к Ma c и изменив местоположение запуска, я получаю следующую ошибку при попытке записи и чтения из общей цепочки ключей:
OSStatus error:[-34018] Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.
Я проверил мой файл разрешений и вижу, что они включены в оба приложения:
И на файлы разрешений правильно ссылаются в Настройки сборки:
Кроме того, когда я наведите курсор мыши на свой профиль обеспечения, он скажет мне, что они включены:
Это то, что позволяет ему успешно работать в симуляторе XCode? и что мне не хватает, чтобы заставить его работать на телефоне? Я думаю, что это как-то связано с моими сертификатами / профилями, но я довольно новичок в этом, поэтому я не уверен, что именно мне нужно / отсутствует или что проверять?
Может кто-нибудь помочь или указать мне правильное направление?