Доступ к связке ключей на watchOS 2 не работает на реальных часах

Я читал на форуме разработчиков Apple, что, в отличие от watchOS 1, watchOS 2 не использует свою связку ключей с телефонным приложением, так что бац!! совместное использование связки ключей не включено по умолчанию, мы должны найти обходной путь для этого.

Хорошо, что касается моей проблемы, я пытался запустить очень простую программу доступа к цепочке ключей на реальном часовом устройстве с последней бета-версией (beta4), используя библиотеку git https://github.com/jrendel/SwiftKeychainWrapper

  let saveSuccessful: Bool = KeychainWrapper.setString("keychainData", forKey: "ImportantKeychainData")

  if saveSuccessful{
       let retrievedString: String? = KeychainWrapper.stringForKey("ImportantKeychainData")
       print(retrievedString)
     }
     else
     {
       print("unable to write keychain data")
     }

В симуляторе это работает как шарм, но когда я пытаюсь запустить то же самое на настоящих часах, мне выдается код состояния -34018.

Не было общедоступной документации об этом коде ошибки, но я немного покопался, чтобы выяснить, что это оказалось

errSecMissingEntitlement     = -34018,  /* Internal error when a required entitlement isn't present. */

источник: http://opensource.apple.com/source/Security/Security-55471/sec/Security/SecBasePriv.h

На самом деле я провел много исследований по этому поводу целый день, и люди указывали мне на различные направления, такие как проблемы с памятью, права, проблема с профилем, ошибка в связке ключей и т. д.

Загвоздка здесь в том, что у большинства разработчиков, сообщивших об этой проблеме, она не была постоянной, как у меня, при каждом запуске приложения, они появлялись только в определенных местах, например, когда приложение было в фоновом режиме и т. д. Подводя итог,

1. I tried the same piece of code on iOS 9 beta 4 and it worked well on the phone.

2. The same code works well on the watch simulator.

3. The same code does not work on watchOS beta 4 returns -34018 continuously on the device but works well on the simulator.

4. All this testing is done using free provisioning introduced from Xcode 7, entitlements were added to the phone app and the watch extension, keychain sharing was enabled, app groups was enabled.

Мои вопросы

1. Am I missing something here that I have to do with the device keychain that I am supposedly doing it wrong?

2. Is there an issue with free provisioning?

3. Is there an issue with the keychain perhaps??

Любая помощь приветствуется.

К вашему сведению, я также попробовал KeychainItemWrapper от Apple, таможенный код, непосредственно взаимодействующий с методами SecItem, ничего не дал.

Обновите, я тоже пробовал это, как обычно, не получается

let storableString:NSString = "keychain in watchos is working with simple code"  
  let query : [NSString : AnyObject] = [  
            kSecClass : kSecClassGenericPassword,  
            kSecAttrService : "WatchService",  
            kSecAttrLabel : "KeychainData",  
            kSecAttrAccount : "SecureData",  
            kSecValueData : storableString.dataUsingEncoding(NSUTF8StringEncoding)!  
        ]  
  let result = SecItemAdd(query, nil)  
  print(result)  

Обновление 2: проблема устранена в бета-версии 5 watchOS2.


person Satheesh    schedule 29.07.2015    source источник


Ответы (1)


Проблема была исправлена ​​Apple в последней бета-версии 5 watchOS 2.

person Satheesh    schedule 07.08.2015
comment
так связка ключей автоматически передается или нам нужно внести какие-либо изменения в настройки? - person Ace Green; 19.10.2015