2

iCloud KVStore複数のアプリでシーナリーを構成しています。このシーナリーには、kvstore コンテナーに書き込むプライマリ アプリと、プライマリ アプリの kvstore から読み取るセカンダリ アプリがあります。iCloud Key-Value Store Capabilityプライマリ アプリには、デフォルトで (をアクティブ化するとき) kvstore 識別子があります。

<key>com.apple.developer.icloud-container-identifiers</key>
    <array/>
    <key>com.apple.developer.ubiquity-kvstore-identifier</key>
    <string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>

Apple のドキュメントの複数のアプリに共通のキー値ストアの風景で説明されているように:

複数のアプリに共通の Key-Value ストレージの構成

プライマリ以外のすべてのアプリに対して、プライマリの kv-store 識別子を指定する必要があります。

<key>com.apple.developer.icloud-container-identifiers</key>
    <array/>
    <key>com.apple.developer.ubiquity-kvstore-identifier</key>
    <string>ABCDEFGH.com.myCompany.myApp</string>

どこ

ABCDEFGH.com.myCompany.myApp$(TeamIdentifierPrefix)$(CFBundleIdentifier)値です。

セカンダリ アプリ (この場合は tvOS アプリ) の実行中に、デフォルトの kv-store 識別子がある場合は機能しますが、実行されません (コンパイルされます)。要求ABCDEFGH.com.myCompany.myAppされた値を使用すると、共有を読み取るために使用されます。iCloud KVStore

エラーは次のとおりです。

アプリケーションのコード署名資格ファイルで指定された資格が、プロビジョニング プロファイルで指定された資格と一致しません。(0xE8008016)。

また、次のように iTunesConnect ポータルで定義されているものであることを確認するために、プログラムで Team-ID 識別子の値を確認しようとしました。

+ (NSString *)bundleSeedID {
    NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys:
                           (__bridge NSString *)kSecClassGenericPassword, (__bridge NSString *)kSecClass,
                           @"bundleSeedID", kSecAttrAccount,
                           @"", kSecAttrService,
                           (id)kCFBooleanTrue, kSecReturnAttributes,
                           nil];
    CFDictionaryRef result = nil;
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
    if (status == errSecItemNotFound)
    status = SecItemAdd((__bridge CFDictionaryRef)query, (CFTypeRef *)&result);
    if (status != errSecSuccess)
    return nil;
    NSString *accessGroup = [(__bridge NSDictionary *)result objectForKey:(__bridge NSString *)kSecAttrAccessGroup];
    NSArray *components = [accessGroup componentsSeparatedByString:@"."];
    NSString *bundleSeedID = [[components objectEnumerator] nextObject];
    CFRelease(result);
    return bundleSeedID;
}

実際、それは正しいものです:

ABCDEFGH.com.myCompany.myApp

すでに AppStore にあるアプリと、開発中だが AppStore で構成されているアプリを試しました (BundleID、この BundleID によるプロビジョニング プロファイルはすべて iTunes Connect から取得されます) が、エラーは残ります。

4

0 に答える 0