System Extension注册完成 + FSKit Driver待办事项
已完成: ✅ 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(未来待办)
This commit is contained in:
194
docs/FSKIT_DRIVER_TODO.md
Normal file
194
docs/FSKIT_DRIVER_TODO.md
Normal file
@@ -0,0 +1,194 @@
|
||||
# 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依赖:**
|
||||
```toml
|
||||
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实施计划:**
|
||||
1. MarkBaseFS backend集成到WebDAV handler
|
||||
2. HTTP server启动测试
|
||||
3. Finder连接验证
|
||||
4. AJA System Test性能验证
|
||||
|
||||
**FSKit Driver保留:**
|
||||
- 所有注册配置保留(App ID、证书等)
|
||||
- 未来需要时可继续开发
|
||||
- 当前POC代码可作为参考
|
||||
|
||||
---
|
||||
|
||||
**最后更新:** 2026-05-18 20:45
|
||||
144
docs/SYSTEM_EXTENSION_MANUAL_INSTALL.md
Normal file
144
docs/SYSTEM_EXTENSION_MANUAL_INSTALL.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# System Extension 手动安装指南
|
||||
|
||||
## 当前状态
|
||||
|
||||
**.app Bundle已准备好:**
|
||||
- Location: build/MarkBaseFSKit.app
|
||||
- Bundle ID: com.momentry.markbase.fskit
|
||||
- Certificate: Developer ID Application: Accusys,Inc (K3TDMD9Y6B)
|
||||
- Team ID: K3TDMD9Y6B
|
||||
- Status: Signed ✅
|
||||
|
||||
---
|
||||
|
||||
## 安装方法
|
||||
|
||||
### 方法1:直接打开(尝试中)
|
||||
|
||||
```bash
|
||||
open build/MarkBaseFSKit.app
|
||||
```
|
||||
|
||||
**预期结果:**
|
||||
- macOS弹出:"MarkBaseFSKit wants to install a system extension"
|
||||
- System Settings → Privacy & Security → Allow按钮出现
|
||||
- 点击Allow → 重启Mac → 安装完成
|
||||
|
||||
**如果无反应:**
|
||||
- 需要将.app复制到Applications目录
|
||||
|
||||
---
|
||||
|
||||
### 方法2:复制到Applications(标准方法)
|
||||
|
||||
```bash
|
||||
# 需要sudo权限
|
||||
sudo cp -r build/MarkBaseFSKit.app /Applications/
|
||||
|
||||
# 打开.app触发安装
|
||||
open /Applications/MarkBaseFSKit.app
|
||||
```
|
||||
|
||||
**安装流程:**
|
||||
1. macOS弹出:"MarkBaseFSKit wants to install a system extension"
|
||||
2. 点击"Open System Settings"
|
||||
3. System Settings → Privacy & Security
|
||||
4. 找到"System Extension from Accusys,Inc"条目
|
||||
5. 点击**Allow**按钮
|
||||
6. macOS要求重启 → Restart
|
||||
7. 重启后System Extension安装完成
|
||||
|
||||
---
|
||||
|
||||
## 验证安装成功
|
||||
|
||||
```bash
|
||||
systemextensionsctl list
|
||||
```
|
||||
|
||||
**预期输出:**
|
||||
```
|
||||
1 extension(s)
|
||||
MarkBaseFSKit (com.momentry.markbase.fskit) [active]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 如果安装失败
|
||||
|
||||
### 可能原因:
|
||||
|
||||
**1. .app Bundle结构问题**
|
||||
- 缺少PkgInfo文件
|
||||
- Info.plist格式错误
|
||||
- entitlements配置不正确
|
||||
|
||||
**解决方案:**
|
||||
```bash
|
||||
# 添加PkgInfo文件
|
||||
echo -n "APPL????" > build/MarkBaseFSKit.app/Contents/PkgInfo
|
||||
|
||||
# 重新签名
|
||||
codesign --sign "Developer ID Application: Accusys,Inc (K3TDMD9Y6B)" \
|
||||
--entitlements entitlements.plist \
|
||||
--identifier "com.momentry.markbase.fskit" \
|
||||
--options runtime \
|
||||
--timestamp \
|
||||
build/MarkBaseFSKit.app
|
||||
```
|
||||
|
||||
**2. System Extension类型不支持**
|
||||
- macOS可能需要特定类型的System Extension
|
||||
- 当前设置:filesystem类型
|
||||
|
||||
**解决方案:**
|
||||
- 检查Info.plist中NSSystemExtension=true
|
||||
- 检查entitlements中com.apple.developer.system-extension权限
|
||||
|
||||
**3. 证书权限问题**
|
||||
- Developer ID Application证书可能需要特定权限
|
||||
|
||||
**解决方案:**
|
||||
- 检查证书是否支持System Extension签名
|
||||
- 查看Portal证书详情
|
||||
|
||||
---
|
||||
|
||||
## System Extension调试
|
||||
|
||||
**检查.app bundle完整性:**
|
||||
```bash
|
||||
codesign -d -vv --entitlements - build/MarkBaseFSKit.app
|
||||
```
|
||||
|
||||
**检查Gatekeeper评估:**
|
||||
```bash
|
||||
spctl -a -vv build/MarkBaseFSKit.app
|
||||
```
|
||||
|
||||
**检查System Extension日志:**
|
||||
```bash
|
||||
log show --predicate 'process == "systemextensionsd"' --last 5m
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 当前需要用户执行
|
||||
|
||||
**步骤1:** 如果直接打开无反应,手动复制到Applications
|
||||
```bash
|
||||
sudo cp -r build/MarkBaseFSKit.app /Applications/
|
||||
```
|
||||
|
||||
**步骤2:** 打开.app触发安装
|
||||
```bash
|
||||
open /Applications/MarkBaseFSKit.app
|
||||
```
|
||||
|
||||
**步骤3:** System Settings批准
|
||||
- Privacy & Security → Allow
|
||||
- 重启Mac
|
||||
|
||||
---
|
||||
|
||||
**最后更新:** 2026-05-18 20:37
|
||||
Reference in New Issue
Block a user