macOS 中如何从脚本或可执行文件创建 App
macOS 中如何从脚本或可执行文件创建 App
2023年6月28日
摘要
众所周知,Launchpad 是 Mac 中集中存放各种应用程序的地方,由于 macOS 使用了 xxx.app(本质是一个文件夹) 这样的方式来组织每一个 App,因此常规的脚本和可执行文件并不能直接放入 /Applications/
目录被 Launchpad 识别。本文提供了一个方法,按照 macOS 的标准将脚本或可执行文件转化为一个简单的 App。
macOS App Bundle 结构
每一个 xxx.app 包都至少具有以下基本结构:
Test.app
└── Contents
├── Info.plist
└── MacOS
└── Test
以 Test.app 为例,其本身是一个文件夹,内部包含一个名为 Contents 的文件夹,这其中又包含一个名为 MacOS 的文件夹(用于存放实际的程序文件),和一个名为 Info.plist 的 XML 文档(用于储存应用的各种描述信息如名称及版本号)。在 MacOS 目录下,包含实际的脚本或可执行文件,且该文件必须与去除 .app 的包名完全一致,并具有可执行权限。
实现步骤
本文以一个极其简单的脚本为例:
#!/bin/sh
mkdir -p ~/Downloads/test_dir
该脚本将在用户的 Downloads 目录下新建一个名为 test_dir 的文件夹。
首先,在终端中创建 App 所需的三级目录结构:
mkdir -p Test.app/Contents/MacOS
其中,-p
选项代表递归创建每一级目录,如没有此选项,则一次只能创建一级目录。当然,如不想使用命令行,也可以在 Finder 中直接创建。
然后在 Test.app/Contents/MacOS 下创建名为 Test 的文件,没有后缀名!!!
nano Test
再将前文所述脚本内容粘贴进去,保存,并使用 chmod
命令赋予其可执行权限:
chmod a+x Test
最后,在 Contents 目录中新建 Info.plist 文件,将以下内容粘贴进去:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>Test</string>
<key>CFBundleGetInfoString</key>
<string>LONG VERSION DESCRIPTION TEXT</string>
<key>CFBundleIdentifier</key>
<string>com.apple.example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.6</string>
</dict>
</plist>
此描述文件中的各种 string 可以根据其上方的 key 进行更改。CFBundleExecutable
的值必须与可执行文件名称完全一致
完成此步骤后,此 App 便可以直接运行了。
添加图标
右键创建好的应用程序包,选择显示简介,将任意一张想要作为图标的图像拖进所示位置即可完成图标的添加:
最终结果如图: