web-dev-qa-db-ja.com

iOS 10でCFPrefsPlistSourceの値を読み取ることができませんでした

今日、Xcode 8をベータ2に更新し、AppとToday Extensionの間でデータを共有しようとしています。私はこのログ警告に直面しています:

2016-07-08 18:00:24.732472 ProjetctX [941:42801] [ユーザーのデフォルト] CFPrefsPlistSource <0x1700f1280>の値の読み取りに失敗しました(ドメイン:group.xpto、ユーザー:kCFPreferencesAnyUser、ByHost:はい、コンテナー:(null)) :コンテナでのkCFPreferencesAnyUserの使用は、システムコンテナでのみ許可され、cffprefsdからデタッチします

誰でも私を助けることができますか?

67
Klevison

これは、実際にはiOS 10およびmacOS 10.12で導入された偽の警告です。 (出典: https://Twitter.com/Catfish_Man/status/784460565972332544

チームIDを追加するというアドバイスは警告を沈黙させますが、新しい空のユーザーデフォルトも作成します。これにより、以前に保存されたデータが読み取れなくなります。

当分の間、解決策はそれを無視することです。

また、AppleスタッフCFM フォーラム上

ログに記録されたメッセージは、プライベート関数を使用せずに可能だとは思わない非常に具体的なことをしていない限り偽です(これらの関数の誤用を検出するために追加されましたが、残念ながら通常の使用例も検出されました)。

50
waltflanagan

NSUserDefaultsをアプリグループで使用して、メインアプリと拡張機能の間でデータを渡す方法は次のとおりです。

  1. メインアプリのProject Navigatorでプロジェクトを選択します。

  2. メインアプリターゲットを選択し、[機能]タブを選択します。

  3. App GroupsスイッチをONに切り替えます。これにより、一連の資格を生成するために開発者ポータルと通信します。

  4. 新しいコンテナを作成します。 Appleによると、コンテナIDは「group」で始まる必要があるため、「group.io.intrepid.myapp」などの名前が最適です。

  5. 拡張ターゲットを選択し、アプリグループを有効にするプロセスを繰り返します。新しいアプリグループを作成せずに、メインアプリターゲットで作成したばかりのグループを選択するだけです。

  6. アプリまたは拡張機能でNSUserDefaultsを読み書きするときは、NSUserDefaults.standardUserDefaults()にアクセスしないでください。代わりにNSUserDefaults(suiteName: "group.io.intrepid.myapp")を使用してください。注:スイート名は、手順4で作成したApp Groupコンテナーの名前です。

グループを有効にし、拡張機能とアプリ機能の両方のセクションで同じグループIDを使用してください!

クレジットは http://blog.intrepid.io/ios-app-extensions

11
Arfan Mirza

MacOSアプリでも同じ問題が発生しました。

解決方法:デバイスを再起動してください!

https://stackoverflow.com/a/39876271

1
Jxtt

InitWithSuiteNameを使用しようとすると、同じ問題に直面します。これはAppleのバグのようです。私が見つけた唯一の解決策/回避策は、デバイスのすべての設定をリセットすることです。 設定->一般->リセット->すべての設定をリセットに進みます。

これにより、iPhone上のコンテンツは消去されず、すべての設定が消去されます。設定をリセットした後、すべてが正常に機能しました。あなたにも役立つかどうか教えてください。

1
Shaggy D

SuiteName(後置)はメインのバンドルIDであってはなりません。

1

Xcode 8.1 Betaでビルドすると、同じ警告が表示されますが、値も取得できます。

0
raz0r