Codesign API Dropbox не работает в Xcode 4.6.3: "Объект кода вообще не подписан"

У меня есть приложение OS X, которое распространяется через Mac App Store и недавно обновлено до Xcode 4.6.3.

Когда я запускаю свою регулярную сборку сейчас, я получаю:

Command /usr/bin/codesign failed with exit code 1:

/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1

Я не могу распознать какие-либо другие изменения в моем проекте, поэтому я не могу сказать, связана ли проблема с обновлением 4.6.3 или чем-то еще.

Я попытался перезапустить Xcode, запустить чистую сборку и очистить папку сборки.

Ответ 1

Думаю, я, возможно, понял это. Я запускал Xcode 4.6.3 на OS X Mavericks под впечатлением того, что в приложении Xcode были добавлены любые инструменты для сборки.

Но, кажется, codesign находится в /usr/bin. Будь то он установлен одним из установщиков Xcode или поставляется с установкой ванильной системы, я не уверен. Но, прочитав страницу man для codesign, я нашел этот отличный вариант:

--deep  When signing a bundle, specifies that nested code content such as helpers, frameworks, and plug-ins, should be recursively signed
             in turn. Beware that all signing options you specify will apply, in turn, to such nested content.
             When verifying a bundle, specifies that any nested code content will be recursively verified as to its full content. By default,
             verification of nested content is limited to a shallow investigation that may not detect changes to the nested code.
             When displaying a signature, specifies that a list of directly nested code should be written to the display output. This lists only
             code directly nested within the subject; anything nested indirectly will require recursive application of the codesign command.

И вот я нашел этот пост (https://alpha.app.net/isaiah/post/6774960) с двух недель назад (~ июнь 2013 г.), в котором упоминается (хотя и во-вторых):

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

Вручную повторно запустите команду codesign, которую обычно запускает Xcode, добавив флаг --deep в конец, правильно подписывает приложение.

Я еще не уверен точно, какие последствия это подписание вручную, или я могу настроить сборку Xcode, чтобы добавить флаг --deep автоматически, но это, по-видимому, является основной проблемой. (codesign больше не будет автоматически автоматически подписывать пакет приложений.)

Ответ 2

Как указано в других ответах, происходит изменение способа подписания кода. Если вы установили любой из Xcode 5 DP, то новые инструменты будут использоваться, даже если вы используете Xcode 4.6.X.

Все, что вам нужно сделать на этом этапе (в Xcode 4.6.X), принять флаг -deep, предложенный выше, и добавить его в свои флаги подписи кода (Target, Build Settings), см. изображение ниже.

Specifying Deep Signing of Embedded Frameworks

Ответ 3

Для меня эта проблема возникла после перетаскивания папки с именем "resources" в моем проекте. После изменения имени на что-либо еще (например, "resourcessss" ) ошибка исчезла.

Ответ 4

У меня была та же проблема, но ответ был прост: идентификатор подписи кода в моем приложении был установлен в "-", поэтому просто установили, что "Do not Code Sign" меня исправил.

"-" кажется, является настройкой по умолчанию, когда вы выполняете некоторый набор действий, хотя я не могу сказать вам, что это такое.

Ответ 5

Это может помочь somone:

Я наконец понял решение путем проб и ошибок. В моем случае у меня было имя папки, которое соответствовало переменной "Имя продукта" в настройках сборки. Это также соответствует всему названию проекта! Поэтому я просто изменил одно поле. Я изменил "Настройки сборки" → "Название продукта". Значение MySpecialApp было изменено на My-SpecialApp. Это было просто! Затем я зашел в портал разработчиков Apple и создал новые идентификаторы приложений и мобильных профилей для разработки и распространения, а остальное - история. Мои выпуски теперь работают при развертывании через Ad Hoc-дистрибутив.   Заключительная записка об этом. Это определенно ошибка, которую Apple должна либо предупредить пользователя о том, что они сделали что-то неправильно, и активировать какие-то автоматические корректирующие действия.   - См. Больше на: http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf

Ответ 6

Для меня это был поврежденный Framework PaddleMAs, который: 1. Я удалил из файла Cocoapods 2. Ran pod install 3. Перезагрузите мой Xcode

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