You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.4 KiB
4.4 KiB
iOS ReplayKit 悬浮窗集成指南
📋 概述
本指南说明如何在 Xcode 中配置 ReplayKit Broadcast Upload Extension 以实现全局字幕悬浮窗功能。
🔧 Xcode 项目配置步骤
1. 添加 Broadcast Upload Extension Target
- 在 Xcode 中打开
ios/Runner.xcworkspace - 选择项目根节点 → 点击 "+" 添加新 Target
- 选择 "Broadcast Upload Extension"
- 配置信息:
- Product Name:
BroadcastExtension - Bundle Identifier:
com.saitong.voitrans.BroadcastExtension - Language: Swift
- 确保 "Include UI Extension" 未选中
- Product Name:
2. 配置 Extension Target
2.1 替换默认文件
- 删除自动生成的
SampleHandler.swift - 将项目中的
ios/BroadcastExtension/SampleHandler.swift复制到 Extension target - 将项目中的
ios/BroadcastExtension/Info.plist替换 Extension 的 Info.plist
2.2 添加 Entitlements
- 在 Extension target 的 Build Settings 中设置 Code Signing Entitlements
- 指向
ios/BroadcastExtension/BroadcastExtension.entitlements
2.3 配置 Build Settings
- iOS Deployment Target: 16.0 (与主应用保持一致)
- Swift Language Version: Swift 5
- Enable Bitcode: No
3. 配置 App Groups
3.1 在 Apple Developer Portal 中:
- 创建 App Group:
group.com.saitong.voitrans.shared - 将主应用和 Extension 都添加到此 App Group
3.2 在 Xcode 中:
- 主应用 Target → Signing & Capabilities → 添加 "App Groups" capability
- Extension Target → Signing & Capabilities → 添加 "App Groups" capability
- 两个 target 都勾选
group.com.saitong.voitrans.shared
4. 更新主应用配置
4.1 添加 ReplayKit 框架
- 主应用 Target → Build Phases → Link Binary With Libraries
- 添加
ReplayKit.framework
4.2 更新 Info.plist
在主应用的 Info.plist 中添加:
<key>NSCameraUsageDescription</key>
<string>需要摄像头权限以支持屏幕录制功能</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限以支持音频录制功能</string>
📱 使用说明
Flutter 调用方式
// 启动悬浮窗(会弹出系统录屏选择界面)
await floatingWindowManager.enableFloatingWindow();
// 更新字幕内容
await floatingWindowManager.updateFloatingWindowContent(
FloatingWindowData(
sourceText: '你好',
translatedText: 'Hello',
sourceLanguage: '中文',
targetLanguage: '英语',
timestamp: DateTime.now(),
isIntermediate: false,
),
);
// 停止悬浮窗
await floatingWindowManager.disableFloatingWindow();
用户操作流程
- 用户点击"启用悬浮窗"按钮
- 系统弹出"开始直播屏幕"选择界面
- 用户选择 "Voitrans 字幕悬浮窗" 选项
- 系统开始屏幕录制,悬浮窗显示在屏幕顶部
- 应用实时更新字幕内容
- 用户可以在任何应用中看到翻译字幕
⚠️ 注意事项
开发阶段
- 确保两个 target 使用相同的开发者账号签名
- App Groups 必须在 Apple Developer Portal 中正确配置
- Extension 的 Bundle ID 必须是主应用的子域名
发布阶段
- Extension 会随主应用一起打包发布
- 用户首次使用时需要授权屏幕录制权限
- 符合 App Store 审核规范,因为使用的是官方 ReplayKit API
用户体验
- 录制期间状态栏会显示红色录制指示器
- 悬浮窗位置固定在屏幕顶部中央
- 支持实时字幕更新和语言切换
- 可以通过停止录制来关闭悬浮窗
🔍 故障排除
常见问题
-
Extension 无法启动
- 检查 Bundle ID 配置
- 确认 App Groups 权限配置正确
- 验证代码签名设置
-
字幕不更新
- 检查 App Groups 数据同步
- 确认 UserDefaults 键名一致
- 查看 Extension 日志输出
-
编译错误
- 确保 iOS Deployment Target 一致
- 检查 Swift 版本设置
- 验证框架依赖配置
调试方法
- 使用 Xcode 的 Device Console 查看 Extension 日志
- 在 SampleHandler 中添加 print 语句进行调试
- 检查 App Groups 中的数据是否正确写入