После недавней отправки я получил следующую ошибку:
Неверная подпись - вложенный пакет приложений (FooBar.app/Contents/Frameworks/GData.framework) не подписан, подпись недействительна или не подписана сертификатом отправки Apple. Дополнительные сведения см. В Руководстве по подписи кода и изолированной программной среде приложений.
Недопустимая подпись - вложенный пакет приложений (FooBar.app/Contents/Frameworks/Growl.framework) не подписан, подпись недействительна или не подписана сертификатом отправки Apple. Дополнительные сведения см. В Руководстве по подписи кода и изолированной программной среде приложений.
Недействительная подпись - вложенный пакет приложений libcurl (FooBar.app/Contents/Frameworks/libcurl.framework) не подписан, подпись недействительна или не подписана сертификатом отправки Apple. Дополнительные сведения см. В Руководстве по подписи кода и изолированной программной среде приложений.
Итак, я подписал все пакеты фреймворков на Technote 2206 :
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData
Technote 2206 говорит:
Платформы подписи
Учитывая, что фреймворки являются связками, кажется логичным заключить, что вы можете подписать фреймворк напрямую. Тем не менее, это не так. Чтобы избежать проблем при подписании фреймворков, убедитесь, что вы подписываете конкретную версию, а не весь фреймворк:
# Это неправильный путь:
codeign -s моя-подписи-личность ../FooBarBaz.framework
# Это правильный путь:
codeign -s моя-подписи-личность ../FooBarBaz.framework/Versions/A
И когда я пытаюсь проверить результаты, мне кажется, что это хорошо:
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement
Ради интереса я попытался подписать пакет фреймворка напрямую, но он все равно был отклонен. Но это именно то, о чем говорится в документации.
Есть предположения, почему это будет считаться недействительным? Я использую тот же сертификат, который использую для кодовой подписи моего приложения - тот, который работал в прошлом.
Я только предполагаю, что это как-то связано с существующими списками (нужно ли мне владеть идентификаторами в Info.plists фреймворка?) Или правами - какие-либо предложения?