2

xcodebuildアドホック アプリとして配布し、デバイスで実行すると、いくつかの KeyChain コードが原因で作成されたアーカイブがクラッシュするという問題があります。この問題は、Xcode で作成されたビルドには影響しません。コマンド ラインで作成されたビルドのみです。

エラーをスローしているコード: (ここにある KeyChain ライブラリを使用しています)

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"myapp" accessGroup:nil];
NSString *testKeychain = (NSString *)[keychain objectForKey:(__bridge id) kSecAttrAccount];
if (testKeychain.length) {
    NSLog(@"KeyChain value for kSecAttrAccount: %@", testKeychain);
} else {
    NSLog(@"No KeyChain value for kSecAttrAccount");
}
[keychain setObject:@"Shared KeyChain value!" forKey:(__bridge id) kSecAttrAccount]; // <-- error thrown here

「権利がありません」というエラー

2012-06-15 10:03:20 AM +0000 securityd MyApp [138] SecItemCopyMatching: missing entitlement
2012-06-15 10:03:20 AM +0000 MyApp No KeyChain value for kSecAttrAccount
2012-06-15 10:03:20 AM +0000 securityd MyApp [138] SecItemCopyMatching: missing entitlement
2012-06-15 10:03:20 AM +0000 securityd MyApp [138] SecItemAdd: missing entitlement
2012-06-15 10:03:20 AM +0000 MyApp *** Assertion failure in -[KeychainItemWrapper writeToKeychain], /Users/davidbjames/XCode/.../KeychainItemWrapper.m:305

資格ファイル:

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
</array>

出力はxcodebuild資格ファイルを処理しているようです:

setenv CODE_SIGN_ENTITLEMENTS MyApp/MyApp.entitlements
..
ProcessProductPackaging MyApp/MyApp.entitlements /etc/etc/build/MyApp.xcent
..
builtin-productPackagingUtility /etc/etc/MyApp.entitlements -entitlements -format xml -o /etc/etc/MyApp.xcent

コードは、シミュレーター、デバッグ デバイス、およびアドホック ディストリビューションでエラーなく機能します。唯一の問題は、コマンド ライン ビルドを介して発生します。私は何が欠けていますか?

4

3 に答える 3

1

このエラーは、アプリの資格に問題があることを示しています。私の経験では、多くの場合、アプリの権利のアプリ識別子プレフィックスがプロビジョニング プロファイルのアプリ識別子プレフィックスと一致しないことが原因です。

確認するには、コード署名ツールを使用してアプリの資格を表示します。

codesign -d --entitlements - MyApp.app/

次に、App Identifier Prefix をプロビジョニング プロファイルのものと比較します。

cat MyApp.app/embedded.mobileprovision
于 2013-01-24T01:09:29.783 に答える
0

私はこの行が間違っていると思います:

[[KeychainItemWrapper alloc] initWithIdentifier:@"myapp" accessGroup:nil]

そこにアクセスグループ名を渡します。それはあなたの問題を解決するかもしれないし、しないかもしれません、これらのものは少し「敏感」です。

于 2012-06-29T14:22:27.367 に答える