让Knockoff跑在Safari上:Xcode包装工程与sync-safari.sh同步工作流完全指南
让Knockoff跑在Safari上Xcode包装工程与sync-safari.sh同步工作流完全指南【免费下载链接】knockoffChrome extension that filters pseudo-brand junk out of Amazon. Buy from real, established brands.项目地址: https://gitcode.com/gh_mirrors/knoc/knockoffKnockoff 是一款免费的 Amazon 品牌过滤扩展能在搜索结果中识别并过滤商标抢注的伪品牌让你只从真正的成熟品牌下单。不过和 Chrome、Firefox 不同Safari 不允许直接加载已解压扩展——它要求把扩展包装进一个原生 App。本文带你完整走通 Knockoff 的 Safari 上架工作流看懂safari/下的 Xcode 包装工程、掌握scripts/sync-safari.sh一键同步脚本并了解 macOS 与 iOS 双平台发布流程。为什么 Safari 需要一层原生包装Safari Web 扩展的强制架构是原生宿主 App 扩展 Appex.appex Web 扩展资源三层结构层级在仓库中的位置作用macOS 宿主 Appsafari/Knockoff/Knockoff/承载扩展的入口含启用我引导界面Web 扩展资源safari/Knockoff/Knockoff Extension/Resources/真正的扩展本体manifest 脚本 数据Appex 胶水层safari/Knockoff/Knockoff Extension/Safari 与扩展之间的消息通道其中 Appex 的 Info.plist 声明了关键的扩展点com.apple.Safari.web-extension这是 Safari 识别这是一个 Web 扩展的唯一依据而 SafariWebExtensionHandler.swift 则负责处理扩展与原生层之间的消息往返。macOS 宿主 App 的代码非常轻ViewController.swift 用 WKWebView 加载本地引导页并在页面加载完成后查询扩展的启用状态让用户能一键跳转到 Safari 偏好设置中开启扩展。iOS 侧则对应safari/Knockoff/Knockoff iOS/目标SwiftUI 的启用我界面两个平台共用同一个 bundle idshopping.knockoff.Knockoff细节可参考 IOS-TARGET-SETUP.md。关键点Xcode 工程里携带的是扩展文件的副本而不是引用仓库根目录。这就引出了本文的主角——同步脚本。sync-safari.sh 深度解析3 步保持副本与源头一致每次修改 manifest.json、src/、data/、options/、onboarding/ 或 icons/ 之后都要运行 scripts/sync-safari.sh再回 Xcode 重新构建。这个脚本只做三件事第 1 步rsync 镜像同步第 12 行rsync -a --delete src data options onboarding icons $RES_DIR/--delete让目标目录成为源目录的严格镜像——你在仓库里删掉的文件副本里也会被删掉避免僵尸文件混进构建产物。第 2 步拷贝 manifest第 13 行manifest.json单独用cp复制因为它位于仓库根目录而非上述目录中。第 3 步版本号全局对齐第 18–20 行脚本从manifest.json读出当前版本然后用sed替换project.pbxproj里所有目标的MARKETING_VERSION——macOS App、iOS App、扩展三处一次对齐。这保证 Safari App Store 上显示的版本号与 Chrome、Firefox 商店完全一致杜绝三个商店三个版本号的尴尬。完整工作流从改代码到 Safari 重建5 步上手 日常开发只需记住这条流水线在仓库根目录修改扩展代码如 src/content.js 或 src/detector.js运行node tests/run.js验证检测逻辑项目唯一测试命令无需构建步骤执行scripts/sync-safari.sh看到Synced extension into Safari project (vX.Y.Z).提示用 Xcode 打开 safari/Knockoff/Knockoff.xcodeproj运行KnockoffmacOS或Knockoff iOSiOS/iPadscheme到 Safari → 设置 → 扩展中启用 Knockoff打开一个 Amazon 搜索页验证徽标是否出现⚠️本地未签名构建的小坑直接在 Xcode 跑出来的构建没有 Apple 签名Safari 默认拒绝加载。先在 Safari 的菜单开发 → 允许未签名的扩展中打开开关否则重建后扩展不会生效——这是新手最常见的我明明重建了却没变化的原因。Safari 发布流水线release-safari.sh 一条命令双平台上传当要正式发版时scripts/release-safari.sh 会自动串联整个流程先调用sync-safari.sh确保资源是最新的从manifest.json取版本号用当前时间戳生成 build number依次对两个 scheme 执行xcodebuild archivemacOS → scheme Knockoff → generic/platformmacOS iOS → scheme Knockoff iOS → generic/platformiOS用自动签名signingStyle automatic导出并上传到 App Store Connect上传完成后用 scripts/submit-appstore.rb 分别为 macOS 和 iOS 提交审核./scripts/submit-appstore.rb --platformMAC_OS ./scripts/submit-appstore.rb --platformIOS前提条件Xcode 已登录开发者团队、App Store Connect 中shopping.knockoff.Knockoff的记录已启用 macOS 与 iOS 两个平台。常见问题排查清单症状原因解决办法重建后 Safari 里没反应未签名构建被系统拦截Safari 菜单开发→ 勾选允许未签名的扩展商店版本号没更新忘了跑同步脚本重新运行scripts/sync-safari.sh版本号自动从 manifest 对齐副本里残留已删除的文件手动拷贝而非脚本同步始终用sync-safari.sh它的rsync --delete会清理iOS 构建失败平台未配置参考 IOS-TARGET-SETUP.md 完成 App ID 与 App Store Connect 平台设置怀疑 Xcode 工程结构有问题想核对 scheme 列表运行xcodebuild -project safari/Knockoff/Knockoff.xcodeproj -list查看两个 Shared scheme小结Knockoff 的 Safari 支持可以概括为一句话扩展本体写在仓库根目录Xcode 工程持有副本sync-safari.sh是两者之间唯一的桥梁。只要养成改完代码 → 跑脚本 → 重建的肌肉记忆macOS 与 iOS 的 Safari 发版就会像 Chrome、Firefox 一样顺畅。如果你也在维护一个多浏览器扩展项目这套源头 镜像副本 版本对齐的模式非常值得借鉴。【免费下载链接】knockoffChrome extension that filters pseudo-brand junk out of Amazon. Buy from real, established brands.项目地址: https://gitcode.com/gh_mirrors/knoc/knockoff创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

SRAM Number of Banks配置:功耗、时序与面积权衡的工程实践

SRAM Number of Banks配置:功耗、时序与面积权衡的工程实践

芯片前端工程师应该都有过这种经历:Memory Compiler生成的SRAM明明看起来“够大”,综合布线之后却发现时序收敛不了,功耗也压不下去,最后把目光投向GUI里那个默认是1的Number of banks选项,情况才有了转机。这个选项写…

2026/11/10 16:58:48 阅读更多 →
ATPG覆盖率卡死?从故障模型到约束优化的DFT提升实践

ATPG覆盖率卡死?从故障模型到约束优化的DFT提升实践

做DFT的工程师应该都体会过这种时刻:ATPG跑了一整天,打开覆盖率报告一看,卡在94.3%再也不动了。上头催着tapeout,质量部门咬着缺陷率不放,你盯着那台机器的RTL和网表,不知道还能从哪再榨出几个百分点的cove…

2026/11/9 3:17:11 阅读更多 →
Java学生成绩管理系统源码解析:JDBC与Servlet的Web开发实战

Java学生成绩管理系统源码解析:JDBC与Servlet的Web开发实战

简介:这是一套基于JAVA与MYSQL开发的学生成绩管理系统项目文件,面向正在学习Java GUI编程、数据库应用或准备课程设计的开发者。系统覆盖学生信息管理、成绩录入查询、选课管理、数据统计分析以及用户权限控制等模块,能帮助理解一个完整管理系…

2026/10/27 10:52:47 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻