Ошибка Xcode 6.1 При построении IPA
просто обновлен до Xcode 6.1 сегодня, и угадайте, что: теперь у меня возникли проблемы с отправкой сборок с помощью настольного приложения TestFlight. Вот ошибка, которую я получаю, когда приложение начинает строить IPA:
ошибка: / usr / bin / codesign --force -- сохранить-метаданные=идентификатор, права, ресурс-правила --знак 854059d45eed724593debef577a562e1ba96ab55 -- resource-rules=/tmp/QYFSJIvu7W/Payload/XX.app / ResourceRules.plist /tmp / QYFSJIvu7W / полезная нагрузка / XX. app Ошибка 1. Выход: Предупреждение: использование --preserve-metadata с опцией " resource-rules" (не рекомендуется в Mac OS X >= 10.10)! Предупреждение: --resource-правила были устарело в Mac OS X >= 10.10! /tmp/QYFSJIvu7W/полезная нагрузка/XX.app / ResourceRules.plist: не могу читать ресурсы
"статья поддержки" понятия не имеет, что происходит.
Это не кажется проблемой тестового полета, потому что то же самое происходит в среде CI, такой как Дженкинс, использующий xcrun или аналогичные инструменты.
приложение не обновлялось в течение нескольких месяцев, так что я знаю, что я не должен ожидать обновлений, чтобы исправить это в ближайшее время. Он работал очень хорошо для меня и моих клиентов, поэтому я не очень хочу отказаться от него для чего-то еще.
любые идеи о том, что это за ошибка, и как ее исправить, будут очень оценены.
7 ответов:
хотел бы я знать почему это работает, но вот исправление это сработало для меня:
нашел исправить !
нажмите на свой проект > цели > выберите цель > настройки сборки >
Code Signing Resource Rules Path
и добавить :
$(SDKROOT)/ResourceRules.plist
следующий патч для PackageApplications исправил его для меня, я удалил resource-rules, поскольку он говорит, что он устарел на 10.10.
Testflight строит работу без него. Appstore тоже строит.
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin % diff PackageApplication PackageApplicationFixed 155,157c155,156 < my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", < "--sign", $opt{sign}, < "--resource-rules=$destApp/ResourceRules.plist"); --- > my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", > "--sign", $opt{sign});
Я отправил по электронной почте поддержку TestFlight и получил этот ответ:
наша команда в настоящее время исследует эту проблему с настольным приложением TestFlight. В то же время, пожалуйста, используйте Xcode для создания файла IPA, а затем загрузите его с помощью настольного приложения или веб-сайта TestFlight.
предложенный обходной путь действительно работал.
The ответ by Tim Gostony больше не работает с момента выхода Xcode 7. Теперь процесс отправки магазина приложений завершается неудачей при наличии правил ресурсов. Решение состоит в том, чтобы очистить путь к правилам ресурса подписи кода и заменить xcrun инструментом xcodebuild:
xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]
самые простые варианты.plist для экспорта файлов ipa ad-hoc дистрибутива выглядит так:
<?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>iCloudContainerEnvironment</key> <string>Production</string> <key>teamID</key> <string>[YOUR TEAM ID]</string> <key>method</key> <string>ad-hoc</string> </dict> </plist>
есть и другие варианты, доступные для этого файла plist в отношении bitcode, app прореживание и т. д. Вот почему я думаю, что xcodebuild tool-это правильный инструмент для экспорта ipa-файлов для iOS 9 и выше.
более подробная информация о параметрах plist доступна с помощью команды xcodebuild-help.
на Yosemite w / XCode 6.4 даже при использовании патча SDKROOT кодирование не выполняется. В следующей статье объясняется, как исправить сценарий XCode, чтобы обойти это. Обратите внимание, что это исправление XCode, поэтому оно зависит от версии, но устраняет проблему.
http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts
The ответ от Alistra работают для меня, но я не хочу менять скрипт, который не является моим (будущий выпуск Xcode может изменить этот файл, и исправление будет потеряно).
diff PackageApplication PackageApplicationFixed 155,157c155,156 <- my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules", <- "--sign", $opt{sign}, <- "--resource-rules=$destApp/ResourceRules.plist"); --- -> my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements", -> "--sign", $opt{sign});
Я думаю ответ от Владимира Григорова лучше всего, если у вас есть архив с помощью:
xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]
в моем случае у меня нет архива, потому что я изменяю приложение после его сборки, и мне нужно измените идентификатор пакета и сертификат подписи.
решение, которое я нашел, это позвонить
codesign
сам раньше использовалPackageApplication
и спроситьPackageApplication
не знаком. Вот так:replace : /usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>" by : /bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision" /usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>" /usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>"
Не забудьте встроить
.mobileprovision
file using to sign withcp
.
Как указано в еще один ответ, вы также можете просто не указывать сертификат распространения для подписания, и он будет правильно упакован. Использовать TestFlight придется обновить свои приложения, чтобы сделать это.