Подтвердить что ты не робот

Xcodebuild не копирует файл из .app

Я создал подписанный файл .xcarchive с помощью команды xcodebuild.

Внутри .xcarchive есть файл .app. Внутри .app находится файл с именем archived-extended-rights.xcent. Этот файл является ключом к моей проблеме.

Я запускаю другую команду xcodebuild, которая создает файл .IPA из .xcarchive.

Создание IPA завершается с ошибкой, так как отсутствует файл архивированного расширенного права. Дело в том, что xcodebuild создает временный каталог, где он копирует мой файл .app, а внутри этого файла .app файл отсутствует файл с архивированным расширенным расширением .xcent.

Все остальные файлы находятся там, кроме этого.

Команды, которые я запускаю, находятся ниже:

Это создает xcarchive:

xcodebuild -project diplomat.xcodeproj -scheme schemeName archive -archivePath /Path/To/Archive/name.xcarchive -configuration AppStore CODE_SIGN_IDENTITY="identity" PROVISIONING_PROFILE=provProfile

Это создает IPA:

xcodebuild -exportArchive -exportFormat IPA -archivePath /Path/To/Archive/name.xcarchive -exportPath /Path/To/Archive/name.ipa

Несмотря на указание местоположения .xcarchive, он создает временный каталог и не включает важный файл. Обратите внимание, что файл архивированного расширенного права .xcent создается во время процесса .xcarchive(первая выполняемая команда) и не удается скопировать во временный каталог во время второго запуска команды.

Это точная ошибка. Google и StackOverflow дали подобные ошибки, но ничего с этой реальной проблемой.

Checking original app

     + /usr/bin/codesign --verify -vvvv    /var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-  42128-00007ED35037747A/name.app

Program /usr/bin/codesign returned 1 : 

     [/var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app: a sealed resource is missing or invalid

file missing: 

     /private/var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app/archived-expanded-entitlements.xcent
]

Codesign check fails :

      /var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app: a sealed resource is missing or invalid

file missing: 

      /private/var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app/archived-expanded-entitlements.xcent

Done checking the original app
4b9b3361

Ответ 1

Это действительно странное поведение xcodebuild, но вы все равно можете использовать команду exportArchive и указать профиль обеспечения с помощью exportProvisioningProfile:

xcodebuild -exportArchive -exportFormat IPA \
  -archivePath /Path/To/Archive/name.xcarchive \
  -exportPath /Path/To/Archive/name.ipa \
  -exportProvisioningProfile 'PROVISIONING_PROFILE_NAME'

Это будет соответствовать профилю подготовки в приложении, и вам не нужно будет снова указывать идентификатор подписи кода, поскольку архив уже должен быть подписан во время архивного процесса.

Ответ 2

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

Замените вторую команду xcodebuild этим, в которой используется xcrun:

/usr/bin/xcrun -sdk iphoneos PackageApplication -v /Path/To/Archive/name.xcarchive/Products/Applications/name.app -o /Path/To/Archive/DiplomatStaples.ipa --sign "identity" - -embed "provProfile"

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

Для вопросительных умов: причина, по которой я не просто использую xcrun, в первую очередь потому, что даже если я укажу профиль профайла и подписи подписи, xcrun будет использовать встроенный профиль и подпись в проекте на основе конфигурации ( Debug, AppStore, Release и т.д.), Которые я указываю. xcodebuild будет фактически подписываться с сертификатами, которые я предоставляю.

Цель этой операции заключалась в том, чтобы удалить необходимость в предоставлении сертификатов профилей, требуемых системой CI от машин разработчика, что позволяет тестировать конфигурацию "AppStore" с сертификатами распространения AdHoc и разрешать повторное подписание xcarchive позже с фактическими сертификатами распространения App Store.