# 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
---