FSNotes 全解析:基于 Markdown 的快速原生笔记管理器(macOS/iOS)
桌面应用移动开发知识管理【免费下载链接】fsnotesFast Markdown note-taking app for Mac and iPhone项目地址https://gitcode.com/gh_mirrors/fs/fsnotes点击查看免费下载FSNotes 是一款使用 Swift 5 编写、以 MIT 许可证开源的笔记应用覆盖 macOS 与 iOS 两大平台。它的核心理念是Own your notes. Find them instantly.——所有笔记都以可移植的 Markdown 或纯文本文件形式保存在本地磁盘而非锁死在专有数据库中。本文将围绕官方 READMEEnglish / 简体中文 / 繁體中文展开结合本仓库源码逐项拆解其核心特性、加密机制、代码高亮、Git 备份等底层实现帮助你理解它的设计取舍也能指导你基于源码进行二次开发或功能扩展。FSNotes for macOS 界面截图项目定位无锁定、快速、围绕你的工作流FSNotes 的目标用户是希望笔记数据真正属于自己的人。官方文档从三个维度概括了它的差异化价值No lock-in无锁定笔记是开放格式的普通文件任何时候都可以用任何兼容的编辑器打开和修改Fast at any scale任意规模下依然快速官方描述其能够在 10,000 条笔记的集合中流畅搜索与导航Built around your workflow围绕你的工作流支持多文件夹、外部编辑器、iCloud Drive、Dropbox以及可选的 Git 备份。在代码层面这一文件即笔记的设计体现在 Note.swift 的核心模型中每条Note都持有url、project、container、type等属性其中url直接指向磁盘上的实际文件路径而不是数据库记录的主键。笔记的标题、预览、标签、置顶状态等元数据虽然部分借助 Core Data 缓存见 FSNotes/Model/但内容的真实载体始终是文件本身。笔记格式与容器从纯文本到加密文本包扩展名与 Markdown 识别NoteType.swift 定义了 FSNotes 的笔记类型模型。目前核心类型只有Markdown其扩展名解析逻辑为static func withExt(rawValue: String) - NoteType { switch rawValue { case markdown, md, mkd, txt: return NoteType.Markdown default: return NoteType.Markdown } }也就是说.markdown、.md、.mkd、.txt后缀的文件都会被识别为 Markdown 笔记这与 README 中优先支持 Markdown也支持任何纯文本文件的表述一致。新笔记的默认扩展名由 UserDefaultsManagement.swift 中的noteExtension决定默认值为markdown用户可在偏好设置中修改。四种文件容器笔记不仅要能存还要能装下图片、附件和加密内容FSNotes 为此设计了 NoteContainer.swift 中的四种容器容器枚举值扩展名/UTI用途.none0x01无单文件纯文本/Markdown.textBundle0x02com.apple.packageTextBundle 文件夹包.textBundleV20x03com.apple.packageTextBundle v2.textbundle目录.encryptedTextPack0x04es.fsnot.etp.package加密文本包.etp文件其中.etpEncryptedTextPack是 FSNotes 实现加密笔记/加密文件夹的载体它先把笔记连同附件打成.textpackzip 包再对整个包做 AES 加密形成单一加密文件。iOS 版 README 中提到的TextBundle 与 EncryptedTextBundle 容器正是基于这套模型。快速搜索与导航面向 10k 笔记的工程化设计README 强调Fast at any scale这在源码中有多处佐证。笔记加载采用缓存优先策略Note.swift 中定义了isLoadedFromCache、cacheLock、cacheHash等字段说明 FSNotes 会先读取文件系统的元数据缓存见 NoteMeta.swift避免每次启动都全量解析文件内容。而 Storage.swift 作为全局存储管理中枢Storage.shared()统一负责笔记枚举、去重、文件监听与目录映射。搜索结果的组织则依赖侧边栏体系。SidebarItemType.swift 定义了完整的导航节点类型All全部笔记、Trash废纸篓、Todo待办、Inbox收件箱、Tag标签、Project项目/文件夹、Untagged未打标签、ProjectEncryptedLocked/ProjectEncryptedUnlocked加密项目锁定/解锁状态等每个类型还绑定了对应的侧边栏图标资源如sidebar_notes、sidebar_trash、sidebar_project_encrypted_locked见 FSNotes/Images.xcassets/。这意味着搜索和过滤本质上是在侧边栏定义的视图之上叠加查询条件。标签与双括号链接组织知识的两种方式支持层级结构的标签FSTag.swift 实现了完整的树形标签结构。标签名以/分隔即可表达层级例如work/report会被自动拆分为父标签work与子标签reportinit(name: String, parent: FSTag? nil) { self.name name self.parent parent let tags name.components(separatedBy: /) if tags.count 1, let parent tags.first { addChild(name: tags.dropFirst().joined(separator: /), completion: {(_, _, _) in }) self.name parent return } }FSTag还提供了getFullName()拼接完整路径、getAllChild()广度优先遍历全部子标签、isExpandable()是否有子标签等接口支撑侧边栏中可展开/折叠的标签树交互。笔记侧则在 Note.swift 中以tags: [String]数组保存标签列表。[[双括号]]跨笔记链接README 提到的[[双括号]]链接用于在笔记之间建立双向关联。这部分能力由 NotesTextProcessor.swift 与 TextStorageProcessor.swift 等文本处理模块在编辑与预览流程中解析配合预览引擎把[[Note Title]]渲染为可点击的内部链接。对于以知识管理为目标的用户这是连接 Zettelkasten 式笔记网络的关键特性。代码块语法高亮内置 34 种语言FSNotes 自研了轻量级高亮引擎 SwiftHighlighter位于 FSNotesCore/SwiftHighlighter/其初始化阶段一次性注册了 Swift、PHP、JavaScript、SQL、Python、C、C、Java、Go、Rust、C#、Kotlin、Ruby、Shell、TypeScript、Mermaid 等三十余种语言定义见 SwiftHighlighter.swift每种语言还支持别名例如 Mermaid 的别名mermaid/mmd见 Mermaid.swift。高亮的开关与主题均由偏好设置控制UserDefaultsManagement.swift 中的codeBlockHighlight常量对应代码块高亮开关而配色方案在Themes/目录下提供 Atom One Dark/Light、GitHub Dark/Light、Solarized Dark/Light 等六套主题。值得说明的是README 中支持超过 170 种编程语言的表述来自官方文档就本仓库源码而言SwiftHighlighter/Languages/ 目前收录了 34 个语言定义文件其中部分语言定义包含多种别名映射。Mermaid 与 MathJax图表与数学公式渲染FSNotes 在预览模式下通过内置的 MPreview 引擎MPreviewView.swift渲染复杂内容MathJaxgetMathJaxJS()方法在用户开启mathJaxPreview偏好后注入 MathJax 脚本并配置了行内公式与块级公式的分隔符——$...$、\\(...\\)、$$...$$见 MPreviewView.swift因此你可以在笔记中直接书写 LaTeX 数学公式Mermaid注册了独立的 Mermaid 语言定义配合预览模板中的 JavaScript 脚本将 mermaid 代码块渲染为流程图、时序图等矢量图。这两项能力使得 FSNotes 不仅能做纯文本记录还能承载技术文档、论文草稿等富内容场景。AES-256 加密从单条笔记到整个文件夹加密是 FSNotes 的进阶功能其底层实现集中在 Note.swift 中依赖RNCryptorAES-256与SSZipArchive加密encrypt(password:)将笔记内容连同资源文件打包为.textpackzip再用RNCryptor.encrypt(data:withPassword:)整体加密写入.etp文件同时把container切换为.encryptedTextPack见 Note.swift解锁unLock(password:)读取.etpRNCryptor.decrypt解密出.textpack解压到临时.textbundle目录后加载内容并将解出的密码保存在内存中见 Note.swift主密码Master Password写回加密内容时若当前没有会话密码会从 Keychain 读取主密码KeychainPasswordItem(service: KeychainConfiguration.serviceName, account: Master Password)见 Note.swift相关封装位于 KeychainPasswordItem.swift。加密能力同样作用于整个项目文件夹侧边栏中存在ProjectEncryptedLocked/ProjectEncryptedUnlocked两种项目状态见 SidebarItem.swift对应 README 中加密文件夹特性iOS 端偏好设置中的主密码管理界面见 Preferences/MasterPasswordViewController.swift。可选的 Git 版本控制与备份README 将 Git 备份列为可选特性而本仓库内置了一套完整的 libgit2 封装位于 FSNotesCore/Git/涵盖仓库管理RepositoryManager.swift 负责初始化 libgit2 环境initRepository(at:signature:bare:shared:)创建仓库并自动生成 Initial commit 初始提交cloneRepository(fromRemoteUrl:...)支持从远程地址克隆日常操作Index、Head、Status、Remote、Branch、Tag等模块分别对应 git 的暂存区、HEAD、工作区状态、远程仓库、分支与标签操作认证authentication/ 提供KeyAuthenticationSSH 密钥与PasswordAuthentication密码两种方式StaticSshKeyDelegate.swift 负责在 SSH 会话中提供密钥回调。对用户而言这意味着可以在 iCloud Drive / Dropbox 同步之外再叠加一层版本历史保障——每一次提交都是一份可回退的快照而且由于笔记本体是普通文本文件Git 差异对比清晰可读。Git 配置入口在 macOS 端的 Preferences/PreferencesGitViewController.swift 与 iOS 端的 Preferences/GitViewController.swift。双平台体验macOS 与 iOSmacOS提供弹性两窗格视图可切换垂直/水平布局、外部编辑器实时同步、快速复制笔记到剪贴板、暗黑模式、置顶笔记等能力相关实现集中在 FSNotes/View/如 EditorSplitView.swift 负责分栏布局与 FSNotes/ViewController.swiftiOS通过 iCloud Drive 同步支持分享扩展见 FSNotes iOS Share/ShareViewController.swift、可配置键盘、动态字体、暗黑模式并保留与桌面端一致的置顶、加密、Git 集成能力README 提到的 3D Touch 是 iOS 平台能力当前仓库中通过 Helpers/SingleTouchDownGestureRecognizer.swift 等手势识别器实现触控交互的兼容处理。FSNotes for iOS 界面截图开源与许可Swift 5 MITFSNotes 采用Swift 5编写遵循MIT 许可证见 LICENSE。它通过 Mac App Store / App Store 销售来支持持续开发而源代码完全开放——这意味着你可以阅读 FSNotesCore/Business/ 学习笔记核心模型与存储层设计参考 FSNotesCore/SwiftHighlighter/ 理解轻量级语法高亮引擎的架构借助 FSNotesCore/Git/ 研究 libgit2 的 Swift 封装方式以 FSNotesCore/UserDefaultsManagement.swift 为索引掌握全部用户偏好项与默认值。整个仓库包含 macOS 应用FSNotes/、iOS 应用FSNotes iOS/、iOS 分享扩展FSNotes iOS Share/与共享核心库FSNotesCore/四个部分是研究跨平台原生笔记应用工程化实践的优质样本。克隆后可直接打开 FSNotes.xcworkspace 在 Xcode 中构建运行需注意仓库内存在 iCloud 与非 iCloud 两套 entitlements 配置见 FSNotes (CloudKit).entitlements.entitlements) 与 FSNotes.entitlements。赞分享桌面应用移动开发知识管理【免费下载链接】fsnotesFast Markdown note-taking app for Mac and iPhone项目地址https://gitcode.com/gh_mirrors/fs/fsnotes点击查看免费下载相关推荐从attr_accessible到Strong ParametersRails参数保护的演进之路从attr_accessible到Strong ParametersRails参数保护的演进之路 在Ruby on Rails开发中参数保护始终是确保应用安后端应用安全FSNotes: 开源笔记管理器深度解析与实战指南FSNotes: 开源笔记管理器深度解析与实战指南 1. 项目介绍 FSNotes 是一款专为 macOS 和 iOS 设计的现代化笔记管理工具它不仅遵循简洁桌面应用移动开发知识管理推荐FSNotes——跨平台的现代笔记管理器推荐FSNotes——跨平台的现代笔记管理器 项目简介 FSNotes 是一款专为 macOS 和 iOS 设计的现代化笔记管理工具以其高效、轻量级和功能强桌面应用移动开发知识管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考