最近提交后,我收到以下错误:
无效签名 - 嵌套应用程序包 (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
技术说明 2206 说:
签名框架
将框架视为捆绑包,因此得出可以直接签署框架的结论似乎是合乎逻辑的。然而,这种情况并非如此。为避免在签署框架时出现问题,请确保签署特定版本而不是整个框架:
# 这是错误的方式:
codesign -s my-signing-identity ../FooBarBaz.framework
# 这是正确的方法:
codesign -s my-signing-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
为了好玩,我确实尝试直接签署框架包,但仍然被拒绝。但这正是文档所说的不应该做的事情。
任何猜测为什么会被认为是无效的?我使用的证书与我用于对我的应用程序进行代码签名的证书相同——过去曾使用过的证书。
我唯一的猜测是与现有的 plists (我需要拥有框架的 Info.plists 中的标识符吗?)或权利 - 有什么建议吗?