需遵循苹果json规范开发safari内容拦截器:一、编写符合语法的blocking_rules.json;二、通过xcode创建content blocker扩展并配置info.plist;三、使用启用safari extensions的provisioning profile签名;四、在设备设置中手动启用;五、用console.app和network面板调试验证。

如果您希望为Safari浏览器创建自定义的内容拦截器(Content Blocker),需遵循苹果官方规定的JSON规则与打包规范。以下是开发Safari Content Blocker扩展的具体步骤:
一、准备内容拦截规则文件(content blocker rules.json)
Safari内容拦截器的核心是符合Apple规范的JSON格式规则文件,该文件定义了哪些网络请求应被阻止或隐藏。规则必须严格遵循Apple定义的语法结构,不可包含JavaScript逻辑或动态表达式。
1、新建一个纯文本文件,命名为blocking_rules.json。
2、在文件中编写符合Apple Content Blocker语法的规则数组,例如使用
3、确保每条规则的trigger中url-filter字段使用正则语法子集(非完整PCRE),且action类型仅限block、ignore-previous-rules、css-display-none三种。
二、构建App Extension目标并配置Info.plist
Content Blocker必须作为iOS或macOS App中的App Extension存在,不能独立分发。主App需声明extension类型,并正确配置权限与标识符。
1、在Xcode中为现有App项目添加新的Target,选择Safari Content Blocker模板。
2、打开新生成的Extension目录下的Info.plist,确认NSExtension字典中NSExtensionPointIdentifier值为com.apple.content-blocker。
3、将上一步生成的blocking_rules.json拖入Extension的Bundle中,并确保其位于Bundle根路径下。
三、签名与配置开发者证书及Provisioning Profile
Safari Content Blocker Extension必须使用有效的Apple Developer证书签名,且Provisioning Profile需启用“Safari Extensions”功能,否则无法在真机或Safari中启用。
1、登录Apple Developer网站,在Certificates, Identifiers & Profiles中创建专用的App ID,勾选Safari Extensions功能。
2、生成对应App ID的Development/Production Provisioning Profile,并下载安装到Xcode中。
3、在Xcode的Extension Target的Signing & Capabilities面板中,选择该Profile及对应的Developer Team,确保Build Settings中Code Signing Identity设置为Apple Development证书。
四、在设备上启用并测试Content Blocker
编译并运行Extension后,需手动在系统设置中启用该拦截器,之后Safari才会加载并应用规则。测试阶段必须使用真实设备,模拟器不支持Content Blocker运行。
1、运行App后,前往iOS设备的设置 → Safari → 内容拦截器(或macOS的Safari → 偏好设置 → 扩展)。
2、找到已安装的Extension名称,开启其开关。
3、启动Safari,访问含匹配规则的网页(如含广告域名或特定CSS选择器的页面),观察资源是否被阻断或元素是否被隐藏。
五、调试与验证规则有效性
Apple不提供运行时日志接口,但可通过Safari Web Inspector的Network标签页观察请求是否被取消,或使用Console.app筛选“ContentBlocker”关键词查看系统级加载状态。
1、在Mac上打开Console.app,在搜索栏输入ContentBlocker,筛选系统日志。
2、重启Safari后检查日志中是否出现Loaded rules from bundle identifier及对应Bundle ID,确认规则已成功加载。
3、若规则未生效,在JSON文件中逐条注释规则并重新部署,定位导致解析失败的具体rule对象(如url-filter含非法字符或缺少必需字段)。










