2016-07-08 8 views
45

Я обновил свой Xcode 8 до бета-версии 2 сегодня, и я пытаюсь обмениваться данными между App и Today Extension. Я столкнулся с этим предупреждением журнала:Не удалось прочитать значения в CFPrefsPlistSource iOS 10

2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Defaults пользователя] Не удалось прочитать значения в CFPrefsPlistSource < 0x1700f1280> (домен: группу .xpto, Пользователь: kCFPreferencesAnyUser, ByHost: Да, контейнер: (нуль)): Использование kCFPreferencesAnyUser с контейнером разрешено только для системы контейнеров, отделяя от cfprefsd

Любой человек может мне помочь?

+5

я имею с этим же вопросом в моем приложении –

+0

@PravinKamble я получил эту ошибку, но я могу получить доступ ко всему (appgroup пользователь DEFAULTS'S). – Klevison

+1

меняя цель развертывания на 9.3, он отлично работает на устройстве, но он не будет работать с iOS 10, я буду искать решение, я буду размещен здесь, как только найду решение –

ответ

25

Это на самом деле ложное предупреждение, появившееся в iOS 10 и macOS 10.12. (Источник: https://twitter.com/Catfish_Man/status/784460565972332544)

Совет по добавлению идентификатора вашей команды отключит предупреждение, но также создаст новые пустые пользовательские значения по умолчанию. Это приведет к тому, что любые ранее сохраненные данные будут нечитабельными.

В настоящее время решение состоит в том, чтобы игнорировать его.

Кроме того, Apple сотрудник CFM on the forums:

Вошедшее сообщение ложно, если вы делаете очень конкретные вещи, которые я не думаю, что это возможно без использования личных функций (он был добавлен, чтобы поймать неправильные этих функций, но, к сожалению, также попал в обычный случай использования).

+0

Я попытался создать группу приложений, которая начинается с идентификатора команды, но заставляет ее начинать с «группы». Итак - это два не должен совпадать ??? – SAHM

+0

Я вижу эти сообщения журнала на High Sierra. Превосходный идентификатор команды ** не ** отключает предупреждение для меня. Является ли Apple намерена исправить это? – mschmidt

-5

Изменение от

[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"]; 

в

[[NSUserDefaults alloc] initWithSuiteName:@"nnnnnnnnnn.group.com.xxx.xxx"]; 

Где nnnnnnnnn это ваш номер команды, тот, который вы используете для входа код.

Протестировано под Xcode 8 GM и iOS 10 GM, и сработало!

+2

Можно ли использовать «nnnnnnnnnnn.g.gru.xxx.xxx» для записи в основном приложении, или просто использовать идентификатор команды в расширении? Для меня, добавление идентификатора команды, похоже, вытаскивает пустые UserDeaults без каких-либо данных, которые я сохранил на «group.com.xxx.xxx» в моем приложении. Действительно надеясь, что есть исправление к этому, так как он блокирует обновление iOS 10. – timgcarlson

+2

Данные по-прежнему не синхронизируются. Ошибка исчезла. – Jeet

+3

В настоящее время эта ошибка не влияет на приложение.Но если добавить идентификатор Team, ошибка отсутствует, но данные не могут быть получены. – scorpiozj

0

Сборка с Xcode 8.1 Beta, и вы увидите то же предупреждение, но вы также получите значение.

1

У меня такая же проблема, когда я пытаюсь использовать initWithSuiteName. Кажется, что это ошибка от Apple. Единственным решением/обходным решением, которое я нашел, является сброс всех настроек устройства. Перейти к Настройки -> Общие -> Сброс -> Сбросить все настройки.

Это не удаляет контент на iPhone, просто удаляет все настройки. После сброса настроек все работало нормально. Дайте мне знать, если это вам тоже поможет.

+0

Это не работает для меня: ( –

+0

Это не работает для меня, либо –

-1

, если вы страдаете этой проблемой при попытке сохранить данные расширения АРР с помощью userDefault, может быть, вы написали этот код:

[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"]; 

Этот код сброса по умолчанию userDefault.

На самом деле, правильный код:

[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"]; 

http://www.jianshu.com/p/e782104c3bc3

+0

, используя тот же код, но все еще имеет предупреждение от консоли –

3

Вот как использовать NSUserDefaults с App группы для передачи данных между основным приложением и вашего расширения:

  1. В ваше основное приложение, выберите свой проект в Навигаторе проектов.

  2. Выберите цель вашего основного приложения и перейдите на вкладку «Возможности».

  3. Переключить группы приложений в положение ON. Это свяжется с разработчиком портала , чтобы создать набор прав.

  4. Создать новый контейнер. Согласно Apple, ваш идентификатор контейнера должен начать с «группы», поэтому имя, такое как «group.io.intrepid.myapp», равно .

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

  6. При чтении или записи NSUserDefaults в вашем приложении или в вашем расширении не обращайтесь к NSUserDefaults.standardUserDefaults(). Вместо этого используйте NSUserDefaults (имя пакета: "group.io.intrepid.myapp"). Примечание: Имя люкс название вашего контейнера App группы, созданной в шаге 4.

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

Заслуга http://blog.intrepid.io/ios-app-extensions

+0

«просто выберите группу, которая была создана только в главной целевой программе» => Что делать, когда она не появилась? – user3722523

+0

Включить и выбрать ту же группу в расширении тоже! –

+0

Повторяю, как выбрать тот же если выбор пуст в расширении? – user3722523