1

我正在使用 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

任何进一步的见解?

4

2 回答 2

0

我不确定 --deep 是否应该工作,但这不是我们在 Xamarin Studio 中对 Xamarin.Mac 项目进行代码设计时使用的。我们所做的是单独对每个原生库进行协同设计,然后对应用程序包本身进行协同设计。

希望有帮助。

更新:这可能是问题:

OurApp.app: bundle format unrecognized, invalid, or unsuitable
In subcomponent: OurApp.app/Contents/MacOS/mono/4.0

问题可能是 MonoKickStart 没有生成正确的 Mac 可执行文件?

于 2014-02-13T14:20:34.977 回答
-1
于 2014-04-20T02:09:31.100 回答