CLI: Переключить брелки для подписи xcodebuild
Я пытаюсь включить определенную цепочку ключей и закрыть другую.
Мне нужно это, потому что имена наших предприятий и AppStore называются одинаковыми.
В настоящее время я делаю "разблокировку ключей безопасности", за которым следует "ключ безопасности по умолчанию", чтобы открыть правильный брелок и сделать "брелок безопасности" в цепочке ключей, которую я не хочу использовать.
Но xcodebuild все еще видит записи в обеих цепочках ключей и отказывается.
iPhone Distribution: Company name.: ambiguous (matches "iPhone Distribution: Company name." in /Users/user/Library/Keychains/login.keychain and "iPhone Distribution: Company name" in /Users/user/Library/Keychains/enterprise.keychain)
Как я могу предотвратить обнаружение системой записи в цепочке ключей, которую я заблокировал?
Ответы
Ответ 1
Решение:
Я поместил все материалы, связанные с appstore, в брелок для входа в систему и материал предприятия в отдельном файле keychain.
В buildscript я переключаюсь между ними следующим образом:
# 1. Only activate the System and either the Appstore(=login) or Enterprise keychain.
security list-keychains -s $KEYCHAIN_NAME $SYSTEM_KEYCHAIN
# 2. Loop through App Schema's
for APP_SCHEME in ${APP_SCHEMES[@]}; do
echo "--= Processing $APP_SCHEME =--"
xcodebuild -scheme "${APP_SCHEME}" archive
done ### Looping through App Schema's
# 3. Restore login & system keychains
security list-keychains -s $APPSTORE_KEYCHAIN $ENTERPRISE_KEYCHAIN $SYSTEM_KEYCHAIN
Ответ 2
Вы можете указать Xcode, какой брелок использовать:
xcodebuild "OTHER_CODE_SIGN_FLAGS=--keychain '$PATH_TO_KEYCHAIN'"
Или, если вы вызываете codesign
напрямую:
codesign --keychain "$PATH_TO_KEYCHAIN"
Если вы используете PackageApplication, установить этот способ не существует. Однако PackageApplication - довольно простой script, который может быть переопределен при необходимости (очень полезно, если вы интегрируетесь с более крупной системой/script).
Ответ 3
Другое решение для xcode версии 6 и ниже: укажите свой сертификат по SHA1 вместо (неоднозначного) имени. Из "man codeign":
If identity consists of exactly forty hexadecimal digits, it is instead
interpreted as the SHA-1 hash of the certificate part of the desired iden-
tity. In this case, the identity subject name is not considered.
И из "help help find-certificate"
-Z Print SHA-1 hash of the certificate
К сожалению, для этого метода требуется использовать PackageSign script, который был устарел в Xcode 7