【问题标题】:Rename causes "You can't open the application "XXXXX" because it may be damaged or incomplete." after updating to Xamarin.Mac重命名导致“您无法打开应用程序“XXXXX”,因为它可能已损坏或不完整。”更新到 Xamarin.Mac 后
【发布时间】:2015-05-22 02:53:02
【问题描述】:

编辑:原来这不是代码设计问题,所以我正在更新以帮助遇到同样问题的任何人。

将 MonoMac 应用程序更新到 Xamarin.Mac 后,如果我更改了应用程序的名称,我会收到消息“您无法打开应用程序“XXXXX”,因为它可能已损坏或不完整。”看起来这可能是一个代码设计问题,因为当我运行 codesign --verify 时,我会得到 code object is not signed at all

原问题:

我最近将 MonoMac 应用程序更新为 Xamarin.Mac。在此过程中,协同设计步骤中的某些内容似乎发生了变化。具体来说,现在当我重命名应用程序包时,我会收到来自 GUI 和命令行工具的代码签名错误。如果 app bundle 与CFBundleName 不匹配,似乎签名无效。

例如,如果我运行codesign --verify --deep -vvvv Program.app(其中Program 匹配CFBundleName,我得到

Program.app: valid on disk
Program.app: satisfies its Designated Requirement

但是,如果我将名称更改为 Program2.app 并运行 codesign --verify --deep -vvvv Program2.app,我会得到:

Program2.app: code object is not signed at all

把它移回去,我又得到了一个成功的签名。

从 MonoMac 应用与 Xamarin.Mac 应用的对比来看,存在一些差异:

  1. archived-expanded-entitlements.xcent 现在放在 Contents/Resources
  2. Info.plist 被编译成一些二进制版本。
  3. Contents/MonoBundle 现在包括 libMonoPosixHelper.dylib,显然需要签名。
  4. PkgInfo 现在包含在 Contents 中,内容为 APPL????

为什么代码设计工具会突然关心应用程序的名称?我怎样才能让它不在乎名字?

【问题讨论】:

    标签: macos xamarin monomac info.plist xamarin.mac


    【解决方案1】:

    事实证明,问题在于从 MonoMac 到 Xamarin.Mac 的更新发生了变化,它以某种方式将其设置为查找与应用程序包命名相同的可执行文件,因此如果您将 Program.app 更改为 @987654322 @,OS X 会寻找运行 Contents/MacOS/Program2 而不是 Contents/MacOS/Program。我仍然不确定为什么 MonoMac 版本在重命名时可以工作,但显然它还有一些指向正确可执行文件的其他指针。

    Xamarin.Mac 的解决方案是添加

    <key>CFBundleExecutable</key>
    <string>[Original app name]</string>
    

    Info.plist。这告诉 OS X 在哪里寻找可执行文件,并允许您重命名应用程序而不会出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多