Расширение iOS8 и приложение-контейнер, как обмениваться данными

У меня возникают проблемы с обменом данными между расширением iOS 8 и приложением-контейнером. Я настроил группу с портала разработки и Xcode, и оба моих списка прав выглядят так:

<dict>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>my group id</string>
    </array>
</dict>

Предлагаемое решение в документе Apple для использования [[NSUserDefaults standardUserDefaults]

не работает для меня.

Я пробовал решение @Santa Claus из этого сообщения данные между приложениями с группами приложений для использования

[[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"];

Решение Санта-Клауса работало на симуляторе, но не на моем iPhone 4s, есть идеи, как заставить его работать на реальном устройстве? Или я что-то упускаю?

Некоторые обновления:

[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group id"];

функция возвращает URL-адрес, и оба URL-адреса из приложения-контейнера и расширения выглядят одинаково, как "path /private/var/mobile/Containers/Shared/AppGroup/3DFB9750-A9F3-4C37-BC3C-0D5BF746B‌​233". Я создал файл json внутри этой папки из приложения-контейнера, но расширение не может найти файл в папке при запуске на устройстве. Но в симуляторе находит хорошо и все работает.


person woof    schedule 05.06.2014    source источник
comment
Я могу подтвердить, что моё решение работает и на устройствах. Попробуйте удалить приложения и установить их заново.   -  person Andrew    schedule 05.06.2014
comment
Спасибо, я попытался удалить, это все еще не работает на устройстве ..   -  person woof    schedule 06.06.2014
comment
Подтвердите, что идентификатор вашей группы введен точно так же, как в правах приложения, так и в инициализации NSUserDefaults.   -  person Andrew    schedule 06.06.2014
comment
Они все одинаковые, не повезло :(   -  person woof    schedule 06.06.2014
comment
Посмотрите, работает ли другое решение этого вопроса. Вам не обязательно использовать его, но он покажет, правильно ли настроены группы приложений.   -  person Andrew    schedule 06.06.2014
comment
Я пытался использовать NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@group id], я мог получить действительный NSURL из контейнерного приложения, но из расширения он всегда возвращает ноль. Не могли бы вы получить один и тот же NSURL из приложения и расширения? Возможно, моя группа не настроена правильно.   -  person woof    schedule 06.06.2014
comment
Давайте продолжим обсуждение в чате.   -  person Andrew    schedule 06.06.2014
comment
возможный дубликат Общение между приложениями с группами приложений   -  person Andrew    schedule 09.06.2014
comment
Кто-нибудь когда-нибудь находил гарантированное решение для того, чтобы заставить это работать на устройстве?   -  person Jack Robson    schedule 12.08.2016
comment
Я также сталкиваюсь с этой проблемой, у меня есть некоторые изображения в хост-приложении, и я пытаюсь получить доступ к дочернему (расширенному) приложению, получая действительный URL-адрес, но иногда он извлекает изображение, иногда это не так. пожалуйста, обновите, если у кого-то есть исправление парамагнетика.   -  person Pandey_Laxman    schedule 20.10.2016


Ответы (3)


Мое решение - отредактировать Info.plist моей пользовательской клавиатуры:

NSExtension -> NSExtensionAttributes -> RequestsOpenAccess

Сделайте это ДА.

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

person heheBear    schedule 03.07.2014
comment
работает в симуляторе, но то же самое не работает в устройстве, есть идеи, почему? - person Nitin Gohel; 06.10.2014
comment
Приятно!! мне потребовалось так много времени, чтобы найти то, что не работает ... вы знаете способ определить значение параметра из расширения? - person dvkch; 10.11.2014
comment
@heheBear у меня это работает на симуляторе, но не на реальном устройстве, есть предложения? - person MAC; 20.11.2014
comment
в моем случае (расширение общего доступа) не работает, я добавил его в plist, но не показывает на реальном устройстве, работает только на симуляторах - person Ravi Ojha; 29.05.2015

Для расширения клавиатуры обязательно включите RequestsOpenAccess в качестве ответа heheBear
и попробуйте время от времени удалять и снова добавлять клавиатуру из настроек/клавиатуры
расширение клавиатуры нестабильно, и производительность очень плохая, начиная с бета-версии 4, включая бета-версию 5.

person Ethan Liu    schedule 07.09.2014

Проблема возникает только для пользовательской клавиатуры, и iOS8 beta 2 устранила проблему.

person woof    schedule 18.06.2014
comment
iOS 8 beta 5 по-прежнему не работает на реальном устройстве, только на симуляторе - person iOS Dev; 13.08.2014
comment
Похоже, у iOS GM есть эта проблема, она работает на симуляторах, но не на устройстве! - person Ethan Long; 15.09.2014