Как вы кодируете пакеты фреймворка для Mac App Store?

После недавней отправки я получил следующую ошибку:

Недействительная подпись - вложенный пакет приложений (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 говорит:

Signing Frameworks

Поскольку фреймворки представляют собой пакеты, логично было бы заключить, что вы можете подписать каркас напрямую. Тем не менее, это не так.Чтобы избежать проблем при подписании фреймворков, убедитесь, что вы подписываете конкретную версию, а не всю фреймворк:

# Это неправильный способ:

codeign -s my-signed-identity ../FooBarBaz.framework

# Это правильный путь:

codeign -s my-signed-identity ../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 фреймворка?) Или правами - любыми предложениями?

80
задан csexton 9 October 2011 в 01:41
поделиться