4

NSUserDefaults別のアプリケーションのを読むことに関するいくつかのリソースを見つけました。

Objective-C NSUserDefaultsのキャッシュにより、別のアプリが変更を正確に読み取ることができなくなります

NSUserDefaults:別のアプリからuserDefaultsを取得することは可能ですか?

どうやら、それは不可能です。ただし、質問は最初にiOSに関連し、次に2つのアプリが完全に異なります。

LaunchAtLoginヘルパーアプリがあります。しかし、それは他のいくつかのタスクも実行します。したがって、ヘルパーアプリは常に実行する必要がありますがBOOL、が設定されている場合にのみメインアプリを起動しNSUserDefaultsます。

それを達成する方法はありますか?

4

3 に答える 3

4

10.7.4以降、サンドボックス内でアプリケーショングループを使用できます。グループ内のすべてのアプリケーションは同じサンドボックスを共有します。これらの設定方法については、アプリケーショングループを参照してください。

于 2012-12-23T20:39:20.867 に答える
4

セキュリティアプリケーショングループを使用して、メインアプリとヘルパーアプリの間で設定を共有することができます-[NSUserDefaults initWithSuiteName:]

セキュリティアプリケーショングループ

複数のアプリが共通のコンテナーを共有するには、com.apple.security.application-groups(メインアプリとヘルパーアプリで)エンタイトルメントをなどの共通の識別子に設定する必要があります@"com.company.my-app-suite"。詳細については、グループへのアプリの追加を参照してください。

ユーザーデフォルトスイート

OS X 10.9のFoundationリリースノートによると:

セキュリティアプリケーショングループの一部であるアプリケーションの場合、NSUserDefaultsの「スイート」API(-initWithSuiteName:、-addSuiteNamed:、および-removeSuiteNamed :)は、グループ内のアプリケーションによって共有され、グループコンテナに格納されているスイートで動作します。スイート識別子は、グループの識別子です。

したがって、アプリケーションデリゲート(または同様のもの)で次のようなことを行う必要があります。

- (NSUserDefaults *)sharedUserDefaults {
    static NSUserDefaults *shared = nil;
    if (!shared) {
        shared = [[NSUserDefaults alloc] initWithSuiteName:@"com.company.my-app-suite"];
    }
    return shared;
}

そして、[NSUserDefaults standardUserDefaults]両方のアプリ全体ではなく、それを使用してください。

于 2014-04-24T07:34:37.353 に答える
1

アプリはiCloud上のコンテナディレクトリを共有できます。

iCloudエンタイトルメントの設定に関するAppleのドキュメントから:

「iCloudコンテナ」フィールドは、アプリがユーザーのiCloudストレージでアクセスできるコンテナディレクトリのリストを識別します。(このフィールドは、com.apple.developer.ubiquity-container-identifiersエンタイトルメントに対応します。)このリストに追加する文字列は、チームによって作成されたアプリのバンドルIDに対応している必要があります。Xcodeは、現在のアプリのバンドルIDを使用して最初の文字列を指定します。複数のアプリでメインコンテナディレクトリを共有する場合は、これを別のバンドル識別子に変更できます。チームの他のアプリのバンドル識別子を追加することもできます。

于 2012-12-23T20:42:02.647 に答える