MAC OS X El Capitan 上的单声道:LSOpenURLsWithRole
Mono on MAC OS X El Capitan: LSOpenURLsWithRole
我有一个 .NET 软件,它在 Linux 和 MAC 上都在 Mono 上 运行。该软件在 OSX Lion 下的 Mono 3.6.0 上使用 Macpack 打包为 .app,并使用 PackageMaker 创建了一个安装程序。它在所有新版本的 OSX 上运行良好,直到 El Capitan 触发以下错误:
LSOpenURLsWithRole() failed with error -10810 for the file .../Applications/MyApp.app
我已经将开发文件移到 El Capitan 上,并设法用 Macpack 从 Mono 4.0.4.4 打包它。使用
时似乎没有显示该错误
open -a MyApp.app
现在唯一的问题是双击不启动。该软件由安装程序安装在 /Applications 中。它可以从控制台使用 open 命令正常启动,但不能双击。有没有一种方法可以通过从控制台模拟双击来查看错误或其他内容?
PS。同样在 El Capitan 上,似乎唯一可用的 Mono 框架是最新的 4.0.4.4 或为 El Capitan 设计的 4.2.1。二进制文件的新位置在 /usr/local/bin 而不是 /usr/bin 中,这仅在安装前存在 /usr/local/bin 时有效,否则将无法识别单声道命令。
谢谢
LSOpenURLsWithRole() failed with error -10810 for the file
.../Applications/MyApp.app
听起来可能是权限问题,但 -10810 可能意味着很多事情,而且我从未见过对原始错误编号的明确响应(自 PowerPC 时代以来就存在)。已指向权限、外部驱动器访问和实际启动服务守护程序。
- 重新启动(或手动终止并重新生成这些服务,包括 Finder/Spotlight)
- ls -l /Application/YourApp.app 并检查它是否被标记为可执行文件
- ls -l /Application/YourApp.app/Contents/MacOS/YourApp 并检查是否标记为可执行文件
- 打开 Console.app 并再次尝试双击您的应用并查看 warnings/errors 已记录的内容。
- ...
搬到埃尔卡皮坦?那么你需要 Mono 版本 4.2.x 或 4.0.4.4.
来自 Mono 邮件列表:
What is the difference between the latest Mono 4.0.4.4 package for Mac
and the 4.2.1 El Capitan Preview? The changelog of 4.0.4.4 includes
“33585: El Capitan System Integrity Protection support.” so i suppose
that the 4.0.4.4 also works on El Capitan?.
Miguel de Icaza 的回复:
One is based on Mono 4.0 series, with minimal changes just to enable
the support on El Capitan; The 4.2 has the same changes, on top of the
latest Mono 4.2, available on Alpha and the release candidate.
参考:http://sushihangover.github.io/osx-10-dot-11-el-capitan-which-mono-version/
同样的问题(El Capitan)。我就是这样解决的(Mono 4.2.1)
1) 创建一个空脚本并替换由 macpack 创建的脚本(例如:KeePass.app/Contents/MacOS/KeePass)
2) 为单声道和 exe 文件使用完整路径
#!/bin/sh
DIR=$(cd "$(dirname "[=10=]")"; pwd)
/usr/local/bin/mono $DIR/../Resources/KeePass.exe
我认为这在某种程度上与系统完整性保护 (csrutil) 有关,但不确定。
由于尚无修复程序,您可以使用此临时修复程序。使用 macpack 打包后,打开应用程序文件夹并转到 /Contents/MacOS 并编辑启动脚本中的最后一个 if else:
MONO_PATH="/usr/bin/mono"
cd "$APP_PATH/Contents/Resources"
if [ "$X11_MODE" -eq "1" ]; then
open-x11 "$APP_NAME"
else
if [ -f "/usr/local/bin/mono" ]; then MONO_PATH="/usr/local/bin/mono" ; fi
"$MONO_PATH" "$ASSEMBLY"
fi
我有一个 .NET 软件,它在 Linux 和 MAC 上都在 Mono 上 运行。该软件在 OSX Lion 下的 Mono 3.6.0 上使用 Macpack 打包为 .app,并使用 PackageMaker 创建了一个安装程序。它在所有新版本的 OSX 上运行良好,直到 El Capitan 触发以下错误:
LSOpenURLsWithRole() failed with error -10810 for the file .../Applications/MyApp.app
我已经将开发文件移到 El Capitan 上,并设法用 Macpack 从 Mono 4.0.4.4 打包它。使用
时似乎没有显示该错误open -a MyApp.app
现在唯一的问题是双击不启动。该软件由安装程序安装在 /Applications 中。它可以从控制台使用 open 命令正常启动,但不能双击。有没有一种方法可以通过从控制台模拟双击来查看错误或其他内容?
PS。同样在 El Capitan 上,似乎唯一可用的 Mono 框架是最新的 4.0.4.4 或为 El Capitan 设计的 4.2.1。二进制文件的新位置在 /usr/local/bin 而不是 /usr/bin 中,这仅在安装前存在 /usr/local/bin 时有效,否则将无法识别单声道命令。
谢谢
LSOpenURLsWithRole() failed with error -10810 for the file .../Applications/MyApp.app
听起来可能是权限问题,但 -10810 可能意味着很多事情,而且我从未见过对原始错误编号的明确响应(自 PowerPC 时代以来就存在)。已指向权限、外部驱动器访问和实际启动服务守护程序。
- 重新启动(或手动终止并重新生成这些服务,包括 Finder/Spotlight)
- ls -l /Application/YourApp.app 并检查它是否被标记为可执行文件
- ls -l /Application/YourApp.app/Contents/MacOS/YourApp 并检查是否标记为可执行文件
- 打开 Console.app 并再次尝试双击您的应用并查看 warnings/errors 已记录的内容。
- ...
搬到埃尔卡皮坦?那么你需要 Mono 版本 4.2.x 或 4.0.4.4.
来自 Mono 邮件列表:
What is the difference between the latest Mono 4.0.4.4 package for Mac and the 4.2.1 El Capitan Preview? The changelog of 4.0.4.4 includes “33585: El Capitan System Integrity Protection support.” so i suppose that the 4.0.4.4 also works on El Capitan?.
Miguel de Icaza 的回复:
One is based on Mono 4.0 series, with minimal changes just to enable the support on El Capitan; The 4.2 has the same changes, on top of the latest Mono 4.2, available on Alpha and the release candidate.
参考:http://sushihangover.github.io/osx-10-dot-11-el-capitan-which-mono-version/
同样的问题(El Capitan)。我就是这样解决的(Mono 4.2.1)
1) 创建一个空脚本并替换由 macpack 创建的脚本(例如:KeePass.app/Contents/MacOS/KeePass)
2) 为单声道和 exe 文件使用完整路径
#!/bin/sh
DIR=$(cd "$(dirname "[=10=]")"; pwd)
/usr/local/bin/mono $DIR/../Resources/KeePass.exe
我认为这在某种程度上与系统完整性保护 (csrutil) 有关,但不确定。
由于尚无修复程序,您可以使用此临时修复程序。使用 macpack 打包后,打开应用程序文件夹并转到 /Contents/MacOS 并编辑启动脚本中的最后一个 if else:
MONO_PATH="/usr/bin/mono"
cd "$APP_PATH/Contents/Resources"
if [ "$X11_MODE" -eq "1" ]; then
open-x11 "$APP_NAME"
else
if [ -f "/usr/local/bin/mono" ]; then MONO_PATH="/usr/local/bin/mono" ; fi
"$MONO_PATH" "$ASSEMBLY"
fi