2015-09-24 4 views
32

ОбзорIOS строит/создание ипа больше не работает из командной строки

Наша командная строка строит (построить и создать .ipa) больше не работает.

iTunesConnect начал отклонять сборки, которые используют настройку сборки CODE_SIGN_RESOURCE_RULES_PATH.

Если мы создадим WITHOUT, то установка инструмента PackageApplication (который мы используем для создания подписанного .ipa) завершилась неудачно.

Кажется, что PackageApplication звонки/USR/бен/CodeSign с ресурсоемкими правил аргументов, даже если установка CODE_SIGN_RESOURCE_RULES_PATH сборки исключается

Я подозреваю, что PackageApplication должен быть обновлен таким образом, чтобы он не звонит/USR/бен/codesign с аргументами правил ресурса, когда параметр сборки CODE_SIGN_RESOURCE_RULES_PATH исключен.

Кто-нибудь нашел решение для этого?

Подробности

Мы строим наше приложение в командной строке, например так:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' 

Мы создаем подписанный .ipa в командной строке, например так:

xcrun -log -sdk iphoneos PackageApplication "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.app" -o "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.ipa" -sign "iPhone Distribution: MyTeam (XXXXXXXXXX)" -embed /Users/mpv/Library/MobileDevice/Provisioning\ Profiles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision 

iTunesConnect теперь отклоняет наши сборки со следующей ошибкой:

"This bundle is invalid. The Info.plist contains an invalid key 'CFBundleResourceSpecification' in bundle myApp [myApp.app]"

Если мы удалим бит 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' из команды сборки, приложение будет построено без ключа plist CFBundleResourceSpecification (что, я полагаю, является тем, что мы хотим). Новая команда сборки выглядит следующим образом:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 

Сейчас проблема заключается в том, что команда построить .ipa не удается со следующей ошибкой:

error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: MyTeam (XXXXXXXXXX) --resource-rules=/var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist --entitlements /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/entitlements_plistIUdGWLYe /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!

Warning: --resource-rules has been deprecated in Mac OS X >= 10.10! /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist: cannot read resources

Кажется, что PackageApplication звонки/USR/бен/codeign с аргументами правил ресурсов, даже если параметр аргумента/сборки CODE_SIGN_RESOURCE_RULES_PATH исключен.

Я думаю, что PackageApplication необходимо обновить, чтобы он не вызывал/usr/bin/codesign с аргументами правил ресурсов, когда параметр аргумента/сборки CODE_SIGN_RESOURCE_RULES_PATH исключен.

+0

Здравствуйте, у меня уже есть неотвеченный вопрос о точно такой же проблеме: http://stackoverflow.com/questions/32720442/build-ios-app-and-distribute-ipa-via-testflight-with-jenkins-and- xcode-7 – dreamzor

+0

Эй, я получаю эту ошибку «Ld /Users/confiz/Library/Developer/Xcode/DerivedData/CloudMessage-afevkkqtjcnmoddycvosdhbgoraa/Build/Intermediates/ArchiveIntermediates/LTDMessaging/IntermediateBuildFilesPath/CloudMessage.build/Release-iphoneos/LTDMessaging. build/Objects-normal/arm64/LTD \ Messaging normal arm64 ", если я пытаюсь архивировать из командной строки, но отлично работает с Xcode. Я действительно не знаю, как это решить. –

ответ

98

Apple вернулась ко мне с решением. Начиная с Xcode 7 мы должны использовать xcodebuild вместо PackageApplication для создания файла .ipa.

У xcodebuild есть новая опция -exportArchive для создания .ipa, которая больше похожа на Xcode Organizer.

Так теперь мы должны:

  1. строить архив с xcodebuild archive
  2. создать.ипа с xcodebuild -exportArchive

теперь построить архив как это:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive 

Сейчас мы экспортируем .ipa как это:

xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build 

Эти две команды создают файлы build/myApp.xcarchive и build/myApp.ipa

Обратите внимание: xcodebuild -exportArchive требует аргумент -exportOptionsPlist, который указывает на файл .plist с параметрами экспорта. Для получения полного списка того, что вы можете разместить в этом plist, запустите xcodebuild -help. Минимальное содержимое файла выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>method</key> 
    <string>app-store</string> 
    <key>teamID</key> 
    <string>YOUR_TEN_CHARACTER_TEAM_ID</string> 
</dict> 
</plist> 

В Xcode 9, теперь вы должны указать более подробную информацию в exportOptions.plist, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>compileBitcode</key> 
    <false/> 
    <key>method</key> 
    <string>ad-hoc</string> 
    <key>provisioningProfiles</key> 
    <dict> 
    <key>my.bundle.idenifier</key> 
    <string>My Provisioning Profile Name</string> 
    </dict> 
    <key>signingCertificate</key> 
    <string>iPhone Distribution</string> 
    <key>signingStyle</key> 
    <string>manual</string> 
    <key>stripSwiftSymbols</key> 
    <true/> 
    <key>teamID</key> 
    <string>YOURTEAMID</string> 
    <key>thinning</key> 
    <string>&lt;none&gt;</string> 
</dict> 
</plist> 
+0

Я смог «xcodebuild -archive» без указания параметров plist '-exportOptionsPlist' – ehrpaulhardt

+1

Если вы посмотрите внимательно на вывод, я считаю, что он говорит, что что-то говорит о том, что использование' -archive' без '-exportOptionsPlist' устарело. –

+0

Да, вы правы, в журнале вывода есть предупреждение об устаревании. Thx для уточнения. – ehrpaulhardt

1

Перейти к папке проект:

Архив:

для DEBUG:

xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive 

для выпуска:

xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive 

Fetch ипа:

xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/ 
12

шаги, чтобы сделать ипа Usig терминала

Очистка проекта:

релиз

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration ReleaseAdhoc -alltargets 

Debug

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets 

Архив проекта:

Debug

xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -configuration Debug -archivePath pathForArchiveFolder/myApp.xcarchive 

Выпуск

xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -archivePath pathForArchiveFolder/myApp.xcarchive 

Экспорт IPA

Старая версия: Это может дать Подписанный ресурс был добавлен, изменен или удален.Ошибка

xcodebuild -exportArchive -archivePath projectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportFormat ipa -exportProvisioningProfile “provisioning profile” 

Новая версия:

xcodebuild -exportArchive -archivePath ProjectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportOptionsPlist ProjectFolder/exportPlist.plist 
+1

, а какие ключи/значения поддерживаются опцией -exportoptionPlist.plist? –

2

Вот быстрый наконечник в случае, если вам нужно создать файл exportOptions.plist как часть процесса сборки (может быть Jenkins).

Вы можете использовать инструмент plutil, чтобы превратить JSON в плоскость. Пример:

echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- - 

Наслаждайтесь!

0

Я создал имя проекта myFirstApp, и местоположение проекта - Desktop/myFirstApp. Проверено на Xcode8.3

Шаг 1 -

cd /Users/Ved/Desktop/myFirstApp/ 

Шаг 2 -

xcodebuild -scheme myFirstApp archive \ 

-archivePath /Users/Ved/Desktop/myFirstApp.xcarchive 

Шаг 3 -

xcodebuild -exportArchive -exportFormat ipa \ 

-archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \ 

-exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \ 

-exportProvisioningProfile "myFirstAppDevProfile" 
Смежные вопросы