Safari 扩展自动更新
Posted
技术标签:
【中文标题】Safari 扩展自动更新【英文标题】:Safari extension automatic update 【发布时间】:2016-02-10 07:17:24 【问题描述】:我正在尝试在我的 Safari 扩展程序上设置自动更新,但它似乎不起作用。这是我到目前为止所尝试的。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Extension Updates</key>
<array>
<dict>
<key>CFBundleIdentifier</key>
<string>com.COMPANY_NAME.safari.EXTENSION_NAME</string>
<key>Developer Identifier</key>
<string>MY_IDENTIFIER</string>
<key>CFBundleVersion</key>
<string>4</string>
<key>CFBundleShortVersionString</key>
<string>4</string>
<key>URL</key>
<string>PATH_TO_EXTENSION_DOWNLOAD</string>
</dict>
</array>
</dict>
</plist>
据我了解,只要下载了扩展程序的人打开安装了我的扩展程序的 Safari,它就会 ping 扩展程序构建器中设置的“更新清单 URL”。如果版本与下载 URL 上的扩展名不匹配,则会进行更新。
.plist 文件在我的服务器上,并且扩展程序正在从服务器提供,并且“更新清单 URL”设置正确。我可以从我的网站下载扩展程序,但是当我上传新的扩展程序版本并更新 plist 文件时,系统不会提示我在 Safari > 首选项 > 扩展程序中更新我的扩展程序。
我一直在做的事情中可能缺少什么吗?
【问题讨论】:
【参考方案1】:尝试将计算机上的日期设置为一天或未来。我认为 Safari 每天只检查一次更新。还是您已经解决了这个问题?
【讨论】:
【参考方案2】:我会尝试直接点击您的“更新清单”网址,并确保它调用的文件确实是比您拥有的当前扩展名更大的版本。如果检查正常,那么您当前版本的扩展可能没有设置更新清单 URL,因此根本不会调用您的更新文件!
在这种情况下,您需要找出当前版本指向的更新清单 URL 并将您的 update.plist 文件上传到那里,并在每次发布时不断执行此操作,以防 v1.0 的用户(有更新问题)即将到来当 v3.0 使用新的更新 url 退出时,他们需要一种方法来打破他们对旧更新清单 url 的依赖......或者要求新用户直接从服务器安装您的更新版本,并设置正确的更新清单 URL 字段以及您在上面发布的 update.plist。
作为测试,我将从您的服务器安装最新版本的扩展,关闭 safari 偏好设置中的自动更新,以便在有新版本时通知您,然后将版本升级到 4.0.1 或其他较小的版本,然后将新文件上传到服务器。然后重新启动 safari 并查看 safari 扩展首选项中是否有任何触发。
【讨论】:
【参考方案3】:我已经验证了使用 Wireshark 更新服务器的通信。似乎 Safari 会检查 updates.plist (在扩展 Info.plist 中指定为
<key>Update Manifest URL</key>
<string>URL/updates.plist</string>
) 任何时候访问首选项 -> 扩展 -> 更新。如果服务器以 304 Not Modified 响应,Safari 将不采取进一步措施。如果 plist 包含更新版本的扩展(并且它是 plist 中的唯一版本),Safari 会下载并更新扩展。
【讨论】:
以上是关于Safari 扩展自动更新的主要内容,如果未能解决你的问题,请参考以下文章
Zoom支持自动生成字幕;SharePlay上线;Safari 更新导致大量bug |WebRTC风向