# 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` ✅ **正确用法**: ```swift struct MyFSExtension: FSKitExtension { func filesystem() -> FSFileSystem { return MyFS() } } ``` ### 2. 文件系统基类(CRITICAL) **我的错误**:`FSUnaryFileSystem` ❌ **实际正确**:`FSFileSystem` ✅ **正确用法**: ```swift class MyFS: FSFileSystem { func probeResource(resource: FSResource, replyHandler: (FSProbeResult?) -> Void) { // ... } func loadResource(resource: FSResource, options: FSTaskOptions, replyHandler: (Error?) -> Void) { // ... } } ``` ### 3. 方法签名(CRITICAL) **关键发现**:所有方法需要 `replyHandler` 和 `options` 参数 ⭐⭐⭐⭐⭐ **错误用法**: ```swift func start() -> Bool ❌ func handleMountRequest(request: FSMountRequest) -> FSVolume? ❌ ``` **正确用法**: ```swift 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 必需配置**: ```xml FSExtension FSExtensionPersonality MyFS FSShortName MyFS FSObjectsAreCaseSensitive FSSupportsBlockDevices FSPrimaryClass MyFS ``` **Without this, extension won't load!** --- ## Entitlements(CRITICAL) ```xml com.apple.security.app-sandbox com.apple.security.files.user-selected.read-write ``` --- ## Protocol Hierarchy **FSVolume 必须实现多个 protocol**: ```swift 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 **创建测试块设备**: ```bash mkfile -n 100m dummy hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount dummy # Output: disk18 ``` **挂载**: ```bash mkdir /tmp/TestVol mount -t MyFS disk18 /tmp/TestVol ``` **卸载**: ```bash umount /tmp/TestVol ``` --- ## HelloFS 修正清单 **立即修正**: 1. ✅ 改 `UnaryFilesystemExtension` → `FSKitExtension` 2. ✅ 改 `FSUnaryFileSystem` → `FSFileSystem` 3. ✅ 添加 `replyHandler` 参数 4. ✅ 添加 `options: FSTaskOptions` 参数 5. ✅ 创建 Info.plist 配置 6. ✅ 实现 13+ protocols 7. ✅ 创建 entitlements ---