Я только что провел день, работая над ошибкой «Неизвестный, недопустимый или неподходящий» формат пакета при кодировании подписи фреймворка. В моем случае я использую XCode 4.6.1, и я пытался кодировать подпись фреймворков Qt.
Во-первых, обратите внимание, что в документации Apple ( TN2206 ) прямо указывается, что необходимо подписывать код версионного каталога платформы, а не исполняемого файла библиотеки.
Это обсуждается далее здесь:
Как вы кодируете комплекты фреймворков для Mac App Store?
Итак, исходя из этого, командная строка в оригинальном вопросе Эша верна. Однако я получил ту же ошибку.
Я работал с этой командной строкой. Вот что я должен был сделать:
Убедитесь, что вы используете правильную версию CODESIGN_ALLOCATE. Это обсуждается во многих ответах здесь: Недопустимый или неподходящий формат файла объекта iPhone Codesign Если вы можете заставить XCode подписать приложение, то вы можете найти путь CODESIGN_ALLOCATE в журнале сборки.
Убедитесь, что версионный каталог (./Growl.framework/Versions/A в приведенном выше вопросе) содержит Resources / Info.plist и что существует ссылка из Versions / Current -> Versions / A и что есть ссылка Ресурсы -> Версии / Текущие / Ресурсы на верхнем уровне пакета фреймворка. Я обнаружил, что не могу подписать каталог версионного фреймворка без присутствия Versions / A / Resources / Info.plist. Вы можете прочитать больше о правильной структуре фреймворка здесь и здесь , или просто взглянуть на некоторые системные фреймворки, чтобы понять, как они должны быть структурированы.
В дополнение к предыдущему пункту, убедитесь, что ваши символические ссылки в пакете фреймворка правильно структурированы (текущие ссылки на номерную версию, ссылки верхнего уровня на текущий), как показано в документации Apple . Это не повлияет на подписание кода, но ваше приложение будет отклонено, если вы не поймете это правильно.
Убедитесь, что для CFBundleExecutable задано правильное имя (имя исполняемого файла) в Info.plist вашей платформы