Firefox附加组件。关于发布/更新过程的困惑

时间:2014-05-08 14:09:24

标签: firefox-addon

我已经通过SDK创建了一个Firefox插件。

用户应该可以直接从我的网页安装。我按照这些指示https://developer.mozilla.org/en-US/docs/Installing_Extensions_and_Themes_From_Web_Pages

尚未经过审核/批准。

然而,我很困惑:

1)即使Mozilla图库中没有提供附加组件,附加组件是否必须经过审核过程?

我在尝试安装时遇到错误(“..与Firefox预期的附加组件不匹配。”)并且不知道这是否是因为其未经审核的状态。

2)看起来更新也必须经过审核过程。要使批准的更新生效,人们是否需要通过图库安装附加组件?或者他们可以通过我的网站添加它吗?有没有办法自动更新未经审核/批准的附加组件。

3)审批流程需要多长时间?发布附加组件真的需要几周时间吗?什么是'正常'?

更新怎么样?如果我发现代码中存在错误,或者需要进行改进,那么修复是否真的需要10天(!)才能应用于所有用户!?

3b)我的加载项仅在用户登录我的服务/网站时有效。它从网站收集数据,需要知道要将其发送到哪个帐户。如果您尚未登录,则会收到一条消息,请您登录。这样的附加组件是否可以获得批准?测试更加麻烦。

4)当我写这个附加组件时,我认为这与创建Chrome扩展程序类似,这实际上是即时的。 相反,这似乎是一个风险很大的繁琐过程;特别是缓慢的更新过程是风险因素。或者,我完全误解了什么?

1 个答案:

答案 0 :(得分:2)

  

1)即使Mozilla图库中没有提供附加组件,附加组件是否必须经过审核过程?

在撰写本文时:是的,您可以自行托管/自行发布您的插件。

我们为一些附加组件的夜间版本执行此操作,例如https://github.com/scriptish/scriptish-nightlies/releaseshttps://code.downthemall.net/nightly/

  

我在尝试安装时遇到错误(“..与Firefox预期的附加组件不匹配。”)并且不知道这是否是因为其未经审核的状态。

当提供的哈希与您提供的XPI不匹配时,这是您获得的错误(或者在使用安装触发器时可能无法提供哈希)。

  

2)看起来更新也必须经过审核过程。要使批准的更新生效,人们是否需要通过图库安装附加组件?或者他们可以通过我的网站添加它吗?有没有办法自动更新未经审核/批准的附加组件。

对于AMO(addons.mozilla.org)托管的附加组件:是的,更新必须经过审核过程。

但是可以使用自定义updateURL。请参阅this article,该公告暂时未更新,但通常仍应适用。

最重要的一点:

  • 拥有update.rdf,并在updateURLinstall.rdf(即提前计划)。{/ li>
  • update.rdf必须格式正确,并且应包含哈希值(最好在IIRC时为sha-256)
  • update.rdf必须通过McCoy(PITA)或其他兼容工具(例如spock(也是PITA))签署的https 提供。

E.g。这是(自动生成的)update.rdf我们用于DownThemAll!夜间: http://code.downthemall.net/nightly/update-trunk.rdf

这是生成它的非常快速且非常脏的python脚本:

#!/usr/bin/env python2.7
import sys
from zipfile import ZipFile
from xml.dom.minidom import parseString
from hashlib import sha256

TMPL = """<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"><Description about="urn:mozilla:extension:dta@downthemall.net"><em:updates><Seq><li><Description>
<em:version/>
</Description></li></Seq></em:updates></Description></RDF>
"""

_,xpi,out,url = sys.argv
with open(xpi, "rb") as ip:
  xh = sha256(ip.read()).hexdigest()
rdf = parseString(TMPL)
xpi = ZipFile(xpi)
inrdf = parseString(xpi.read("install.rdf"))
ver = inrdf.getElementsByTagName("em:version")[0]

el = rdf.getElementsByTagName("em:version")[0]
el.appendChild(rdf.createTextNode(ver.firstChild.nodeValue))
el = el.parentNode

for ta in inrdf.getElementsByTagName("em:targetApplication"):
  d = ta.getElementsByTagName("Description")[0]
  ul = rdf.createElement("em:updateLink")
  ul.appendChild(rdf.createTextNode(url))
  d.appendChild(ul)
  uh = rdf.createElement("em:updateHash")
  uh.appendChild(rdf.createTextNode("sha256:{0}".format(xh)))
  d.appendChild(uh)
  el.appendChild(ta)

with open(out, "wb") as op:
  op.write(rdf.toxml())
  

3)审批流程需要多长时间?发布附加组件真的需要几周时间吗?什么是'正常'?

每个附加组件和总体工作负载会有所不同,但可能需要一些时间。有关更新,请参阅Add-ons blog

  

更新怎么样?如果我发现代码中存在错误,或者需要进行改进,那么修复是否真的需要10天(!)才能应用于所有用户!?

总的来说是的,但是对于严重的错误,特别是安全问题或“一切都破了”的问题,你可以ping amo-editors进行快速审核,这可以显着降低审核时间。

  

3b)我的加载项仅在用户登录我的服务/网站时有效。它从网站收集数据,需要知道要将其发送到哪个帐户。如果您尚未登录,则会收到一条消息,请您登录。这样的附加组件是否可以获得批准?测试更加麻烦。

是的,这些附加组件经常被批准。但是,对于完整的评论,您通常需要提供一个测试帐户。

  

4)当我写这个附加组件时,我认为这与创建Chrome扩展程序类似,这实际上是即时的。相反,这似乎是一个风险很大的繁琐过程;特别是缓慢的更新过程是风险因素。或者,我完全误解了什么?

坦率地说,Chrome的审核过程非常喜欢开发人员而不是用户,而使用mozilla则是另一回事:用户排在第一位。 所以是的,特别是获得全面审核状态会更麻烦一些。而且需要更长的时间。

对于AMO,您可能会认为这是一种风险。另一方面,你仍然可以自我发布。

您也可以考虑免费咨询:AMO编辑会定期指出安全问题,包括代码缺陷。性能问题,功能缺陷等。因此,您可以免费获得另一层代码审查和QA测试。

(Chrome似乎声称他们的权限系统和沙盒阻止了大多数威胁,因此无需进行实际审核,但这一点非常错误,因为Chrome扩展恶意软件一次又一次地证明了这一点;您仍然可以偷饼干,对类固醇进行XSS治疗并做很多其他伤害。)