我正在使用 Mono 框架将 .NET 应用程序移植到 OS X。该应用程序运行良好,我们已经完成了除了打包之外的所有工作。我在捆绑包中打包了一个独立的 Mono 构建以避免依赖关系,并使用这个工具来完成这项工作:https ://github.com/OutOfOrder/MonoKickstart
我们使用的bundle结构是这样的:
OurApp.app
\-Contents
+-Info.plist
+-MacOS
| +-osx - native libraries for osx
| +-mono - mono config files
| \ ... - the OS X kickstart binaries, the .exe file, C# .dlls
\-Resources/
\-icon.icns
当 OS X 的 Gatekeeper 功能关闭时,该捆绑包运行良好,但是当尝试对其进行签名以使其始终运行时,我遇到了问题......
$ codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --deep --verbose OurApp.app
OurApp.app: bundle format unrecognized, invalid, or unsuitable
In subcomponent: OurApp.app/Contents/MacOS/mono/4.0
好的,我将暂时删除 mono 目录,看看它是否继续:
$ codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --deep --verbose OurApp.app
OurApp.app: signed bundle with Mach-O universal (i386) [org.ourcompany.ourapp]
成功!或者我认为,但是当我尝试运行该应用程序时,它仍然说它仍然被 Gatekeeper 阻止。当我跑步时
spctl -a -v OurApp.app
OurApp.app/: rejected
那么给了什么?它说它签署了捆绑包,并使用 --deep 参数,如果我理解正确的话,它应该已经签署了所有库等。我应该怎么做才能完成这项工作?
更新:
试图用这个一一签署文件。
codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --verbose OurAppExecutable.bin
但它拒绝这样做,因为“子组件”(即使我没有使用--deep)。
我终于通过将除实际二进制文件之外的所有其他内容移动到 Resources 文件夹,然后对二进制文件和应用程序包进行签名来对其进行签名。
但是,它说:
spctl -a -v OurApp.app
OurApp.app/: rejected
source=No Matching Rule
任何进一步的见解?