Вопрос по keychain, xcodebuild, ios, code-signing-entitlements, entitlements – Интеграция KeyChain, вызывающая сбой с ошибкой «отсутствует право» - через сборки командной строки

2

У меня проблема с некоторым кодом KeyChain, вызывающим архивы, созданные с помощьюxcodebuild аварийно завершить работу при распространении в виде специальных приложений и запуске на устройстве. Проблема не затрагивает сборки, созданные с помощью 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

Код работает без ошибок в симуляторе, на отладочном устройстве и в качестве специального дистрибутива. Единственная проблема возникает через сборки командной строки. Что мне не хватает?

С тех пор, как я задал этот вопрос, прошло много месяцев, и я больше не поддерживаю приложение, на которое оно влияло. Если кто-то, кто находится в «гуще этого» можете подтвердить один из ответов ниже, пожалуйста, прокомментируйте здесь, и я отмечу, что он ответил. Я склонен к ответу @sglist, но хотел бы другого мнения. Спасибо David James

Ваш Ответ

3   ответа
2

моему опыту, причиной часто является то, что префикс идентификатора приложения в разрешениях приложения не совпадает с префиксом идентификатора приложения в профиле обеспечения.

Чтобы проверить, используйте инструмент кодировки для просмотра прав вашего приложения:

codesign -d --entitlements - MyApp.app/

Затем сравните префикс идентификатора приложения с соответствующим в профиле обеспечения:

cat MyApp.app/embedded.mobileprovision
I love you!!! Это стоило мне двух дней, пока я наконец не нашел ваш пост, который привел меня к тому, что я ошибся! Эта простая команда ...
0

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

Вы захотите передать имя вашей группы доступа туда. Это может или не может решить вашу проблему, эти вещи немного "чувствительны".

2

atsign.sh (https://gist.github.com/mediabounds/1367348) accordingly - the entitlements have to be update like @sglist said. You can find the implementation here: https://gist.github.com/Weptun/5406993

У меня та же проблема. Вы можете просто добавить код, который вы изменили в floatsign.sh с небольшим объяснением Спасибо?

Похожие вопросы