Files
markbase/docs/FSKIT_SAMPLE_ANALYSIS.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  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)
2026-06-12 12:59:54 +08:00

3.9 KiB
Raw Blame History

KhaosT/FSKitSample 分析

Repository 信息


关键发现 (修正 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

关键发现:所有方法需要 replyHandleroptions 参数

错误用法

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 ConfigurationCRITICAL

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!


EntitlementsCRITICAL

<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 修正清单

立即修正

  1. UnaryFilesystemExtensionFSKitExtension
  2. FSUnaryFileSystemFSFileSystem
  3. 添加 replyHandler 参数
  4. 添加 options: FSTaskOptions 参数
  5. 创建 Info.plist 配置
  6. 实现 13+ protocols
  7. 创建 entitlements