iCloud KVStore - 代码签名权利错误

时间:2015-10-14 15:26:51

标签: ios icloud codesign code-signing-entitlements

我正在使用多个应用配置iCloud KVStore场景。在这个场景中,您有一个主应用程序写入其kvstore容器,以及从主应用程序的kvstore读取的辅助应用程序。主应用程序有一个kvstore标识符,默认情况下(激活iCloud Key-Value Store Capability时)是

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

正如Apple的Doc:

中多个应用的​​常见键值存储场景所描述的那样

Configuring Common Key-Value Storage for Multiple Apps

您必须为所有应用指定主要内容,即主要的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)。

我还试图以编程方式检查Team-ID标识符的值,以确保这是在iTunesConnect门户上定义的值,如下所示:

+ (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)但是,错误仍然存​​在

0 个答案:

没有答案