Codesign: Что такое распечатанное содержимое?

Я только что обновился до XCode 6 и попытался создать приложение для Mac, подписанное разработчиком. Однако теперь я получаю следующую ошибку кода:

unsealed contents present in the root directory of an embedded framework

Это относится к Dropbox.framework, который я использую. Очевидно, что это невозможно было подписать. Что означает ошибка? Что не так?

Ответы

Ответ 1

Посмотрите OS X Code Signing In Depth

Начиная с OS X версии 10.9.5, будут изменения в том, как OS X распознает подписанные приложения

Структура вашего пакета в соответствии с ожиданиями для OS X версии 10.9 или новее:

  • Включать только подписанный код в каталогах, которые должны содержать подписанные код.
  • Включать только ресурсы в каталогах, которые должны содержать ресурсы.
  • Не используйте флаг -resource-rules или ResourceRules.plist. Oни были устарели и будут отклонены.

Ответ 2

Проблема заключается в файле version.txt, который находится в Dropbox.framework. Хотя это полезно для того, чтобы узнать, какая версия является фреймворком, кажется, что больше не подходит для кодовой кодировки.

Когда я удалил файл, все снова работало нормально.

Ответ 3

У нас была такая же проблема в течение нескольких часов, поскольку я попытался адаптировать до Йосемити пакет .framework для Yosemite. В конце концов, проблема заключалась в символических ссылках, которые я сделал, а не только в файлах в каталоге.

Первоначально пакет имел сломанную символическую ссылку в корневом каталоге. Я исправил его.

Симлинк я добавил:

Headers -> Versions/Current/Headers/

Что нужно:

Headers -> Versions/Current/Headers

Эта косая черта - это убийца.

Обратите внимание, что это бит меня дважды в двух разных местах: у меня также был

Current -> 1.8.0/

где мне нужно

Current -> 1.8.0

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

Ответ 4

Сегодня я столкнулся с подобной проблемой... моя ошибка была "незапечатанным содержимым, присутствующим в корневом пакете". Исправить для меня было удалить пользовательский значок, который у меня был в моем приложении. AppName.app/Icon? был каким-то образом испорчен...

Ответ 5

Я исследовал это некоторое время сегодня, и ни одно из предложений, которые я нашел, не помогло, моя sdl_mixer.framework имела пять встроенных фреймворков, которые я не мог пройти через iTunesConnect. Мои решения заключались в том, чтобы удалить три из них, которые мне действительно не нужны, а два других были добавлены в мой проект как автономные рамки, а не встроены в sdl_mixer. Надеюсь, это помогает кому-то, я потратил на это несколько часов.

Ответ 6

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

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

Затем я попал в другой случай. Я подписываю свой код как часть процесса публикации, переписывая каждый исполняемый файл и фреймворк. Но Xcode также подписывает пакет, и оказывается, что он уходил из-за папок _CodeSignature. Итак, перед подписанием каждого из исполняемых файлов и фреймворков, а затем пакета, я предварительно удаляю Xcode сгенерированные папки _CodeSignature с чем-то вроде:

find MyApp.app -name _CodeSignature -type d -exec rm -rf {} +

Надеюсь, эта информация, полученная с трудом, спасет кого-то в один прекрасный день.

Ответ 7

У меня была такая же проблема, и для работы было удаление содержимого папки DerivedData. Xcode не говорит, какой ресурс вызывает проблему, поэтому я перестроил все с нуля. Чистота тоже не работала.

Ответ 8

В моем случае я пытался подписать приложение с некоторыми старыми фреймворками внутри. Ни одно из этих предложений не помогло. Оказалось, что мне пришлось удалить файл PkgInfo изнутри рамки, чтобы убрать это сообщение.