iBook Widget Packer
/install ibook-widget-packer
iBook Widget Packer Skill
概述
本 Skill 将任意 H5 游戏项目打包成符合 Apple iBook Author Widget 规范的 .wdgt 格式压缩包,可直接导入 iBook Author 使用。
Widget 包体规范
Apple iBook Widget(.wdgt)本质是一个特定结构的文件夹,在 macOS 上显示为 bundle 包。标准结构如下:
your-game.wdgt/
├── index.html ← 主入口文件(必须)
├── Info.plist ← Widget 配置文件(必须)
├── Default.png ← 缩略图 1024×768(必须)
├── [email protected] ← 高清缩略图 2048×1536(必须)
└── peresources/ ← 资源文件夹(推荐命名,存放 CSS/JS/图片等)
├── style.css
├── game.js
└── ...(其他资源)
关键约束:
index.html必须在根目录Info.plist必须在根目录,且包含MainHTML字段指向index.html- 所有资源路径使用相对路径(如
peresources/style.css) - 压缩时文件夹本身要在 zip 顶层(即 zip 内容为
your-game.wdgt/...)
执行步骤
收到用户的打包请求后,按以下步骤执行:
Step 1:确认源项目路径和输出名称
- 询问或从上下文确认:
- 源项目目录(包含 index.html 的目录)
- Widget 名称(将作为 .wdgt 文件夹名,建议英文+连字符,如
my-game) - 游戏显示名称(中文可以,用于 Info.plist 的 CFBundleDisplayName)
- 版本号(默认
1.0) - 默认尺寸(默认 1024×768,适合 iPad 横屏)
Step 2:分析源项目结构
读取源项目的 index.html,确认:
- 引用了哪些 CSS/JS 文件及其路径
- 是否已经有
peresources子目录,还是所有文件平铺在根目录 - 特殊资源(图片、音频、字体等)的位置
Step 3:创建 Widget 目录结构
# 创建 wdgt 文件夹
WDGT_DIR="/path/to/output/your-game.wdgt"
mkdir -p "$WDGT_DIR/peresources"
# 将 CSS、JS 等资源文件复制到 peresources/
cp source/style.css source/game.js source/*.js "$WDGT_DIR/peresources/"
路径修正规则:
- 若源
index.html中引用路径为style.css(平铺),则复制到peresources/后,index.html中需改为peresources/style.css - 若源
index.html中已经是peresources/style.css,则路径无需修改,直接复制资源文件到对应位置
Step 4:生成 index.html(根目录版本)
将修正了资源引用路径的 index.html 写入 your-game.wdgt/index.html。
必须包含的 meta 标签(用于全屏适配):
\x3Cmeta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
\x3Cmeta name="apple-mobile-web-app-capable" content="yes" />
\x3Cmeta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
Step 5:生成 Info.plist
\x3C?xml version="1.0" encoding="UTF-8"?>
\x3C!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
\x3Cplist version="1.0">
\x3Cdict>
\x3Ckey>CFBundleDisplayName\x3C/key>
\x3Cstring>【游戏中文名】\x3C/string>
\x3Ckey>CFBundleIdentifier\x3C/key>
\x3Cstring>com.【英文名小写】.widget\x3C/string>
\x3Ckey>CFBundleName\x3C/key>
\x3Cstring>【英文名驼峰】\x3C/string>
\x3Ckey>CFBundleShortVersionString\x3C/key>
\x3Cstring>【版本号,如 1.0】\x3C/string>
\x3Ckey>CFBundleVersion\x3C/key>
\x3Cstring>【版本号,如 1.0】\x3C/string>
\x3Ckey>MainHTML\x3C/key>
\x3Cstring>index.html\x3C/string>
\x3Ckey>AllowNetworkAccess\x3C/key>
\x3Cfalse/>
\x3Ckey>Width\x3C/key>
\x3Cinteger>1024\x3C/integer>
\x3Ckey>Height\x3C/key>
\x3Cinteger>768\x3C/integer>
\x3C/dict>
\x3C/plist>
Step 6:生成缩略图
使用 Python3 + Pillow 生成渐变缩略图(若 Pillow 未安装,先执行 pip3 install Pillow):
from PIL import Image, ImageDraw
def make_thumb(size, path, game_name):
w, h = size
img = Image.new('RGB', (w, h))
draw = ImageDraw.Draw(img)
# 渐变背景(紫色系)
for i in range(h):
r = int(102 + (150-102)*i/h)
g = int(51 + (75-51)*i/h)
b = int(153 + (210-153)*i/h)
draw.line([(0,i),(w,i)], fill=(r,g,b))
# 中心文字
cx, cy = w//2, h//2
draw.text((cx - len(game_name)*7, cy - 10), game_name, fill='white')
img.save(path)
make_thumb((1024, 768), 'your-game.wdgt/Default.png', '游戏名称')
make_thumb((2048, 1536), 'your-game.wdgt/[email protected]', '游戏名称')
如果需要更好的缩略图效果,可以请用户提供截图,或用 PIL 绘制更精美的预览图。
Step 7:打包成 zip
cd /path/to/output/parent
zip -r your-game.wdgt.zip your-game.wdgt/
注意: 必须先 cd 到 wdgt 文件夹的父目录,再执行 zip,确保压缩包内顶层是 your-game.wdgt/ 文件夹。
Step 8:验证包体结构
# 查看压缩包内容,确认结构正确
unzip -l your-game.wdgt.zip | head -20
期望看到:
Archive: your-game.wdgt.zip
your-game.wdgt/
your-game.wdgt/index.html
your-game.wdgt/Info.plist
your-game.wdgt/Default.png
your-game.wdgt/[email protected]
your-game.wdgt/peresources/style.css
your-game.wdgt/peresources/game.js
...
Step 9:提供下载链接
使用 display_download_links 工具为用户提供 zip 文件的下载链接。
iBook 使用方式(告知用户)
打包完成后,请告知用户以下使用步骤:
- 下载
your-game.wdgt.zip到本地 Mac - 解压得到
your-game.wdgt文件夹 - 重命名确认:确保文件夹后缀为
.wdgt(macOS 会将其识别为 Widget bundle) - 导入 iBook Author:打开 iBook Author → 插入菜单 → Widget → HTML → 拖入
.wdgt文件 - 预览:在 iBook Author 中点击预览,或导出到 iPad 的 iBooks App 查看
⚠️ 注意:iBook Author 已于 2020 年停止更新,仅支持旧版 macOS。若用户使用新版系统,建议使用 Apple Pages 或第三方工具替代。
屏幕适配最佳实践
在 style.css 中加入响应式断点,确保游戏在不同设备上自适应:
/* iPad Pro 横屏 (≥1000pt) */
@media screen and (min-width: 1000px) { ... }
/* iPad Pro 竖屏 (768-999pt) */
@media screen and (min-width: 768px) and (max-width: 999px) { ... }
/* iPhone 竖屏 (≤480pt) */
@media screen and (max-width: 480px) { ... }
/* 横屏低高度兼容 */
@media screen and (max-height: 500px) { ... }
同时在 html, body 加入:
html, body {
padding-top: env(safe-area-inset-top);
padding-bottom: env(safe-area-inset-bottom);
}
常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Widget 在 iBook 中显示空白 | index.html 路径错误或资源404 |
检查 index.html 在 wdgt 根目录,资源路径使用相对路径 |
| 缩略图不显示 | Default.png 尺寸不对 |
确保 320×240 和 640×480 |
| 游戏布局错乱 | 缺少 viewport meta | 添加 viewport-fit=cover meta 标签 |
| 音频无法播放 | 浏览器自动播放限制 | 监听用户首次交互事件后再播放音频 |
| zip 结构错误 | 打包路径问题 | 确保从 wdgt 父目录执行 zip 命令 |
输出清单
每次打包完成,向用户说明:
- ✅ Widget 名称和版本
- ✅ 包体文件列表(
find your-game.wdgt -type f | sort) - ✅ zip 文件大小
- ✅ 下载链接
- ✅ iBook 导入使用步骤
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install ibook-widget-packer - 安装完成后,直接呼叫该 Skill 的名称或使用
/ibook-widget-packer触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
iBook Widget Packer 是什么?
将 H5 游戏项目打包成 Apple iBook 支持的 .wdgt(Widget)格式。适用于:已有 H5 游戏项目(包含 index.html、CSS、JS 等文件),需要打包成 iBook Author 可用的 Widget 压缩包(.wdgt.zip)时使用。自动完成目录结构规范化、资源路径修正、Info... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 146 次。
如何安装 iBook Widget Packer?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install ibook-widget-packer」即可一键安装,无需额外配置。
iBook Widget Packer 是免费的吗?
是的,iBook Widget Packer 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
iBook Widget Packer 支持哪些平台?
iBook Widget Packer 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 iBook Widget Packer?
由 onedream1985(@onedream1985)开发并维护,当前版本 v0.1.0。