资讯详情

MacBook Touch Bar 插件开发指南:用 PockKit 给触摸栏装自定义插件

📅 2026/11/6 3:09:36 | 华诺云谱 👁 阅读
MacBook Touch Bar 插件开发指南:用 PockKit 给触摸栏装自定义插件
MacBook Touch Bar 插件开发指南用 PockKit 给触摸栏装自定义插件【免费下载链接】pockWidgets manager for MacBook Touch Bar项目地址: https://gitcode.com/gh_mirrors/po/pockPock 是一个免费的 MacBook Touch Bar 插件管理器它的 PockKit 框架让 Touch Bar 插件开发变成一次 Swift 继承加一个 Info.plist跟着本文做完你会得到一个双击即可安装的.pock插件包。一、谁需要给 Touch Bar 写插件适合用 PockKit 的人通常是这几种想用自定义功能填满闲置触摸栏的开发者、想把自己工具的控制界面搬上触摸栏的 Swift 工程师、或者团队里需要统一分发一套 Touch Bar 小工具的负责人。Touch Bar 本身只认当前应用提供的 NSTouchBar直接接入系统框架要处理很多边界情况Pock 已经把这些兜住了你只写自己的PKWidget子类。二、Touch Bar 插件开发环境怎么搭Pock 的 Podfile 声明了最低要求macOS 10.15 以上、Xcode 12 以上框架通过 CocoaPods 引入pod PockKit, :git gitgithub.com:pock/pockkit.git拿到主工程源码用来对照结构git clone https://gitcode.com/gh_mirrors/po/pock克隆下来后重点看 widgets 源码目录Models/下是插件元数据模型WidgetsLoader.swift 和 WidgetsInstaller.swift 分别负责加载与安装后面第四节会拆开讲它们怎么配合。图Pock 应用图标——菜单栏里的常驻入口插件的更新提示、偏好设置都从这里进入。三、第一个 Touch Bar 插件怎么跑起来最小插件就是继承 PockKit 的PKWidget基类再覆写一个显示名称import PockKit class MyFirstWidget: PKWidget { override var customizationLabel: String { return My First Widget } }customizationLabel会在系统自定义面板里代表你的插件。类写完后把工程构建成一个 bundle目录后缀改成.pock关键是里面的 Info.plist 必须填对这几个键来源见 PKWidgetInfo.swiftNSPrincipalClass你的PKWidget子类全名Pock 靠它找到入口类CFBundleIdentifier全局唯一Pock 用它区分和匹配插件CFBundleName/CFBundleDisplayName显示名称CFBundleShortVersionString版本号更新机制靠它判断PKWidgetAuthor作者名PockKit 自定义的键PKWidgetPreferenceClass可选填了之后管理面板里会多一个偏好设置入口少填任何一项PKWidgetInfo初始化就会抛异常插件直接被跳过。四、原理拆解WidgetsLoader、WidgetsInstaller 与插件生命周期启动时 AppController.swift 调WidgetsLoader().loadInstalledWidgets完成扫描。Loader 干的事很朴素确保~/Library/Application Support/Pock/Widgets/目录存在只挑文件名以.pock结尾、且不含disabled、不是子目录的条目对每个条目try PKWidgetInfo(path:)读元数据动态库加载失败时回退到PKWidgetInfo(unloadableWidgetAtPath:)只读 Info.plist插件会出现在列表里但标为未加载——所以能装上和能跑是两回事全部完成后广播didLoadWidgets通知安装走的是 WidgetsInstaller.swift。它本身是个NSDocument子类在 Info.plist 里注册成了.pock和.pkarchive两种类型的处理器所以双击就能触发.pock直接校验后复制进 Widgets 目录同名旧包先删掉.pkarchive走解压流程——先落进Widgets/tmp找出里面的.pock若已存在同名插件就先卸载再装。真正渲染由 PockTouchBarController.swift 完成它把已加载插件按bundleIdentifier注册成触摸栏条目每个条目用 PKWidgetTouchBarItem.swift 包一层。生命周期则通过 PKWidgetViewController.swift 把标准回调转发给你的 widget——视图上屏、离屏的时机都暴露出来了override func viewDidAppear() { widgetItem?.widget?.viewDidAppear?() }所以加载 → 上屏 → 离屏 → 释放这四个节点你都能在PKWidget里挂上自己的逻辑deinit时 Pock 还会打一条调试日志方便你确认释放时机。五、布局、分区与图标自定义 Touch Bar 外观Pock 提供两种布局Preferences.swift 里的LayoutStyle![](Pock/Bundle/Assets.xcassets/Layout Styles/layout-style-full-width.imageset/layout-style-full-width2x.png)图全宽布局下插件占据整条 Touch Bar 的展示效果可见应用图标、通知角标与分区分隔线。另一种是控制条布局右侧保留亮度、静音、音量等系统控件。插件侧能定制外观的入口主要是两个customizationLabel决定面板里显示什么名字imageForCustomization可以返回一张图替换默认快照。Touch Bar 上的顺序、留白和分隔则交给用户——用户可以在Customize Pock里任意拖动、插空白、移除你不需要在代码里操心排布。六、部署上线打包、放置目录与加载构建成功后你得到一个.pock包。最快的安装方式是直接双击安装面板接管流程把包复制进~/Library/Application Support/Pock/Widgets/。想分发给别人就再压一层 zip、改名.pkarchivePock 会自动解压识别pkarchive 文件类型声明 里能看到它被声明为 zip 归档的从属类型。图Pock 首次运行时 Touch Bar 上的安装引导条点击 Install 即可批量装默认插件。加载时机是应用启动AppController重启时统一跑一遍reloadWidgets新装、被替换、被移除的包都会在这一步刷新进列表。更新场景下 Updater.swift 会拉取远端最新版本列表发现新版本后提示用户确认即触发下载安装替换。七、避坑与优化常见错误和性能注意点写插件前先看一眼 README.md 的 Usage 一节如果系统键盘设置里 Touch Bar 默认行为不是显示应用控制Pock 的触摸栏根本不会出现——这是新用户最常问的问题。其余几条经验都来自源码行为文件名即开关Loader 跳过含disabled的文件想临时停用某个插件不用删除改个名字就行bundleIdentifier 是唯一身份PKWidgetInfo的相等判断只看它更新、覆盖安装都按它匹配重复的 ID 会让新旧包互相打架库加载失败≠安装失败包能装上但条目灰着unloadable说明 Info.plist 键齐了但动态库没编对对照 Xcode 的 bundle 配置查卸载要干净uninstallWidget是直接删目录你的插件别在别处留运行时状态deinit里释放掉通知和定时器调试用项目内置的 Roger.swift 日志工具Roger.debug/info/error三个级别主工程各组件都这么打点你照着用即可发布前记得清掉调试输出。下一步建议给插件加一个PKWidgetPreferenceClass配置面板让用户能调它的行为然后看看 更新检查机制 怎么给插件版本化分发。【免费下载链接】pockWidgets manager for MacBook Touch Bar项目地址: https://gitcode.com/gh_mirrors/po/pock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑