xcodebuild - codeign -vvvv говорит, что конверт ресурсов устарел

Я только что обновил свою установку xcode, чтобы использовать xcode 6.0.1, чтобы начать компиляцию моего приложения для устройств ios8. По какой-то причине я не могу правильно подписать файл приложения, который создается с помощью следующего:

xcodebuild -project GrantM/GrantM.xcodeproj -configuration Release

он компилирует код и выглядит нормально, но работает:

/usr/bin/codesign --verify -vvvv GrantM/GrantM.app

дай мне:

Program /usr/bin/codesign returned 1 : [GrantM/GrantM.app: resource envelope is obsolete]
Codesign check fails : GrantM/GrantM.app: resource envelope is obsolete

проверка того, что код вообще был подписан, используя: / usr / bin / codeign -dv GrantM / GrantM.app

возвращает:

Executable=Documents/GrantM/GrantM/GrantM.app/GrantM
Identifier=com.grantapps.GrantM
Format=bundle with Mach-O universal (armv7 (16777228:0))
CodeDirectory v=20200 size=647 flags=0x0(none) hashes=23+5 location=embedded
Signature size=4336
Signed Time=24 Sep 2014 12:54:53 pm
Info.plist entries=34
TeamIdentifier=N3KKU46JLY
Sealed Resources version=2 rules=5 files=55
Internal requirements count=1 size=180

Кто-нибудь еще сталкивался с аналогичными проблемами в OSX 10.9.5 и xcode 6.0.1? Или я просто немного глуп и делаю что-то явно не так?

Кроме того, мне удалось найти отладочную версию приложения, созданную в xcode, и я мог успешно ее подписать, но это отладочная версия, она не будет работать для распространения. Я даже не могу вручную подписать файл приложения, созданный xcodebuild.

заранее спасибо за любую помощь или совет.


person Grantism    schedule 24.09.2014    source источник
comment
+1, Мое приложение удалось установить и запустить на iOS7 / iPhone4 / 5, хотя проверка кода не удалась. Понятия не имею, есть ли какой-либо патентный риск. Я собрал некоторую информацию как из официальных, так и из неофициальных источников, но я еще не решил проблему. stackoverflow.com/questions/26082784/   -  person firebear    schedule 28.09.2014


Ответы (5)


Если вы используете Mac OSX 10.9.5 или новее, то существует проблема с кодовой подписью ОС с помощью подписи V2.

Итак, используйте флаг --no-strict с codesign --verify, чтобы преодолеть эту ошибку.

Если вы используете PackageApplication для создания файла .ipa, тогда

Отредактируйте инструмент сценария Perl PackageApplication, используя команду vi PackageApplication, и обновите вхождения функции codeign, чтобы передать параметр --no-strict.

Пример:

мой $ result = runCmd ("/ usr / bin / codeign", "--verify", "--no-strict", "-vvvv",, $ plugin);

Я столкнулся с тем же самым и получил следующий ответ от команды разработчиков Apple. Вопрос решен для меня.

Инструмент командной строки «codeign »был изменен в 10.9.5 и 10.10, вам необходимо передать команде параметр« --no-strict »(о проблеме было сообщено, и она будет исправлена). Чтобы решить эту проблему, сохраните копию и измените PackageApplication, чтобы передать «-no-strict» для кодовой подписи, вы можете найти PackageApplication, выполнив следующее: xcrun -sdk iphoneos -f PackageApplication

person Omkar    schedule 05.10.2014
comment
Это также решает проблему для xcodebuild? Я имею в виду, использует ли xcodebuild PackageApplication? - person RonaldPK; 08.10.2014
comment
В целом проблема связана с Mac OSX 10.9.5 и новее и инструментом кодового оформления. xcodebuild не использует PackageApplication напрямую, если вы не укажете какой-либо postscript для создания файла ipa. Если вы используете xscrum с PackageApplication, вам придется изменить PackageApplication, чтобы он работал в Mac OSX 10.9.5 и более поздних версиях. - person Omkar; 09.10.2014
comment
Спасибо. Я действительно использовал xcodebuild для создания IPA из xcarchive. Я добавил --no-strict в PackageApplication, и теперь «Проверка приложения» возвращает «действительно на диске» и «удовлетворяет назначенным требованиям». Для меня это звучит намного лучше, чем «пакет ресурсов устарел». - person RonaldPK; 11.10.2014
comment
Спасибо. Я обнаружил, что в PackageApplication есть 2 места вызова кода. Добавьте --no-strict в часть «Проверка исходного приложения», чтобы обойти проблему. - person firebear; 15.10.2014
comment
Добавление --no-strict исправило это для меня. Я предполагаю, что IPA не будет отклонено после отправки? - person Jay Q.; 21.10.2014
comment
Я задал тот же вопрос команде разработчиков Apple, они сказали, что вы сможете загрузить его. Я также подписываю свое приложение от Apple. После этого я обновлю сообщение. - person Omkar; 21.10.2014
comment
@JayQ. Да, мы выполнили описанные выше шаги для создания файла ipa, и наш ipa был принят Apple. :) - person Omkar; 03.11.2014
comment
СПАСИБО! Вы спасли положение - оказалось, что это помешало принять наше приложение. Было ли это исправлено в инструментах командной строки Yosemite? Наша машина работала под управлением Mavericks. - person dadude999; 11.12.2014
comment
Мы также можем увидеть эту проблему в Йосемити. - person Omkar; 12.12.2014
comment
Выполнение менее строгой codesign проверочной проверки не решает для меня проблемы. Пакет (в моем случае установщик OS X mpkg) по-прежнему не проходит проверку, выполненную spctl, и, что наиболее важно, не проходит через Gatekeeper. - person Rich; 02.06.2015
comment
Вы используете codeign на Mac OSX 10.10? Если нет, то вы должны это сделать, иначе Gatekeeper поймает вас. - person Omkar; 05.06.2015
comment
Это решение должно нас сильно беспокоить. Строгая подпись кода важна, иначе вредоносные приложения могут стать нормой. - person Douglas Held; 12.10.2015

У меня есть настройка системы Jenkins CI для предоставления автоматических сборок нашего приложения iOS из репозитория git. Кроме того, я также загружаю / отправляю сборку в Crashlytics для мониторинга журналов сбоев.

Все работало нормально с Xcode 6.0 GM, но после установки Xcode 6.0.1 загрузка в Crashlytics не удалась с той же ошибкой. Я прошу их помощи в этом.

Часть моей работы по сборке действительно использует xcodebuild для создания архива приложения, и из этого я также использую PackageApplication для получения файла .ipa, а PackageApplication действительно выдает команду codeign, и это НЕ дает сбой. Я использую сборку дистрибутива, а не отладку.

Вот команда, которую я использую для очистки / архивации приложения в своей работе:

xcodebuild clean archive -scheme MyScheme -target MyTarget -sdk iphoneos -configuration AdHoc CODE_SIGN_IDENTITY="iPhone Distribution: MyCompany" PROVISIONING_PROFILE="UDID_Of_Provisioning_Profile"

Вот команда, которую я использую для упаковки / получения файла .ipa приложения из сгенерированного архива:

xcrun -sdk iphoneos PackageApplication "Path/to/MyApp.app" -o "/Path/To/MyApp.ipa" --sign "iPhone Distribution: MyCompany" --embed "Path/To/UDID_Of_Provisioning_Profile.mobileprovision"

Попробуйте изменить их в соответствии с вашими настройками и посмотрите, появится ли у вас такая же ошибка.

person Sharkus    schedule 25.09.2014
comment
После долгого разочарования мне удалось отследить реальную проблему. Похоже, что срок действия одного из сертификатов, используемых в процессе подписи, истек. создание нового профиля исправило это для меня. для вас попробуйте добавить флаг --no-strict к вашим флагам сборки (я сделал это в разделе других флагов подписи кода в настройках сборки в xcode) - person Grantism; 26.09.2014
comment
У меня такая же проблема, но срок действия моих сертификатов еще не истек - person firebear; 28.09.2014
comment
Как насчет нескольких целевых приложений, таких как Watchkit, расширение для часов, комплект Siri, расширение Siri UI. Могу посоветовать мне какой-нибудь сценарий. Я пытался сделать IPA, но при копировании устройства выдается ошибка установки API :( - person Vicky Dhas; 06.12.2017

В моем случае я проверил все фреймворки и dylib, которые использовал, чтобы выяснить, какие из них отклонены, затем отказался от этих самых фреймворков или dylib, и все приложение спасло мне задницу.

person Nix Wang    schedule 07.01.2015

Выполните следующие действия, чтобы избежать этой ошибки.

  1. Удалите CFBundleResourceSpecification = ResourceRules.plist из Info.plist
  2. Избегайте --resource-rules в строке codeign и выполняйте подпись кода.
  3. Проверить приложение: codeign --verify -vvvv Payload / *. App
person Febin    schedule 07.01.2016

В OS 10.10 мне нужно удалить --resource-rules в строке codesign

my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve 
metadata=identifier,entitlements","--sign", $opt{sign});
person Vid    schedule 28.10.2014
comment
Не могли бы вы подробнее объяснить, что это значит и почему это необходимо? - person evenro; 29.10.2014
comment
Не используйте флаг --resource-rules или ResourceRules.plist. Они устарели и будут отклонены. - Из Apple сообщает об изменениях 10.9.5. - person Dmitry Isaev; 25.12.2014
comment
Я также хочу удалить --resource-rules из кода. Скажите, пожалуйста, как вы это удалили. - person Rashmi Ranjan mallick; 05.01.2015