核心功能: - ✅ Categories/Series双视图管理(category_view.rs + import_markdown.rs) - ✅ FUSE Multi-Volume支持(tree_type参数) - ✅ SSH/SFTP/SCP/rsync协议完整实现(4042行) - ✅ NFS/SMB Module Phase 1-3完成 - ✅ Archive Module Phase 1-4完成(2916行) - ✅ Download Center API完整实现 - ✅ S3兼容API实现(560行) Git配置修正: - ✅ 删除错误origin(gitea.momentry.ddns.net) - ✅ 删除m5max128(指向机器名) - ✅ 设置origin = m5max128gitea.momentry.ddns.net/admin/markbase - ✅ 设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase 数据清理: - ✅ 删除38个临时SQLite(保留accusys.sqlite、demo.sqlite) - ✅ 删除.bak、test_*.bin、调试脚本等临时文件 - ✅ 删除临时目录(build/、download files/、raid_test/等) - ✅ 更新.gitignore排除临时文件 架构优化: - 52个文件修改,2434行新增,4739行删除 - Workspace成员整合(16个crate) - 数据库状态:accusys.sqlite保留(主demo测试) 远程同步: - ✅ 准备推送到m5max128gitea(远程Gitea) - ✅ 准备推送到m4minigitea(本地Gitea)
3.9 KiB
3.9 KiB
KhaosT/FSKitSample 分析 ⭐⭐⭐⭐⭐
Repository 信息
- GitHub: https://github.com/KhaosT/FSKitSample
- Author: KhaosT
- Stars: 101
- Platform: macOS Sequoia 15+
- Purpose: Working FSKit filesystem example
关键发现 ⭐⭐⭐⭐⭐ (修正 HelloFS)
1. Entry Point 类名(CRITICAL)
我的错误:UnaryFilesystemExtension ❌
实际正确:FSKitExtension ✅
正确用法:
struct MyFSExtension: FSKitExtension {
func filesystem() -> FSFileSystem {
return MyFS()
}
}
2. 文件系统基类(CRITICAL)
我的错误:FSUnaryFileSystem ❌
实际正确:FSFileSystem ✅
正确用法:
class MyFS: FSFileSystem {
func probeResource(resource: FSResource, replyHandler: (FSProbeResult?) -> Void) {
// ...
}
func loadResource(resource: FSResource, options: FSTaskOptions, replyHandler: (Error?) -> Void) {
// ...
}
}
3. 方法签名(CRITICAL)
关键发现:所有方法需要 replyHandler 和 options 参数 ⭐⭐⭐⭐⭐
错误用法:
func start() -> Bool ❌
func handleMountRequest(request: FSMountRequest) -> FSVolume? ❌
正确用法:
func probeResource(resource: FSResource, replyHandler: (FSProbeResult?) -> Void) ✅
func loadResource(resource: FSResource, options: FSTaskOptions, replyHandler: (Error?) -> Void) ✅
Repository 结构
FSKitSample/
│
├── FSKitApp/ # Main App
│ ├── FSKitAppApp.swift # App entry
│ ├── ContentView.swift # UI
│ └── Info.plist # App config
│
├── FSKitExtension/ # Filesystem Extension
│ ├── FSKitExtension.swift # Extension entry ✅
│ ├── MyFS.swift # FSFileSystem ✅
│ ├── MyFSVolume.swift # FSVolume + all protocols ✅
│ ├── MyFSItem.swift # FSItem subclass ✅
│ ├── Constants.swift # Constants
│ ├── Info.plist # Extension config (IMPORTANT) ✅
│ └── entitlements # Required entitlements ✅
│
└── Shared/ # Shared code
Info.plist Configuration(CRITICAL)
FSKit Extension 必需配置:
<key>FSExtension</key>
<dict>
<key>FSExtensionPersonality</key>
<string>MyFS</string>
<key>FSShortName</key>
<string>MyFS</string>
<key>FSObjectsAreCaseSensitive</key>
<false/>
<key>FSSupportsBlockDevices</key>
<true/>
<key>FSPrimaryClass</key>
<string>MyFS</string>
</dict>
Without this, extension won't load!
Entitlements(CRITICAL)
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
Protocol Hierarchy
FSVolume 必须实现多个 protocol:
extension MyFSVolume: FSVolume.PathConfOperations { }
extension MyFSVolume: FSVolume.OpenCloseOperations { }
extension MyFSVolume: FSVolume.IOOperations { }
extension MyFSVolume: FSVolume.DirectoryOperations { }
extension MyFSVolume: FSVolume.AttributeOperations { }
extension MyFSVolume: FSVolume.XattrOperations { }
共 13+ protocols,必须全部实现!
Block Device Access
创建测试块设备:
mkfile -n 100m dummy
hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount dummy
# Output: disk18
挂载:
mkdir /tmp/TestVol
mount -t MyFS disk18 /tmp/TestVol
卸载:
umount /tmp/TestVol
HelloFS 修正清单
立即修正:
- ✅ 改
UnaryFilesystemExtension→FSKitExtension - ✅ 改
FSUnaryFileSystem→FSFileSystem - ✅ 添加
replyHandler参数 - ✅ 添加
options: FSTaskOptions参数 - ✅ 创建 Info.plist 配置
- ✅ 实现 13+ protocols
- ✅ 创建 entitlements