Mac OS X 10.6
我创建了一个非常简单的应用程序,它只是一个 shell 脚本的包装器(这样我就可以在应用程序选择器中选择此脚本,例如启动应用程序)。我尝试启动它,昨天它成功了,但今天我更改了可执行脚本的内容和名称(使用在终端中启动的 shell 脚本中完美运行的内容),它只会显示一个带有 Finder 图标的对话框,提示
无法打开该应用程序,因为它不受此类 Mac 的支持。
我恢复了之前的脚本(内容/名称),但仍然出现错误!从头开始重新打包应用程序或完全更改包标识符时也会出现同样的情况……
如果我尝试使用终端打开它open My.app
,我会得到
无法打开该应用程序,因为它的可执行格式不正确。
但是当我直接执行时Contents/MacOS/Script
,它总是可以正常工作(包含两个内容)。此外,它在 Finder 中显示正确的图标和元信息(所以我猜 Info.plist 是可以理解的)。
该应用程序的文件树是:
Contents/
Info.plist
MacOS/
Script (executable bit set, works when launched directly)
PkgInfo
Resources/
AppIcon.icns
以下是Info.plist
内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>Script</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
<key>CFBundleIdentifier</key>
<string>asdf.ScriptApp</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>My script</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>10.4</string>
</dict>
</plist>
并且PkgInfo
文件仅包含。我用简单的和(加标题)APPL????
测试了脚本。echo "ok"
echo "ok" >/tmp/test
#!/bin/sh
我的问题是:
- 是否存在某种针对应用程序的有效性缓存?基于什么?如何刷新它?
- 此消息来自哪里?我尝试用 Google 搜索,但我得到的只是一页讨论 32/64 位 Java 的页面……
答案1
这真是个难题,但我在谷歌上找不到另一个有人问过并回答过这个问题的地方。我终于搞明白了(现在是 10.7):
shell 脚本文件必须以“#!”开头,而且奇怪的是:它必须至少有 28 个字符长。
如果你输入一个 27 个字符的脚本,然后触摸该包,图标将变为一个带有一条线的应用程序。在脚本中添加一个字符,然后再次触摸它,然后 BOOM,它就成功了。
很奇怪不是吗?
答案2
您可以使用单个运行 Shell 脚本行动。
答案3
shell 脚本本身可能存在问题。这种情况通常发生在 PPC / Intel 平台之间或反之亦然。
答案4
我曾成功构建过可执行文件为 shell 脚本的应用程序。然而,它们总是进入exec
正常的 GUI 进程(或非典型进程,如 Java 程序);也许这会产生影响。
另外,您是否控制了环境变量的差异?从终端运行时,您会获得点文件的效果(.profile
、、等),但 GUI 启动不使用任何这些。(如果您愿意,可以使用(更改后重新登录).bash_profile
修改.bashrc
该环境。)~/.MacOSX/environment.plist