18

ホスト アプリとアプリ拡張機能の間で NSUserDefaults データを共有することに関する SO の他のすべての投稿を見てきましたが、私のものはまだ機能しません。ここに私がやったことすべてがあります:

  1. 拡張機能とホスト アプリの Xcode の [機能] タブでアプリ グループを有効にします。
  2. グループ名を「group.com.mycompany.foo」に設定し、拡張機能とホストアプリがグループに追加されていることを確認します。
  3. 「com.apple.security.application-groups」キーがアプリ グループ名に設定された両方の権限ファイルが存在することを確認しました。(価値があるのは、拡張機能とホストアプリの間で共有キーチェーン機能も使用していて、それが機能しているため、これが資格の問題であるとは思わないことです)
  4. すべてのプロビジョニング プロファイルを再生成しました。実際、アプリ グループを設定した後、すべての証明書を取り消して、すべてのプロファイルを再生成しました。

結局のところ、このコードはまだ機能しません。

// in the host app
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
[testDefaults setObject:@"TEST" forKey:@"foo"];
[testDefaults synchronize];

その後:

// in the extension
NSUserDefaults *testDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.mycompany.foo"];
NSLog(@"%@", [testDefaults objectForKey:@"foo"]);

その結果:

(null)

Xcode の環境設定を見ると、次のアイコンに気付きますが、「アプリ グループ」アイコンはありません。 Xcode 設定 - 資格

しかし、前に述べたように、アプリ グループをセットアップした後、キーチェーン、証明書、およびプロビジョニング プロファイルをクリアするところまで行きました。これが実際に問題である場合、資格をプロファイルに追加するにはどうすればよいですか?

私は何が欠けていますか?私はアイデアから新鮮です。

ヘルプ?

編集: アクセス グループは、WatchKit 拡張機能ではなく、Today & Safari 拡張機能で機能しています。理由はわかりませんが、すべてのビルド設定が同じように構成されているようです。

編集 2 : 私の機能が適切に設定されていないと主張する人のために、ここにスクリーンショットがあります:機能

4

3 に答える 3

6

同様の問題がありました。私が気付いたのは、WatchKit 拡張機能と WatchKit アプリのバンドル ID が同じであるということです。WatchKit アプリのバンドル ID を変更しました。また、拡張機能の info.plist の NSExtensionAttributes/WKAppBundleIdentifier をその ID と一致するように変更することも忘れていませんでした。これですべてが機能します。これがお役に立てば幸いです!

まもなく: WatchKit アプリと拡張機能のバンドル識別子は異なるはずです!

于 2015-03-13T13:40:51.843 に答える
2

これが私のためにトリックをしたものです。どうやら、Xcode は新しい拡張機能用に新しい資格ファイルを自動的に作成したようです (おそらく「機能」から設定した後ですが、残念ながら配列の値がありませんでした...

アプリの資格:

ここに画像の説明を入力

Extension Entitlements では、値が配列にありませんでした:

ここに画像の説明を入力

また、グループが両方のターゲット (アプリと拡張機能) の [機能] タブに表示され、3 つのチェックマークがすべて緑色であることを確認することも重要です。例を参照してください。

アプリ ターゲット

ここに画像の説明を入力

拡張ターゲット

ここに画像の説明を入力

于 2015-09-09T12:18:32.150 に答える
1

iPhone アプリから同じキーを読み取ろうとしましたか?

問題は、WatchKit 拡張機能でアプリ グループの資格をアクティブ化していないことだと思います。

  1. プロジェクト設定で WatchKit 拡張機能を選択します。

  2. [WatchKit 拡張機能] の下の [機能] タブを選択し、[アプリ グループ] を探してオンにます。

  3. 前に作成したのと同じアプリ グループ識別子を選択します (自動的に表示され、チェックするだけです)。

于 2015-03-11T17:19:15.873 に答える