Командная строка xcodebuild: передача идентификатора DevelopmentTeam для целей подписи кода

Моему приложению предоставляется один идентификатор bundleID для дистрибутива App Store. Приложение также имеет небольшой вариант для распределения предприятия, таким образом, с другим идентификатором bundleID. Автоматическая сборка использует следующую командную строку для установки идентификатора bundleID и выбора правильной подписи:

xcodebuild -project XYZ.xcodeproj -target XYZ -sdk "iphoneos" -configuration "Debug" BUNDLE_IDENTIFIER=<bundleID_1_or_2> CODE_SIGN_IDENTITY="<identify_1_or_2" build 

Эта автоматическая сборка отлично работает, до недавнего времени я включил возможности iCloud. Теперь Xcode автоматически добавляет следующее в project.pbxproj:

TargetAttributes = {
  QWERTY1234567890123456 = {
  DevelopmentTeam = XYZ123456;
    SystemCapabilities = {
      com.apple.iCloud = {
        enabled = 1;
      };
    };
  };
};

Обратите внимание на добавление жестко закодированного "DevelopmentTeam = XYZ123456"; для двух сборок идентификатор DevelopmentTeam отличается. Как автоматизировать это? Более простым решением является создание script для изменения project.pbxproj перед вызовом xcodebuild, но я не являюсь поклонником этого решения. Следующее лучше всего создать новую "User Defined Setting", передав ее через командную строку, но я не мог понять, как связать пользовательскую настройку с этим идентификатором DevelopmentTeam, встроенным там в project.pbxproj.

Ответ 1

Нам удалось обработать несколько идентификаторов DevelopmentTeam с помощью утилиты sigh, которая обеспечивает автоматизацию профилей подготовки. Мы используем его как часть набора fastlane.

sigh --team_id <DevelopmentTeamID>

Или как часть автоматизации Fastlane (Fastfile):

sigh(team_id: "<DevelopmentTeamID>")

Ответ 2

В Xcode 8 это было добавлено как настройка сборки DEVELOPMENT_TEAM. Вы можете передать в качестве аргумента командной строки, как и другие настройки:

xcodebuild
    -sdk "iphoneos"
    -project Foo.xcodeproj
    -configuration "Debug"
...
DEVELOPMENT_TEAM=XYZ123456

См. Более подробно об изменениях подписания кода Xcode 8: https://pewpewthespells.com/blog/migrating_code_signing.html

Ответ 3

В итоге мы создали еще одну конфигурацию сборки для отладки. В нашем случае он назывался "Ad-hoc" без особых причин. Наш сервер сборки использует корпоративный сертификат для тестовых сборок, поэтому мы просто изменили конфигурацию сборки, чтобы иметь правильные параметры сертификата и команды, а разработка "Debug" уже не важна. Однако одна вещь, которая бросает вызов, заключается в том, что некоторые cocoapods (fbtweaks) не понимают, что вы можете использовать конфигурацию, которая не называется "Debug", чтобы создавать отладочные сборки, поэтому есть некоторые обручи, которые нужно перепрыгнуть, чтобы сделать это работайте правильно.