Xamarin.iOS iCloud доступ к хранилищу ключей-значений iCloud

Я пытаюсь включить поддержку хранения значений ключей iCloud в свое приложение Xamarin.iOS (v4.0.30319) в Visual Studio 2013 (Xcode 7.2.1 на Mac), но постоянно получаю:

ошибка MT1019: у вашего приложения есть права, которые не поддерживаются вашим текущим профилем обеспечения и не могут быть установлены на устройстве "Мой iPhone 4". Пожалуйста, проверьте Журнал Устройства iOS для более подробной информации (ошибка: 0xe8008016).

Между прочим, на устройстве нет логов, по крайней мере, xCode не будет их показывать.

У меня есть другое приложение, написанное на родном объекте C в Xcode, оно также имеет поддержку iCloud и работает нормально. Итак, я сделал то же самое:

  1. создал контейнер iCloud на developer.apple.com с именем "iCloud.[идентификатор моей команды].[идентификатор моего комплекта]" (я использовал точные значения без макроса)
  2. создал идентификатор приложения для [моего идентификатора пакета] на developer.apple.com с включенным iCloud для контейнера "iCloud.[идентификатор моей команды].[мой идентификатор пакета]"
  3. создан профиль обеспечения разработки
  4. установил его в Xcode.
  5. выбрал его в Visual Studio в "iOS Bundle Signing"
  6. отредактированные права, как написано здесь:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.developer.ubiquity-kvstore-identifier</key>
        <string>iCloud.[my team id].[my bundle id]</string>
        <key>com.apple.developer.ubiquity-container-identifiers</key>
        <array>
            <string>iCloud.[my team id].[my bundle id]</string>
        </array>
    </dict>
    </plist>

После этого Xamarin не хочет устанавливать мое приложение на устройстве. Я изменил имя контейнера, удалил com.apple.developer.ubiquity-container-идентификаторы из прав и вернул его (всегда удаляю весь профиль обеспечения, повторную загрузку в xcode, перезапускаю Visual Studio, решение для очистки, удаляем профили на устройстве, удаляем существующие приложение). Только когда я удаляю com.apple.developer.ubiquity-kvstore-identifier и com.apple.developer.ubiquity-container-идентификаторы из прав, Xamarin устанавливает приложение на устройство. Но, очевидно, NSUbiquitousKeyValueStore не работает. Что не так в моей настройке?

1 ответ

Я даже пытался получить права из моего другого проекта xcode, после настройки Capabilities->Cloud "on". Он создает plist только со значением com.apple.developer.ubiquity-kvstore-identifier со значением по умолчанию $(AppIdentifierPrefix)[мой идентификатор пакета].

И когда я был почти готов ко сну, приложение запускалось! Окончательные права (без префикса "iCloud." И других ключей):

<plist version="1.0">
<dict>
    <key>com.apple.developer.ubiquity-kvstore-identifier</key>
    <string>[my team id].*</string>

    <key>com.apple.developer.ubiquity-container-identifiers</key>
    <array>
      <string>iCloud.[my team id].[my bundle id]</string>
    </array>

    <key>com.apple.developer.icloud-container-identifiers</key>
    <array>
      <string>iCloud.[my team id].[my bundle id]</string>
    </array> 

</dict>
</plist>

Хитрость была в том, чтобы просто открыть файл myapp.mobileprovision и посмотреть, что он предлагает.

Это работает, и все же NSFileManager.DefaultManager.GetUrlForUbiquityContainer(null) возвращает значение null, а NSFileManager.DefaultManager.UbiquityIdentityToken также имеет значение null. Таким образом, нет способа узнать, включен или выключен iCloud: он всегда сохраняет данные и даже показывает их (до переустановки приложения). Но если iCloud был на данных сохраняется после переустановки.

ОБНОВИТЬ

ВАЖНОЕ ЗАМЕЧАНИЕ: NSFileManager.DefaultManager.GetUrlForUbiquityContainer(null) возвращает ноль в DEBUG, версия adHoc вернула действительный токен и путь.

APPLE ненавидит разработчиков! Я потратил 3 дня, чтобы заставить работать облако, все из-за отсутствия документов, существующие устарели.

Другие вопросы по тегам