ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用Transformers库部署TimesFM-20M_2023_Augmented:开发者完全指南

用Transformers库部署TimesFM-20M_2023_Augmented:开发者完全指南

Hush开发入门教程:从零开始构建你的第一个Safari内容拦截器

【免费下载链接】hush🤫 Noiseless Browsing – Content Blocker for Safari项目地址: https://gitcode.com/gh_mirrors/hu/hush

想要为Safari浏览器开发一个高效、隐私友好的内容拦截器吗?Hush是一个开源的Safari内容拦截器项目,专门用于屏蔽烦人的Cookie弹窗和隐私追踪请求。这篇完整的Hush开发指南将带你从零开始,掌握构建Safari内容拦截器的核心技术。无论你是iOS/macOS开发者,还是对浏览器扩展开发感兴趣,这篇教程都会为你提供实用的开发知识和最佳实践。

🚀 Hush项目简介与核心功能

Hush是一个轻量级的Safari内容拦截器应用,专注于为用户提供无干扰浏览体验。这个开源项目采用SwiftUI构建,支持iOS和macOS双平台,主要功能是屏蔽网站上的Cookie同意弹窗和隐私追踪脚本。

核心优势

  • 完全免费且开源(MIT许可证)
  • 不收集任何用户数据
  • 应用体积小于0.5MB
  • 原生支持M1芯片
  • 无需配置,安装即用

Hush应用启用状态图标,显示两个眼睛图标表示功能已激活

📦 开发环境搭建与项目结构

系统要求

  • macOS 11.0或更高版本
  • Xcode 12.0或更高版本
  • Deno运行时环境

环境配置步骤

  1. 安装Deno包管理器:

    brew install deno xcode-select --install
  2. 克隆Hush项目仓库:

    git clone https://gitcode.com/gh_mirrors/hu/hush cd hush
  3. 打开Xcode项目:

    open Hush.xcodeproj

项目目录结构解析

Hush项目采用了清晰的模块化结构:

├── Shared/ # 共享代码(iOS和macOS通用) │ ├── Assets.xcassets/ # 应用资源文件 │ ├── Models/ # 数据模型 │ │ └── AppState.swift # 应用状态管理 │ ├── Views/ # 用户界面组件 │ │ ├── ContentView.swift # 主界面 │ │ ├── EnabledView.swift # 启用状态界面 │ │ └── InstructionsView.swift # 使用说明界面 │ └── Extensions/ # 扩展功能 ├── data/ # 过滤规则数据 │ ├── generic.txt # 通用隐藏规则 │ ├── site-specific.txt # 网站特定规则 │ ├── third-party.txt # 第三方追踪规则 │ └── ignored.txt # 忽略列表 ├── scripts/ # 构建脚本 │ └── src/ # JavaScript脚本源码 └── docs/ # 项目文档

🔧 核心代码实现解析

应用入口点分析

Hush的主应用结构在Shared/HushApp.swift文件中定义。这是一个跨平台的SwiftUI应用,使用了@main属性标记应用入口:

@main struct HushApp: App { let contentBlockerIdentifier = "se.oblador.Hush.ContentBlocker" let appState = AppState(initialContentBlockerEnabledState: .undetermined) var body: some Scene { #if os(macOS) // macOS特定配置 #else // iOS特定配置 #endif } }

内容拦截器状态管理

应用状态管理在Shared/Models/AppState.swift中实现,使用SwiftUI的ObservableObject协议来响应状态变化:

enum ContentBlockerEnabledState { case undetermined case disabled case enabled } class AppState: ObservableObject { @Published var contentBlockerEnabledState: ContentBlockerEnabledState // 状态管理逻辑 }

用户界面组件设计

Hush的主界面Shared/Views/ContentView.swift根据内容拦截器的启用状态动态显示不同视图:

struct ContentView: View { @EnvironmentObject var appState: AppState var body: some View { VStack(alignment: .leading, spacing: 40) { Image(self.appState.contentBlockerEnabledState == .disabled ? "Disabled" : "Enabled") .resizable() .renderingMode(.template) .foregroundColor(.invertedBackgroundColor) .frame(width: 200, height: 155) // 根据状态显示不同视图 switch(self.appState.contentBlockerEnabledState) { case .disabled: InstructionsView() case .enabled: EnabledView() case .undetermined: nil } } } }

Hush应用禁用状态图标,显示交叉的眼睛图标表示功能未激活

🛠️ 过滤规则系统详解

规则文件结构

Hush的过滤规则存储在data/目录中,采用Adblock Plus格式:

  • generic.txt- 通用Cookie弹窗隐藏规则
  • site-specific.txt- 特定网站优化规则
  • third-party.txt- 第三方追踪脚本拦截规则
  • ignored.txt- 需要忽略的网站列表

规则语法示例

! 注释以感叹号开头 ###privacy-policy-banner ! 隐藏ID为privacy-policy-banner的元素 ##[class^="gdpr-notice"] ! 隐藏class以"gdpr-notice"开头的元素 ##.cookie-card ! 隐藏class为"cookie-card"的元素

规则编译与构建

Hush使用Deno脚本编译过滤规则。构建过程在Makefile中定义:

blocklist: deno run --allow-read=./data --allow-env=MINIFY scripts/build-blocklist.js xcode: mkdir -p "$(CONFIGURATION_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)" MINIFY=1 make blocklist --silent > "$(CONFIGURATION_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/blockerList.json"

🧪 测试与调试技巧

单元测试执行

Hush项目包含完整的测试套件,可以通过Make命令运行:

# 运行所有测试 make test # 仅运行单元测试 make test_unit # 运行UI测试 make test_ui

内容拦截器调试

  1. 检查状态:使用SFContentBlockerManager.getStateOfContentBlockerAPI检查拦截器状态
  2. 重新加载规则:调用SFContentBlockerManager.reloadContentBlocker强制重新加载规则
  3. Safari调试:在Safari开发工具中检查被屏蔽的元素

常见问题排查

  • 规则不生效:检查规则语法是否正确,确保元素选择器匹配
  • 网站崩溃:某些网站可能依赖被屏蔽的脚本,需要在ignored.txt中添加例外
  • 性能问题:优化规则数量,避免使用过于宽泛的选择器

📱 跨平台开发最佳实践

iOS与macOS共享代码

Hush充分利用了SwiftUI的跨平台能力,在Shared/HushApp.swift中实现了条件编译:

#if os(macOS) // macOS特定代码 WindowGroup { ContentView() .frame(minWidth: 320, idealWidth: 350, maxWidth: 500) .windowStyle(HiddenTitleBarWindowStyle()) } #else // iOS特定代码 WindowGroup { ZStack { Color.appBackgroundColor.ignoresSafeArea() ContentView() } } #endif

资源文件管理

应用图标和图片资源存储在Shared/Assets.xcassets/目录中,支持多分辨率和深色模式。

🔄 持续集成与自动化

外部规则更新

Hush使用scripts/fetch-external.js脚本自动获取外部过滤规则:

make fetch_external

构建自动化

项目构建过程完全自动化,Xcode构建时会自动执行:

  1. 下载外部规则
  2. 编译规则文件
  3. 生成最终的blockerList.json

🎯 扩展与自定义开发

添加新过滤规则

  1. 在相应的.txt文件中添加新规则
  2. 运行测试确保规则有效
  3. 重新构建应用

自定义界面元素

通过修改Shared/Views/目录中的SwiftUI文件,可以自定义应用界面。

集成其他功能

Hush的模块化设计使得添加新功能变得简单,例如:

  • 添加规则订阅功能
  • 实现用户自定义规则
  • 添加网站白名单管理

📚 学习资源与进阶指南

官方文档资源

  • Safari内容拦截器官方文档:Apple Developer Documentation
  • SwiftUI官方教程:SwiftUI Tutorials
  • Deno官方文档:Deno Manual

性能优化建议

  1. 规则优化:定期清理无效规则,合并相似规则
  2. 内存管理:监控应用内存使用,避免内存泄漏
  3. 启动速度:优化应用启动时间,减少初始化开销

隐私保护最佳实践

Hush严格遵循隐私保护原则:

  • 不收集用户浏览数据
  • 不在设备外传输任何信息
  • 提供完全透明的开源代码

🚀 下一步行动计划

初学者任务清单

  1. ✅ 搭建开发环境
  2. ✅ 理解项目结构
  3. ✅ 运行示例应用
  4. 🔄 修改界面元素
  5. 🔄 添加自定义规则
  6. 🔄 测试修改效果

进阶开发方向

  1. 性能优化:分析并优化规则匹配算法
  2. 功能扩展:添加规则导入/导出功能
  3. 用户体验:改进设置界面和用户反馈
  4. 平台扩展:考虑支持其他浏览器平台

通过这篇Hush开发入门教程,你已经掌握了构建Safari内容拦截器的核心技术。无论是想要创建自己的隐私保护工具,还是学习SwiftUI跨平台开发,Hush项目都提供了绝佳的学习范例。记住,优秀的开发者不仅要会写代码,更要理解代码背后的设计理念和用户体验考量。

开始你的Hush开发之旅吧!🎉

【免费下载链接】hush🤫 Noiseless Browsing – Content Blocker for Safari项目地址: https://gitcode.com/gh_mirrors/hu/hush

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表