Помилка Xcode 6.1 під час створення IPA


140

Щойно оновлений до Xcode 6.1 сьогодні, і здогадайтесь, що: Тепер у мене виникають проблеми з поданням збірок за допомогою настільного додатку TestFlight. Ось помилка, яку я отримую, коли програма починає створювати IPA:

Помилка

помилка: / usr / bin / codeign --force --preserve-metadata = ідентифікатор, права, ресурс-правила - знак 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app не вдалося з помилкою 1. Вихід: Попередження: використання - зберігати метадані з опцією "ресурс-правила" (застаріла в Mac OS X> = 10.10)! Попередження: --ресурси-правила застаріли в Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: не вдається прочитати ресурси

"Стаття про підтримку" не має уявлення про те, що відбувається.

Здається, це не проблема TestFlight, оскільки те саме відбувається в умовах CI, як Дженкінс, використовуючи xcrun або подібні інструменти.

Додаток не оновлювався місяцями, тому я знаю, що я не повинен очікувати, що оновлення виправлять це в найближчий час. Раніше вона працювала дуже добре і для мене, і для моїх клієнтів, тому я теж не прагну відмовитися від чогось іншого.

Будемо дуже вдячні за будь-які ідеї щодо цієї помилки та як її виправити.


4
Це , здається, не є проблемою , так як TestFlight те ж саме відбувається в середовищі CI , використовуючи команду xcrun на зразок цього: xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. З Xcode 6.0.1 все працювало нормально.
Даніель Мартін

Відповіді:


312

Я хотів би, щоб я знав, чому це працює, але ось виправлення, яке працювало для мене:

Знайшли виправлення!

Клацніть на своєму проекті> Цілі> Виберіть ціль> Налаштування збірки>

Code Signing Resource Rules Path

і додати:

$(SDKROOT)/ResourceRules.plist


7
Дякую! Відверто кажучи, мені байдуже, чому це працює :) просто останнє в тому, що Apple за останні кілька місяців здійснила свою грандіозну програму. У будь-якому випадку, дякую, що вказали на рішення. (І downvote для мене не відриваючись помилку ретельно перед проводці)
şafak Ґезера

10
CODE_SIGN_RESOURCE_RULES_PATH - це назва змінної, якщо ви редагуєте налаштування xcodeproj через скрипт або командний рядок. developer.apple.com/library/ios/recipes/…
roblocop

5
Я не бачу Code Signing Resource Rules Pathв налаштуваннях збірки. Будь-яка ідея?
Георг

7
Переконайтесь, що ви вибрали ВСІ, а не ОСНОВНІ налаштування (Рядок нижче "Загальні, Можливості, Інформація, Налаштування збірки тощо")
AS

Мабуть, це відхилить ваш додаток: stackoverflow.com/questions/26488077/…
Гленн Мейнард

61

Наступний патч для PackageApplications виправив його для мене, я видалив ресурс-правила, оскільки він говорить про застаріле 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});

Видалено застарілий застарілий параметр з PackageApplication, і buildozer тепер будує мій додаток Python для iOS
Ian Ellis

Чудовий виправлення! Дякую багато :) Вищенаведена установка "Шлях правил підписання коду" не вирішила мою проблему, але ця відповідь зробила, плюс виправлення тепер глобальне для всіх проектів :)
Пелет

@IanEllis: Скажіть, будь ласка, повідомте мені, як ви видалили "PackageApplication" параметр "правила ресурсу". Це буде від великої допомоги !!
Rashmi Ranjan mallick

8
Ось один ліній для виправлення PackageApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, resource-rules (. * Знак}). * ResourceRules.plist "/ $ 1 / smg '" / Програми / Xcode6.1.1.app / Зміст / Розробник / Платформи / iPhoneOS.platform / Developer / usr / bin / PackageApplication "(коригуйте свій шлях) І повний сценарій, щоб застосувати це: bitbucket.org/WeWantToKnow/xcode_scripts/raw/… для використання: xcode_fix_PackageApplicationResourceRules.sh /Applications/Xcode6.1.1.app
кава-перерви

Це правильна відповідь. Відповідь налаштування збірки змушує використовувати застарілий API.
Джеймсон

10

Я надіслав електронною поштою підтримку TestFlight і отримав таку відповідь:

Зараз наша команда розслідує цю проблему за допомогою програми TestFlight Desktop. Тим часом, використовуйте Xcode, щоб створити файл IPA, а потім завантажте його за допомогою програми для настільних ПК або веб-сайту TestFlight.

Запропонований спосіб спрацював.


1
Мені працювало просто зробити .ipa з Xcode та завантажувати через настільний додаток.
livingtech

@livingtech Так, однак, я також отримав жахливий "Xcode, що генерує новий профіль, замість того, щоб вибрати той, для якого я хочу його" -bug :) Завантаження з тестовим польотом безпосередньо спрацювало чудово.
helmesjo

10

Чи не відповідь Тіма Gostony більше не працює з випуском Xcode 7. Тепер процес подання App Store зазнає невдачі , коли правила ресурсу присутні. Рішення полягає в тому, щоб очистити шлях до правил підписання коду і замінити xcrun інструментом xcodebuild:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

Найпростіший Options.plist для експорту спеціальних ipa-файлів розповсюдження виглядає приблизно так:

<?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>

Для цього файлу плістів доступні інші варіанти щодо бітового коду, розрідження додатків тощо. Тому я вважаю, що інструмент xcodebuild є правильним інструментом для експорту ipa-файлів для iOS 9 і вище.

Більш докладні відомості про опціоністський список доступні за допомогою команди xcodebuild -help


дякую Володимиру, я дуже заплутався в цьому, як він суперечить поданням Xcode 7.
kevinl

як саме ви замінюєте xcrun? Я не бачу ніяких налаштувань для цього в плагіні Jenkins Xcode :(
Hlung

2

На Yosemite w / XCode 6.4 навіть за допомогою патчу SDKROOT кодування, що спроектує, не вдається. Наступна стаття пояснює, як виправити скрипт XCode, щоб уникнути цього. Зауважте, що це виправлення XCode, тому воно є специфічним для версії, але виправляє проблему.

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts


1

Відповідь від Алістра роботи для мене , але я не хочу , щоб змінити скрипт , який не мій (майбутній 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файл за допомогою підпису cp.


0

Як зазначено в іншій відповіді , ви також можете просто не вказати сертифікат розповсюдження для підписання, і він буде правильно упакований. Для цього TestFlight потрібно буде оновити свій додаток.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.