我有一个可执行的终端程序(在带有GHC的Haskell代码的MacOS上构建),当我在Finder中双击它时,它就会运行。我想把它放在我的网站上,人们可以通过双击从他们的Finder下载并运行它。
不知怎的,在这次交换中,文件丢失了"+x"位,因此当它被重新下载时,它就不能再通过双击来运行了。我仍然可以运行它,但我必须先执行"chmod+x"。我该怎么做才能使下载的文件在默认情况下是可执行的?我必须将它打包在".app"文件中吗?现在是".command"。
无论它是否是应用程序捆绑包的一部分,可执行文件本身都需要是…可执行文件。为了确保可执行性,您应该将其放在zip或dmg文件中,该文件将保留其"可执行"标志。
如果你想把它做成一个应用捆绑包,有一个简单的方法。如果可执行文件名为PROGRAMNAME,那么只需将其放在名为PROGRAMNAME.app的文件夹中。双击即可运行该文件。
如果你想创建一个更合适的应用程序捆绑包,请使用这个:
APP_NAME='My Awesome App.app'
EXE_NAME='PROGRAMNAME'
mkdir -p "$APP_NAME"/Contents
defaults write "`pwd`"/"$APP_NAME"/Contents/Info CFBundleExecutable "$EXE_NAME"
mkdir "$APP_NAME"/Contents/MacOS
cp "$EXE_NAME" "$APP_NAME"/Contents/MacOS
chmod a+x "$APP_NAME"/Contents/MacOS/"$EXE_NAME"
应用程序捆绑包不会显示终端输出或报告错误,因此如果需要,您应该将其保留为原始可执行文件。此外,以上述方式制作的简单应用程序将没有GUI,并且看起来没有响应,并且在运行完成后将退出。
此外,如果您收到以下消息,可能是因为可执行文件太短(添加更多字符)或隔离限制(尝试编辑可执行文件,并使用TextEdit等应用程序保存以使其可信)。