Ошибка OSStatus: [- 34018] Внутренняя ошибка, когда на устройстве отсутствует требуемая привилегия. Ошибка - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь реализовать совместное использование цепочки для ключей с помощью 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.

Я проверил мой файл разрешений и вижу, что они включены в оба приложения:

enter image description here

И на файлы разрешений правильно ссылаются в Настройки сборки: enter image description here

Кроме того, когда я наведите курсор мыши на свой профиль обеспечения, он скажет мне, что они включены:

enter image description here

Это то, что позволяет ему успешно работать в симуляторе XCode? и что мне не хватает, чтобы заставить его работать на телефоне? Я думаю, что это как-то связано с моими сертификатами / профилями, но я довольно новичок в этом, поэтому я не уверен, что именно мне нужно / отсутствует или что проверять?

Может кто-нибудь помочь или указать мне правильное направление?

1 Ответ

0 голосов
/ 30 апреля 2020

У меня была такая же проблема. И решение было очень простым. Еще раз проверьте параметр accessGroup в инициализаторе Keychain. Например, вы добавляете группу цепочек для ключей в Capabilities с именем «com.myCompany.app». Но это не полное имя accessGroup. Чтобы решить эту проблему, просто добавьте «Префикс идентификатора приложения» к имени группы цепочки для ключей. Вы можете найти этот префикс в вашей учетной записи разработчика Apple в вашей конфигурации идентификатора приложения. Полное имя группы доступа будет «XXXXXXXXXX.com.myCompany.app», где XXXXXXXXXX - ваш префикс идентификатора приложения.

...