已完成: ✅ App ID(6770506571) ✅ Bundle ID(com.momentry.markbase.fskit) ✅ Developer ID Application证书导入 ✅ .app Bundle创建(build/MarkBaseFSKit.app) ✅ entitlements.plist配置 限制: - binary未实现FSKit driver(占位符) - 无法通过systemextensionsctl install安装 - 需要完整FSKit接口实现 策略: - 短期:WebDAV(500 MB/s) - 长期:FSKit Driver完整实现(650 MB/s) 文档: - SYSTEM_EXTENSION_MANUAL_INSTALL.md - FSKIT_DRIVER_TODO.md(未来待办)
4.7 KiB
4.7 KiB
FSKit Driver 完整实现待办事项
当前状态
已完成基础(可保留):
- ✅ App ID注册(Apple ID: 6770506571)
- ✅ Bundle ID: com.momentry.markbase.fskit
- ✅ Developer ID Application证书导入
- ✅ .app Bundle创建(build/MarkBaseFSKit.app)
- ✅ entitlements.plist配置
当前限制:
- ❌ binary未实现FSKit driver接口(占位符)
- ❌ 无法作为System Extension安装(需要完整driver)
FSKit Driver完整实现要求
需要实现的trait/接口
1. FSFileSystem(文件系统)
fskit_volume_for_identifier()- 根据identifier获取volume- Volume注册/卸载机制
2. FSVolume(卷)
- Volume标识符管理
- Volume状态跟踪
3. FSVolumeOperations(卷操作,9个方法)
create_item() - 创建文件/文件夹
delete_item() - 删除节点
move_item() - 移动节点
rename_item() - 重命名
lookup_item() - 查找节点
fetch_attributes() - 获取文件属性
fetch_contents() - 读取文件内容
write_contents() - 写入文件内容
create_directory() - 创建目录
4. FSVolumeReadWriteOperations(读写操作)
- 文件读写优化
- 缓存机制
5. FSItem(文件系统项)
- SQLite node_id → FSItem映射
- 文件属性封装
实现技术栈
Rust依赖:
objc2-fs-kit = "0.3.2" # FSKit bindings
objc2-foundation = "0.3" # NSString等基础类型
rusqlite = "0.32" # SQLite backend
关键技术:
- Objective-C runtime(通过objc2库)
- declare_class!宏(定义Objective-C类)
- SQLite backend(MarkBaseFS现有实现)
- macOS System Extension框架
实现步骤(未来)
Phase 1:FSVolumeOperations基础实现
- 实现lookup_item()(已有query_node基础)
- 实现fetch_attributes()(已有FileNodeData)
- 实现fetch_contents()(已有read_file基础)
Phase 2:写入操作实现
- 实现create_item()(SQLite insert)
- 实现write_contents()(文件写入)
- 实现delete_item()(SQLite delete)
Phase 3:高级操作实现
- 实现move_item()(parent_id修改)
- 实现rename_item()(label修改)
- 实现create_directory()(folder节点)
Phase 4:FSKit driver注册
- 实现FSFileSystem接口
- Volume注册机制
- System Extension打包
Phase 5:System Extension安装
- 使用已有的.app Bundle
- 重新编译完整driver binary
- 系统批准流程
技术挑战
1. Objective-C runtime复杂性
- declare_class!宏语法复杂
- Objective-C对象生命周期管理
- 需要熟悉Objective-C消息传递机制
2. FSKit framework限制
- Apple官方文档较少
- 需要通过objc2-fs-kit头文件理解接口
- 可能遇到macOS版本兼容性问题
3. 性能优化
- SQLite查询优化(12659 nodes)
- 文件读写缓存
- 多线程并发处理
预估时间
| 阶段 | 时间 | 难度 |
|---|---|---|
| Phase 1(基础操作) | 3-5天 | 中等 |
| Phase 2(写入操作) | 2-3天 | 中等 |
| Phase 3(高级操作) | 2-3天 | 高 |
| Phase 4(driver注册) | 3-5天 | 高 |
| Phase 5(安装调试) | 2-3天 | 中等 |
| 总计 | 12-18天 | 高 |
资源需求
知识储备:
- Objective-C runtime
- FSKit framework
- macOS System Extension架构
参考资料:
- objc2-fs-kit文档:https://docs.rs/objc2-fs-kit/0.3.2/
- FSKit Apple文档:https://developer.apple.com/documentation/fskit
- System Extension开发指南:https://developer.apple.com/documentation/systemextensions
现有代码基础:
- MarkBaseFS简化版(src/fskit/filesystem.rs)
- SQLite backend(已验证12659 nodes)
- warren数据库(16.15 GB数据)
与WebDAV方案对比
| 特性 | WebDAV(短期) | FSKit Driver(长期) |
|---|---|---|
| 实现难度 | 低 | 高 |
| 实现时间 | 1-2天 | 12-18天 |
| 性能 | 500 MB/s | 650 MB/s |
| macOS集成 | HTTP/SMB | Native FSKit |
| Finder挂载 | 网络驱动器 | 原生卷 |
| 生产可用 | ✅ 立即 | ⏳ 未来 |
| System Extension | ❌ 不需要 | ✅ 需要 |
建议
短期(现在): 使用WebDAV方案
- 利用已有MarkBaseFS backend
- 快速实现可用版本
- 满足500 MB/s性能需求
长期(未来): 完整实现FSKit driver
- 保留System Extension注册基础
- 学习Objective-C runtime
- 逐步实现FSKit接口
- 达到650 MB/s原生性能
下一步行动
WebDAV实施计划:
- MarkBaseFS backend集成到WebDAV handler
- HTTP server启动测试
- Finder连接验证
- AJA System Test性能验证
FSKit Driver保留:
- 所有注册配置保留(App ID、证书等)
- 未来需要时可继续开发
- 当前POC代码可作为参考
最后更新: 2026-05-18 20:45