如何从命令行构建Safari扩展包?

时间:2010-08-06 11:59:46

标签: macos command-line safari codesign safari-extension

而不是转到 Extension Builder>构建包...... ,我想从.safariextz文件夹中构建一个MyExtension.safariextension包。

我知道我可以使用xar -xf解包扩展程序。我怀疑返回的方法是用xar打包它,但后来我需要做代码签名的事情,这可能涉及codesign(1),也可能不涉及。{/ p>

2 个答案:

答案 0 :(得分:6)

以下是Omar Ismail的说明,省略了对单独的shell脚本的需求。这将全部发生在目录safari/中,我们将在其中将目录safari/appname.safariextension/签名为扩展safari/appname.safariextz。首先,使用Extension Builder的Build Package

以正式方式签署扩展

设置Xar:
1.下载并解压缩/解压缩 https://github.com/downloads/mackyle/xar/xar-1.6.1.tar.gz 到任何你想要的可执行文件xar-1.6.1(xar 1.6dev不支持我们需要的选项)
2.在xar-1.6.1 /

./configure
make
sudo make install
sudo ln -s /full/path/to/xar-1.6.1/src/xar /usr/local/bin/xar161

设置证书:
1.在safari /

mkdir certs/
xar161 -f appname.safariextz --extract-certs certs/

2。打开Keychain访问并将Safari Developer证书导出到safari / certs / certs.p12(使用certs.p12的空白密码,然后使用Mac的密码导出证书)
3.在safari / certs /

openssl pkcs12 -in certs.p12 -nodes | openssl x509 -outform der -out cert.der
(same blank password)
openssl pkcs12 -in certs.p12 -nodes | openssl rsa -out key.pem
(same blank password)
openssl dgst -sign key.pem -binary < key.pem | wc -c > size.txt

您可以从certs/cert.p12获取证书,而不需要--extract-certs步骤(因此不需要以官方方式构建扩展名),但我不太了解openssl ,无论如何,它只适用于您需要该步骤的设置。

设置好所有内容后,签署扩展名:
在safari /

xar161 -czf appname.safariextz --distribution appname.safariextension/
xar161 --sign -f appname.safariextz --digestinfo-to-sign digest.dat --sig-size `cat certs/size.txt` --cert-loc certs/cert.der --cert-loc certs/cert01 --cert-loc certs/cert02
openssl rsautl -sign -inkey certs/key.pem -in digest.dat -out sig.dat
xar161 --inject-sig sig.dat -f appname.safariextz
rm -f sig.dat digest.dat

这完全出现在2006款Snow Leopard MacBook上,因此在更新的机器上可能会有所不同。

答案 1 :(得分:4)

看起来有一种方法可以使用签名选项修补CAR。 http://code.google.com/p/xar/issues/detail?id=76#c0