一款 iOS 录音应用,支持开始 / 暂停 / 结束录音,以及录音的查询、修改、删除、导出,并可通过 iPhone 硬件快捷键(操作按钮 / 轻点背面)快速开始、暂停录音。
- 录音控制:开始、暂停、继续、结束(自动保存为 m4a)。
- 录音管理:列表查询、关键词搜索、修改标题、删除、导出(分享到微信 / 文件 / AirDrop 等)。
- 硬件快捷键:通过 URL Scheme(
freerec://)配合“快捷指令”绑定到 iPhone 的操作按钮或轻点背面,一键开始 / 暂停录音。
FreeRec/
├── project.yml # XcodeGen 配置
├── FreeRec/
│ ├── FreeRecApp.swift # App 入口 + URL Scheme 处理
│ ├── Models/Recording.swift # 数据模型
│ ├── Services/
│ │ ├── AudioRecorder.swift # 录音引擎(AVAudioRecorder)
│ │ └── RecordingStore.swift# 文件 + 元数据存储
│ ├── Views/ # SwiftUI 视图
│ └── Assets.xcassets
└── FreeRec.xcodeproj # 由 XcodeGen 生成(如已生成)
前置条件:安装 Xcode(App Store 或 developer.apple.com),本仓库只包含源码与工程描述,不含已编译产物。
-
安装 XcodeGen(若工程文件需要重新生成):
brew install xcodegen
-
生成 Xcode 工程:
cd ~/FreeRec xcodegen generate
-
打开工程并运行:
open FreeRec.xcodeproj
在 Xcode 里选择你的 iPhone(或模拟器),点击 Run。
-
真机签名:首次真机运行需在 Xcode 中配置签名:
- 选中
FreeRecTarget → Signing & Capabilities → 勾选 Automatically manage signing → 选择你的 Apple ID Team。 - 若 Bundle ID
com.tanzt.freerec冲突,可在project.yml里改成自己的,然后重新xcodegen generate。
- 选中
说明:
AVAudioRecorder的暂停/继续会写入同一个音频文件,因此“暂停-继续”多次最终只生成一条连续录音。
iOS 不允许第三方 App 通过公开 API 直接监听音量键等硬件按键。但可以通过快捷指令 + URL Scheme 实现物理按键控制:
| 指令 | 作用 |
|---|---|
freerec://start |
开始录音(或从暂停恢复) |
freerec://pause |
暂停 / 继续 切换 |
freerec://stop |
结束并保存 |
freerec://toggle |
开始 ↔ 暂停 切换 |
打开“快捷指令”App:
- 新建快捷指令 → 添加操作 → 搜索“打开 URL”。
- URL 填入
freerec://toggle(推荐:单击开始、再按暂停)。 - 根据需要再建几个:
freerec://start、freerec://stop。 - 命名,例如“随心录-开始/暂停”。
方式一:操作按钮(iPhone 15 Pro / 16 / 17 Pro 系列)
- 设置 → 操作按钮 → 滑动到“快捷指令”→ 选择“随心录-开始/暂停”。
方式二:轻点背面(iPhone 8 及以上均支持)
- 设置 → 辅助功能 → 触控 → 轻点背面 → “轻点两下 / 三下” → 选择“随心录-开始/暂停”。
配置完成后,按一下操作按钮或轻点背面,即可在不打开 App 的情况下触发录音(App 会被调起并开始/暂停录音)。
- 录音:
AVAudioRecorder,AAC(m4a),44.1kHz 单声道。 - 存储:音频文件保存在
Documents/Recordings/,元数据保存在同目录Recordings.json。 - 后台录音:已在 Info.plist 声明
UIBackgroundModes: audio,录音开始后切后台可继续。 - 权限:首次录音会请求麦克风权限;拒绝后可在“设置-隐私与安全-麦克风”开启。
- iOS 不允许第三方 App 监听音量键录音(公开 API 限制),故采用“操作按钮 / 轻点背面”方案。
- 通过快捷键从后台冷启动时,首次可能需先在 App 内完成麦克风授权。
- 录音被电话等打断的自动保存属于后续增强项,当前依赖手动“结束”保存。