How can I build a Safari extension package from the command line?

前端 未结 2 1167
被撕碎了的回忆
被撕碎了的回忆 2020-12-23 22:38

Instead of going to Extension Builder > Build Package…, I\'d like to built a .safariextz package from the MyExtension.safariextension fold

相关标签:
2条回答
  • 2020-12-23 23:09

    Looks like there is a way to patch XAR with a signature option. http://code.google.com/p/xar/issues/detail?id=76#c0

    0 讨论(0)
  • 2020-12-23 23:15

    Here are Omar Ismail's instructions, omitting the need for separate shell scripts. This will all occur in a directory safari/, where we will be signing the directory safari/appname.safariextension/ to become the extension safari/appname.safariextz. The first thing is to sign the extension the official way, with Extension Builder's Build Package.

    Set up Xar:
    1. Download and unzip/untar https://github.com/downloads/mackyle/xar/xar-1.6.1.tar.gz to wherever you want the executable xar-1.6.1 (xar 1.6dev doesn't support the options we need)
    2. in 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
    

    Set up your certificates:
    1. in safari/

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

    2. open Keychain Access and export your Safari Developer certificate to safari/certs/certs.p12 (use a blank password for certs.p12, and then use your Mac's password to export the cert)
    3. in 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
    

    It's possible that you can get the certificates from certs/cert.p12, and not need the --extract-certs step (and hence not need the extension built the official way), but I don't know openssl well enough, and it's only for the set up that you need that step anyway.

    Once everything is set up, to sign the extension:
    In 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
    

    This was all on a 2006 Snow Leopard MacBook, so it's possible things may be different on a machine that's more up to date.

    0 讨论(0)
提交回复
热议问题