
通过三个简单的步骤在MacOS上添加自定义菜单栏程序:
您可以使用Get Plugins...菜单项从Awesome Bitbar存储库中获得插件,或者在Swiftbar本身中获取插件。
从github发行下载
或安装与自制的
brew install swiftbar
在Macos Catalina(10.15)及以上运行。
SwiftBar/SwiftBar.xcodeprojSwiftbar与插件存储库捆绑在一起。您可以在Swiftbar→获取插件...

如果要添加删除插件或对存储库内容有其他疑问,请参考此问题。
要将新插件添加到Swiftbar中,您需要按照所需的格式创建可执行脚本(请参见下文),然后将其放入Plugin Folder中。
通过第一次启动,Swiftbar将要求您设置Plugin Folder 。 Swiftbar将尝试将此文件夹中的每个文件作为插件导入。
重要的:
.swiftbarignore文件得到支持,您可以使用它来将文件排除在导入插件之外。您可以通过预处理隐藏文件夹.或使用此命令chflags hidden <folder name> 。
插件文件必须采用以下格式:
{name}.{time}.{ext}
持续时间修饰符:
示例文件名: date.1m.sh
无论您是使用插件存储库中的插件还是创建自己的插件,最初都不会以预定的顺序出现在菜单栏中。但是,您可以通过按住CMD并拖动它们来重新排序它们的出现(有时也可以在菜单栏中的其他非SwiftBar图标上使用此过程)。除非您更改插件文件的名称,否则插件位置将被记住,在这种情况下,需要再次重新定位。
插件是您选择的语言中的可执行脚本。当Swiftbar检测到Plugin Folder中的新文件时,请在需要时可执行并运行它。
脚本应以所需格式产生输出( STDOUT )(请参见下一章)。脚本错误应重定向到STDERR 。
插件API是从Bitbar XBAR采用的,这意味着Swiftbar可以运行任何现有的BitBar XBAR插件。
解析插件输出时,SwiftBar识别以下块:
Header是先前的一切--- 。每个---在第一个之后,将被解释为菜单分离器。您的标题中有一条或多条线。
最简单的插件看起来像:
echo " This is Menu Title "如果提供多个标题,则提供的标题将在菜单栏中循环,并在下拉菜单中显示:
echo " This is a primary Menu Title "
echo " This is a secondary Menu Title "
echo " This is a n-th Menu Title "
echo " --- "
echo " This is not a Menu Title, this will be shown in the drop-down menu only "标题和车身的脚本输出都按线( n )拆分。每行必须遵循此格式:
<Item Title> | [param = ...]
在哪里:
=的键值。使用|将参数与标题分开。 文本格式:
| 范围 | 价值 | 描述 |
|---|---|---|
color | CSS颜色或十六进制, light_color,dark_color | 设置项目文本颜色。如果仅提供一种颜色,则将其用于浅色和黑暗外观。 |
sfcolor | CSS颜色或十六进制, light_color,dark_color | 设置SF符号颜色。如果仅提供一种颜色,则将其用于浅色和黑暗外观。如果您名声多个SF符号,您可以通过添加索引来提供不同的颜色,例如sfcolor2 |
font | MacOS字体名称 | 设置要在项目文本中使用的字体名称 |
size | 数字 | 设置项目文本大小 |
md | 真的 | 在菜单标题中启用Markdown支持**bold**和*italic* |
sfsize | 数字 | 嵌入文本中的SF符号图像的设置大小 |
length | 数字 | 将项目文本修剪为提供数量的字符。完整标题将显示在工具提示中。 |
trim | 真的 | 修剪空格字符 |
ansi | 真的 | 支持ANSI颜色代码的支持。与: symbolize |
emojize | 错误的 | 禁用github风格表情符号的解析(例如:mushroom:进入?)。要求:设置为true时symbolize=false 。 |
symbolize | 错误的 | 禁用SF符号的解析(例如, "SF Symbols Test :sun.max: :cloud.fill: :gamecontroller.fill: :bookmark: :sun.dust:" → )。总是在卡塔琳娜上False 。 |
视觉效果:
| 范围 | 价值 | 描述 |
|---|---|---|
dropdown | 错误的 | 仅适用于Header中的项目。设置为false时,将不会在下拉菜单中显示项目,但会在菜单栏中循环。 |
alternate | 真的 | 标记一条线作为前一个行的替代方案,用于在下拉列表中按下选项键( ⌥ )时。 |
image | base64, light_image,dark_image中编码的图像 | 设置项目的图像。如果仅提供一张图像,则将其用于浅色和黑暗外观。 |
templateImage | base64中编码的图像 | 与image相同,但图像是模板图像。模板图像由黑色和透明颜色(以及Alpha通道)组成。模板图像不打算用作独立图像,通常与其他内容混合以创建所需的最终外观。 |
sfimage | sfsymbol名称 | 从SF符号设置项目图像。仅在Big Sur及以上可用。 |
sfconfig | SFSymbol配置 | 为sfimage配置渲染模式。接受一个编码为base64的JSON,示例JSON {"renderingMode":"Palette", "colors":["red","blue"], "scale": "large", "weight": "bold"} 。原始问题#354 |
checked | 真的 | 在项目的前面设置一个符号。 |
tooltip | 文本 | 为项目设置工具提示。 |
webview | 真的 | 目前提供的HREF作为网络浏览量,而不是标准菜单栏菜单 |
webvieww | 数字 | 设置像素中的WebView宽度 |
webviewh | 数字 | 设置像素的WebView高度 |
行动:
| 范围 | 价值 | 描述 |
|---|---|---|
refresh | 真的 | 插件脚本将在项目上执行 |
href | 绝对URL | 单击项目时设置一个要打开的URL |
bash | 绝对文件路径 | 可执行的脚本以在shell中运行 |
terminal | 错误的 | bash脚本将在后台运行,而不是启动终端 |
params | param0= , param1= , param10= ... | bash脚本的参数 |
shortcut | CMD+选项+T | 分配给项目的热键。如果项目在标题中,HotKey将显示菜单;否则,Hotkey将启动相关的动作。 |
运行插件时,Swiftbar设置以下环境变量:
| 多变的 | 价值 |
|---|---|
SWIFTBAR | 1 |
SWIFTBAR_VERSION | 运行的Swiftbar版本号( xyz格式) |
SWIFTBAR_BUILD | 运行的SwiftBar构建号码( CFBundleVersion ) |
SWIFTBAR_PLUGINS_PATH | Plugin Folder的路径 |
SWIFTBAR_PLUGIN_PATH | 运行插件的路径 |
SWIFTBAR_PLUGIN_CACHE_PATH | 缓存到数据文件夹,每个插件的个人 |
SWIFTBAR_PLUGIN_DATA_PATH | 数据文件夹的路径,每个插件的个人 |
SWIFTBAR_PLUGIN_REFRESH_REASON | 插件刷新原因触发 |
SWIFTBAR_LAUNCH_TIME | Swiftbar启动日期和时间,ISO8601 |
OS_APPEARANCE | 当前的MacOS外观( Light或Dark ) |
OS_VERSION_MAJOR | MacOS版本的第一11 (例如,MacOS 11.0.1) |
OS_VERSION_MINOR | MacOS版本的第二部分( 0 ,MacOS 11.0.1) |
OS_VERSION_PATCH | MacOS版本的1部分(例如,MacOS 11.0.1) |
OS_LAST_SLEEP_TIME | 最后一次睡眠日期和时间,ISO8601。如果Swiftbar启动以来,如果OS不入睡,则空。 |
OS_LAST_WAKE_TIME | 从睡眠日期和时间开始的最后一次操作系统醒来,ISO8601。如果Swiftbar启动以来,如果OS不入睡,则空。 |
建议将元数据包括在插件脚本中。元数据在Swiftbar的Aws插件屏幕中使用。 Swiftbar采用Bitbar Xbar建议的元数据格式:
# <xbar.title>Title goes here</xbar.title>
# <xbar.version>v1.0</xbar.version>
# <xbar.author>Your Name</xbar.author>
# <xbar.author.github>your-github-username</xbar.author.github>
# <xbar.desc>Short description of what your plugin does.</xbar.desc>
# <xbar.image>http://www.hosted-somewhere/pluginimage</xbar.image>
# <xbar.dependencies>python,ruby,node</xbar.dependencies>
# <xbar.abouturl>http://url-to-about.com/</xbar.abouturl>
# <xbar.droptypes>Supported UTI's for dropping things on menu bar</xbar.droptypes>
Swiftbar支持这些可选的元数据标志以隐藏默认菜单项:
# <swiftbar.hideAbout>true</swiftbar.hideAbout>
# <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
# <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
# <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
# <swiftbar.hideSwiftBar>true</swiftbar.hideSwiftBar>
选项+单击将显示所有项目: 
一个特殊标签可以用作插件名称中定义的刷新间隔的替代品,Value采用Cron语法:
<swiftbar.schedule>01,16,31,46 * * * *</swiftbar.schedule>
您可以使用Sepparator |配置多个计划:
<swiftbar.schedule>1 * * * *|2 * * * *</swiftbar.schedule>
<swiftbar.refreshOnOpen>true</swiftbar.refreshOnOpen> - 刷新插件单击,然后介绍菜单<swiftbar.runInBash>false</swiftbar.runInBash> - 运行时不会包装bash插件<swiftbar.type>streamable</swiftbar.type> - 标记插件<swiftbar.environment>[var1=default value, var2=default value, ... ]</swiftbar.environment> - 此变量将在插件的环境中传递,随后版本,SwiftBar将为这些变量提供更改值。<swiftbar.persistentWebView>true</swiftbar.persistentWebView> - 使WebView持久,因此它不会在每个菜单栏上重新加载单击对于二进制插件,可以添加元数据作为扩展文件属性:
xattr -w "com.ameba.SwiftBar" "$(cat metadata.txt | base64)" <plugin_file>
对于标准类型的插件,Swiftbar期望插件执行是有限的,即,插件运行并带有输出到STDOUT:
可选地,可以按可重复的时间表运行标准插件,该插件在插件的文件名或schedule元数据属性中配置。
此插件类型针对想要使用快捷方式应用程序创建菜单栏项目的人。插件API与标准几乎相同。创建一个以所需格式输出文本的快捷方式,在Swiftbar设置的“快捷插件”部分中选择此快捷方式,您可以使用。
对于快捷插件,Swiftbar提供了一个方便的UI来配置刷新时间表。
示例快捷方式:
短暂的插件通过运行Swiftbar的快捷键操作或调用URL方案来按需创建菜单栏项目。插件API与标准几乎相同。
这是URL方案的参数:
捷径动作是相当自我解释的。
该插件类型最适合通知或其他临时菜单栏项目。
Swiftbar为每个流插件启动了一个单独的过程,该过程无限期运行,直到Swiftbar关闭或失败为止。仅在处理传入事件时,才应该使用流媒体插件;一个示例可以是金融市场信息从Websocket或CPU加载信息中读取的远程计算机信息。
为了让Swiftbar知道何时更新菜单栏项目,Streamable插件必须使用特殊的行分隔机~~~ 。 Swiftbar将重置此分离器的每次出现的菜单项。
在下面的示例中,Swiftbar将在菜单栏中显示“测试1”,持续3秒钟,然后无限期地显示“测试2”。
#!/bin/bash
#<swiftbar.type>streamable</swiftbar.type>
echo "Test 1"
echo "---"
echo "Test 2"
echo "Test 3"
sleep 3
echo "~~~"
sleep 5
echo "~~~"
echo "Test 2"
您可以使用特殊的元数据属性<swiftbar.type>streamable</swiftbar.type>将插件标记为流插入
一些注释:
name可以相同。如果您的插件的filepath是~/Documents/SwiftBar/myplugin.1m.sh ,则名称为myplugin和ID myplugin.1m.shopen(1)触发方案URL时,请使用-g防止命令从活动应用中窃取焦点。| 端点 | 范围 | 描述 | 例子 |
|---|---|---|---|
| 刷新allplugins | 没有任何 | 强制刷新所有已加载的插件 | swiftbar://refreshallplugins |
| 刷新 | name或plugin插件名称 | 用名称强制刷新插件。如果提供,将其他URL参数暴露为env变量到插件 | swiftbar://refreshplugin?name=myplugin |
| 刷新 | 从index 0 | 强制刷新插件的位置在Menubar | swiftbar://refreshplugin?index=1 |
| 启用Plugin | name或plugin插件名称 | 按名称启用插件 | swiftbar://enableplugin?name=myplugin |
| 禁用倍lugin | name或plugin插件名称 | 按名称禁用插件 | swiftbar://disableplugin?name=myplugin |
| togglePlugin | name或plugin插件名称 | 按名称切换(启用 disable)插件 | swiftbar://toggleplugin?name=myplugin |
| addplugin | src源URL到插件文件 | 从URL中添加插件 | swiftbar://addplugin?src=https://coolplugin |
| 通知 | name或plugin插件名称。通知字段: title , subtitle , body 。 href在单击时打开URL(包括自定义URL方案)。 silent=true禁用声音 | 显示通知 | swiftbar://notify?plugin=MyPlugin&title=title&subtitle=subtitle&body=body&silent=true |
| setephemeralplugin | name插件名称,应该是唯一的。 content - 插件内容, exitafter可选地将Menubar的寿命设置为几秒钟 | 创建一个短暂的插件。要删除现有的短暂插件将其内容设置为一个空字符串"" | swiftbar://setephemeralplugin?name=ephemeral&content=hi |
Swiftbar UI中未暴露的偏好列表:
defaults write com.ameba.SwiftBar StealthMode -bool YES - 当所有插件都禁用时,隐藏了Swiftbar菜单项defaults write com.ameba.SwiftBar DisableBashWrapper -bool YES - 运行时不会包装bash中的插件defaults write com.ameba.SwiftBar MakePluginExecutable -bool NO禁用auto chmod +x插件目录中的所有文件defaults write com.ameba.SwiftBar PluginDeveloperMode -bool YES - 启用偏好中的编辑 - >插件defaults write com.ameba.Swiftbar PluginDebugMode -bool YES - 启用插件调试视图defaults write com.ameba.SwiftBar StreamablePluginDebugOutput -bool YES - 启用debug输出流插件,swiftbar将在console.app中公开流数据如果插件无法运行Swiftbar,将显示Console.app查看SwiftBar日志。
Swiftbar使用以下开源库:
为了冻结和安全的依赖关系,这些库是向Swiftbar组织分配的。
Swiftbar可以在这里翻译。
如果您喜欢Swiftbar,您也可能会喜欢这些: