重命名导致 "You can't open the application "XXXXX" 因为它可能已损坏或不完整。"更新到 Xamarin.Mac 后
Rename causes "You can't open the application "XXXXX" because it may be damaged or incomplete." after updating to Xamarin.Mac
编辑: 事实证明这不是代码设计问题,所以我正在更新以帮助 运行 遇到同样问题的任何人。
将 MonoMac 应用程序更新到 Xamarin.Mac 后,如果我更改应用程序的名称,我会收到消息 "You can't open the application "XXXXX“因为它可能已损坏或不完整。”看起来这可能是一个代码设计问题,因为当我 运行 codesign --verify
我会得到 code object is not signed at all
.
原题:
我最近将 MonoMac 应用更新为 Xamarin.Mac。在此过程中,协同设计步骤中的某些内容似乎发生了变化。具体来说,现在当我重命名应用程序包时,我会从 GUI 和命令行工具中收到代码签名错误。似乎如果应用程序包不匹配 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 应用程序的比较来看,存在一些差异:
archived-expanded-entitlements.xcent
现在放在 Contents/Resources
Info.plist
被编译成一些二进制版本。
Contents/MonoBundle
现在包括 libMonoPosixHelper.dylib
,这显然需要签名。
PkgInfo
现在包含在 Contents
中,内容为 APPL????
为什么代码设计工具突然关心应用程序的名称?我怎样才能让它不关心名字?
事实证明,问题是从 MonoMac 到 Xamarin.Mac 的更新发生了变化,以某种方式将其设置为查找与应用程序包同名的可执行文件,因此如果您更改 Program.app
到 Program2.app
,OS X 会查找 运行 Contents/MacOS/Program2
而不是 Contents/MacOS/Program
。我仍然不确定为什么 MonoMac 版本在重命名时可以正常工作,但显然它有一些其他指向正确可执行文件的指针。
Xamarin.Mac的解决方法是添加
<key>CFBundleExecutable</key>
<string>[Original app name]</string>
到Info.plist
。这告诉 OS X 在哪里寻找可执行文件,并允许您毫无问题地重命名应用程序。
编辑: 事实证明这不是代码设计问题,所以我正在更新以帮助 运行 遇到同样问题的任何人。
将 MonoMac 应用程序更新到 Xamarin.Mac 后,如果我更改应用程序的名称,我会收到消息 "You can't open the application "XXXXX“因为它可能已损坏或不完整。”看起来这可能是一个代码设计问题,因为当我 运行 codesign --verify
我会得到 code object is not signed at all
.
原题:
我最近将 MonoMac 应用更新为 Xamarin.Mac。在此过程中,协同设计步骤中的某些内容似乎发生了变化。具体来说,现在当我重命名应用程序包时,我会从 GUI 和命令行工具中收到代码签名错误。似乎如果应用程序包不匹配 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 应用程序的比较来看,存在一些差异:
archived-expanded-entitlements.xcent
现在放在Contents/Resources
Info.plist
被编译成一些二进制版本。Contents/MonoBundle
现在包括libMonoPosixHelper.dylib
,这显然需要签名。PkgInfo
现在包含在Contents
中,内容为APPL????
为什么代码设计工具突然关心应用程序的名称?我怎样才能让它不关心名字?
事实证明,问题是从 MonoMac 到 Xamarin.Mac 的更新发生了变化,以某种方式将其设置为查找与应用程序包同名的可执行文件,因此如果您更改 Program.app
到 Program2.app
,OS X 会查找 运行 Contents/MacOS/Program2
而不是 Contents/MacOS/Program
。我仍然不确定为什么 MonoMac 版本在重命名时可以正常工作,但显然它有一些其他指向正确可执行文件的指针。
Xamarin.Mac的解决方法是添加
<key>CFBundleExecutable</key>
<string>[Original app name]</string>
到Info.plist
。这告诉 OS X 在哪里寻找可执行文件,并允许您毫无问题地重命名应用程序。