让Knockoff跑在Safari上:Xcode包装工程与sync-safari.sh同步工作流完全指南

发布时间:2026/10/8 14:59:35
让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),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询