В последнее время я занимаюсь простым расширением для iOS 8, чтобы понять, как работает система. Поскольку Apple заявляет о своем руководстве по программированию расширений приложений:
По умолчанию ваше приложение и его расширения не имеют прямого доступа к контейнерам друг друга.
Это означает, что расширение и содержащее приложение не обмениваются данными. Но на той же странице Apple приносит решение:
Если вы хотите, чтобы ваше содержащее приложение и его расширения могли обмениваться данными, используйте Xcode или портал разработчика, чтобы включить группы приложений для приложения и его расширений. Затем зарегистрируйте группу приложений в портале и укажите группу приложений, которая будет использоваться в содержащем приложении.
Затем становится возможным использовать NSUserDefaults для обмена данными между содержащимся приложением и расширением. Это именно то, что я хотел бы сделать. Но по какой-то причине это не работает.
На той же странице Apple предлагает стандартные значения по умолчанию:
var defaults = NSUserDefaults.standardUserDefaults()
В презентации WWDC (217) предлагается общий пакет:
var defaults = NSUserDefaults(suiteName: kDefaultsPackage)
Кроме того, я включил группы приложений как для целевой цели приложения, так и для цели расширения с тем же именем группы приложений:
Но вся эта настройка - ни для чего. Я не могу получить данные, хранящиеся в содержащем приложении, из расширения. Это похоже на то, что две цели используют совершенно разные хранилища NSUserDefaults.
Итак,
- Есть ли решение для этого метода?
- Как я могу поделиться простыми данными между содержащим приложением и расширением share? Данные - это просто учетные данные пользователя для API.