Не вдається виконати кодовий дизайн API Dropbox у Xcode 4.6.3: “об’єкт коду взагалі не підписаний”


76

У мене є програма для 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, запустити чисту збірку та очистити папку збірки.


Ця проблема все ще трапляється в XCode 8.2 Коли я видалив свої тести, тепер я отримую таку помилку: Не вдалося завантажити пакет "XXXX", оскільки його виконуваний файл не міг знайти.
UKDataGeek

Відповіді:


140

Думаю, я, можливо, це зрозумів. Я запускав 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більше не автоматично автоматично підписує ваш додаток.)


39
Так - мені вдалося знайти опцію "Інші прапорці підпису коду" в налаштуваннях збірки мого проекту Xcode, додати --deepдо неї, і збірка тепер успішно виконується. Ми побачимо, чи це пройде через Mac App Store.
Крейг Отіс

Я не вірю, що кодовий дизайн коли-небудь робив "глибоке" підписання раніше. Я постійно використовую кодовий дизайн у програмах, що містять сторонні бібліотеки, а кодовий дизайн підписує лише основний виконуваний файл (у Context / MacOS /), тоді як для інших файлів lib потрібні окремі виклики кодового дизайну.
Thomas Tempelmann,

1
@ThomasTempelmann Я майже недостатньо знаю, codesignщоб зрозуміти, що саме змінилося. Мені відомо лише те, що між 10.8 і 10.9 (або, можливо, Xcode 4 до Xcode 5, я одночасно модернізував обидва) поведінка змінилася , і саме це працювало для мене, щоб мої програми були успішно подані.
Крейг Отіс,

3
Для цікавих людей я досить давно використовую Xcode 5 на версії 10.8, але сьогодні зіткнувся з цією проблемою, коли спробував підписатись під 10.9.
Роб МакБрум,

2
Крейг Хокенберрі (посилання у відповідях нижче) пояснює, чому використовувати глибоке неправильно
Пол Бруно,

68

Як було підкреслено в інших відповідях, є зміна способу роботи підпису коду. Якщо ви встановили будь-який із Xcode 5 DP, тоді нові інструменти будуть використовуватися, навіть якщо ви використовуєте Xcode 4.6.X.

Все, що вам потрібно зробити на цьому етапі (у Xcode 4.6.X) - це взяти прапорець --deep, запропонований вище, і додати його до прапорів підпису коду (Ціль, Налаштування побудови), див. Зображення нижче.

Визначення глибокого підписання вбудованих платформ


3
мені допомогли. Думаю, це означає, що ви якось ручаєтесь за всі імпортовані бібліотеки, якими ви користуєтесь.
Том Андерсен

Згідно з коментарем до моєї відповіді вище, здається, що це може бути насправді проблемою, яка стосується OS 10.9, а не Xcode 5.
Крейг Отіс

3
Apple TechNote 2206 стверджує: "Хоча опцію --deep можна застосувати до операції підписання, це не рекомендується. Ми рекомендуємо підписувати код навиворіт на окремих етапах (як це робить Xcode автоматично). Підпис за допомогою --deep призначений для екстрених випадків лише ремонт та тимчасові коригування ".
Elise van Looij

12

Для мене ця проблема виникла після перетягування папки з назвою "ресурси" у моєму проекті. Після зміни назви на що-небудь інше (наприклад, "ресурс"), помилка зникла.


Це була моя проблема. Також зауважте, що звичайна файлова система mac не враховує регістр, тому, якщо у вас є папка чи файл із іменем, наприклад, „Ресурси” чи „РЕСУРСИ”, це також спричинить цю проблему.
Кевін,

Це також вирішило мою проблему. Єдине, що залишилося зробити, це видалити Resourceпапку з набору програм і перезапустити Xcode.app.
сенсація

У мене було кілька питань, але ця відповідь мені допомогла. Я побачив, що у мене є як синя папка з назвою Resources, так і жовта папка з назвою Resources. Я також побачив, що файл, на який він скаржився, був лише в одній із цих папок. У підсумку я повністю видалив синій (посилання, а не ті самі файли). Я також перейменував його на Res. Не зовсім впевнений, що це було необхідно (я це робив до того, як видалити синю папку), тому що у мене є інший проект, який має жовту папку з назвою Ресурси і там не має проблем.
Енді Вайнштейн,

Це спрацювало і на мене. Я хотів додати ключове слово на цю сторінку. Моя проблема була з нативним сценарієм. Тож насправді не x-code / pure ios dev. Сподіваємось, це допоможе і комусь іншому.
Девід Браун,

Для майбутніх читачів, якщо ТРЕБА включити папку з назвою Resources(як я це зробив), все, що вам потрібно зробити, - це додавати до проекту, Create Groupsзамість цього вибрати, Create Folder Referencesі ця помилка не виникне. (Тільки переконайтеся, що ваші цільові членства все ще встановлені для вказаних файлів після)
Альберт Реншоу

4

У мене була та сама проблема, але відповідь була проста: ідентифікатор підпису коду в моєму додатку був встановлений на "-", тому просто встановлення, що "Не підписувати код" мене виправило.

"-" здається налаштуванням за замовчуванням, коли Ви виконуєте певний набір дій, хоча я не можу сказати Вам, що це.


1
Це рішення добре підходить для запуску програми на симуляторі, але коли ми хочемо створити ipa або архівувати на той момент, це рішення не буде працювати з мого боку.
Bhavsang Jam

2

Це може допомогти сомоне:

Нарешті я вирішив рішення методом спроб і помилок. У моєму випадку у мене було ім’я папки, яке відповідало змінній “Product Name” у налаштуваннях збірки. Це також відповідало всій назві проекту! Тож я просто змінив одне поле. Я змінив "Налаштування збірки" -> "Назва продукту". Значення MySpecialApp було змінено на My-SpecialApp. Це було просто це! Потім я знову увійшов на портал розробників Apple і створив новий ідентифікатор програми та мобільні профілі забезпечення для розробки та розповсюдження, а все інше - це історія. Мої випуски тепер працюють при розгортанні за допомогою спеціального розподілу. Заключна примітка щодо цього. Це, безумовно, помилка, через яку Apple повинна або попередити користувача про те, що вони зробили щось не так, і ввімкнути якусь автоматизовану коригувальну дію. - Дивіться більше на:http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf


1
Дякуємо за відповідь @VBB, але, на жаль, назва продукту не змінювалася протягом останніх кількох років. (І я не можу змінити це зараз.)
Крейг Отіс,

0

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

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

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