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:
Warren
2026-05-18 20:45:50 +08:00
parent 14863d323e
commit 71fa48a626
29 changed files with 3625 additions and 0 deletions

194
docs/FSKIT_DRIVER_TODO.md Normal file
View 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 backendMarkBaseFS现有实现
- macOS System Extension框架
---
## 实现步骤(未来)
**Phase 1FSVolumeOperations基础实现**
- 实现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 4FSKit driver注册**
- 实现FSFileSystem接口
- Volume注册机制
- System Extension打包
**Phase 5System 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 4driver注册 | 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

View 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