English | 简体中文
为 Safari 构建和扩展 Voyager 的开发者指南。
TIP
想要进行安装? 你现在可以直接从 最新发布页 下载预签名的应用。只需下载 .dmg 并按提示安装即可。
# 安装依赖
bun install
# 为 Safari 构建
bun run build:safari
这会创建一个包含扩展文件的 dist_safari/ 文件夹。
# 转换为 Safari 格式
xcrun safari-web-extension-converter dist_safari --macos-only --app-name "Gemini Voyager"
# 在 Xcode 中打开
open "Gemini Voyager/Gemini Voyager.xcodeproj"
在 Xcode 中:
bun run dev:safari
这会监听文件变更并自动重新构建。每次重新构建后:
# 修改代码后
bun run build:safari
# 然后在 Xcode 中重新构建(⌘R)
本项目包含用于原生 macOS 功能的 Swift 代码。添加它是可选的,但推荐使用。
safari/
├── App/
│ └── SafariWebExtensionHandler.swift # 原生消息处理器
└── Models/
└── SafariMessage.swift # 消息定义
safari/App/ 和 safari/Models/添加后,你可以:
从 JavaScript 调用:
// 健康检查
browser.runtime.sendNativeMessage({ action: 'ping' }, (response) => {
console.log(response); // { success: true, data: { status: "ok", message: "pong" } }
});
// 获取版本
browser.runtime.sendNativeMessage({ action: 'getVersion' }, (response) => {
console.log(response.data); // { version: "1.0.0", platform: "macOS" }
});
可用操作:
ping - 健康检查getVersion - 获取扩展版本信息syncStorage - 同步存储(未来功能的占位符)Web 控制台:
原生日志:
log stream --predicate 'subsystem == "com.gemini-voyager.safari"' --level debug
"Module 'SafariServices' not found"
原生消息不工作
Info.plist 是否将 SafariWebExtensionHandler 设置为主类Swift 文件未编译
需要:
详见 Apple 官方指南。
├── dist_safari/ # 构建的扩展(已忽略)
├── safari/ # 原生 Swift 代码
│ ├── App/ # 扩展处理器
│ ├── Models/ # 数据模型
│ └── Resources/ # 示例代码
├── src/ # 主扩展源代码
└── vite.config.safari.ts # Safari 构建配置
bun run build:safari # 生产构建
bun run dev:safari # 开发模式(自动重载)
bun run build:all # 为所有浏览器构建
默认情况下,Safari 版本的更新提醒是禁用的,以避免与 App Store 自动更新冲突。
如需启用更新提醒(用于手动分发):
ENABLE_SAFARI_UPDATE_CHECK=true bun run build:safari
注意:仅在手动分发扩展时启用此功能(非 App Store 分发)。App Store 版本应使用默认设置(禁用),以依赖自动更新。
由于 Safari 的技术架构和安全限制,以下功能目前在 Safari 版本中不可用:
查看 CONTRIBUTING.md 了解贡献指南。
添加原生功能时:
SafariMessage.swift 中定义操作SafariWebExtensionHandler.swift 中实现处理器