# iOS ReplayKit 悬浮窗集成指南 ## 📋 概述 本指南说明如何在 Xcode 中配置 ReplayKit Broadcast Upload Extension 以实现全局字幕悬浮窗功能。 ## 🔧 Xcode 项目配置步骤 ### 1. 添加 Broadcast Upload Extension Target 1. 在 Xcode 中打开 `ios/Runner.xcworkspace` 2. 选择项目根节点 → 点击 "+" 添加新 Target 3. 选择 "Broadcast Upload Extension" 4. 配置信息: - Product Name: `BroadcastExtension` - Bundle Identifier: `com.saitong.voitrans.BroadcastExtension` - Language: Swift - 确保 "Include UI Extension" 未选中 ### 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 中: 1. 创建 App Group: `group.com.saitong.voitrans.shared` 2. 将主应用和 Extension 都添加到此 App Group #### 3.2 在 Xcode 中: 1. 主应用 Target → Signing & Capabilities → 添加 "App Groups" capability 2. Extension Target → Signing & Capabilities → 添加 "App Groups" capability 3. 两个 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 中添加: ```xml NSCameraUsageDescription 需要摄像头权限以支持屏幕录制功能 NSMicrophoneUsageDescription 需要麦克风权限以支持音频录制功能 ``` ## 📱 使用说明 ### Flutter 调用方式 ```dart // 启动悬浮窗(会弹出系统录屏选择界面) await floatingWindowManager.enableFloatingWindow(); // 更新字幕内容 await floatingWindowManager.updateFloatingWindowContent( FloatingWindowData( sourceText: '你好', translatedText: 'Hello', sourceLanguage: '中文', targetLanguage: '英语', timestamp: DateTime.now(), isIntermediate: false, ), ); // 停止悬浮窗 await floatingWindowManager.disableFloatingWindow(); ``` ### 用户操作流程 1. 用户点击"启用悬浮窗"按钮 2. 系统弹出"开始直播屏幕"选择界面 3. 用户选择 "Voitrans 字幕悬浮窗" 选项 4. 系统开始屏幕录制,悬浮窗显示在屏幕顶部 5. 应用实时更新字幕内容 6. 用户可以在任何应用中看到翻译字幕 ## ⚠️ 注意事项 ### 开发阶段 - 确保两个 target 使用相同的开发者账号签名 - App Groups 必须在 Apple Developer Portal 中正确配置 - Extension 的 Bundle ID 必须是主应用的子域名 ### 发布阶段 - Extension 会随主应用一起打包发布 - 用户首次使用时需要授权屏幕录制权限 - 符合 App Store 审核规范,因为使用的是官方 ReplayKit API ### 用户体验 - 录制期间状态栏会显示红色录制指示器 - 悬浮窗位置固定在屏幕顶部中央 - 支持实时字幕更新和语言切换 - 可以通过停止录制来关闭悬浮窗 ## 🔍 故障排除 ### 常见问题 1. **Extension 无法启动** - 检查 Bundle ID 配置 - 确认 App Groups 权限配置正确 - 验证代码签名设置 2. **字幕不更新** - 检查 App Groups 数据同步 - 确认 UserDefaults 键名一致 - 查看 Extension 日志输出 3. **编译错误** - 确保 iOS Deployment Target 一致 - 检查 Swift 版本设置 - 验证框架依赖配置 ### 调试方法 1. 使用 Xcode 的 Device Console 查看 Extension 日志 2. 在 SampleHandler 中添加 print 语句进行调试 3. 检查 App Groups 中的数据是否正确写入 ## 📚 相关文档 - [Apple ReplayKit Documentation](https://developer.apple.com/documentation/replaykit) - [Broadcast Upload Extension Guide](https://developer.apple.com/documentation/replaykit/rpbroadcastsamplehandler) - [App Groups Documentation](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups)