App Sandbox が有効なアプリで Sparkle を使う
Sparkle 2.0 beta を使うと App Sandbox が有効なアプリでSparkleを使える。
disclaimer: Sparkle 2.0 は2021年2月現在まだ beta で production ready ではないらしい
が普通にいろんなメジャーアプリが使ってる
CotEditor
NetNewsWire
しApp Sandbox 有効にしたまま Sparkle 使うには 2.0 beta しかない
どうしようもないので今回は Sparkle 2.0 beta を使う。
ちなみに Sparkle の普通の設定 (SUFeedURL とか) はここでは語らないので公式を読んでください
まずはどうにかして Sparkle をビルドする
わたしは GitHub Actions で置いてビルド成果物をgitに置くとかいうろくでもないことをしている
https://github.com/cinderella-project/iMast-Sparkle-Build/ (artifacts ブランチ)
その Sparkle をどうにかしてAppのリポジトリに持ってくる
私の場合はビルド成果物をgitに置いたので git submodule で持ってきた
持ってきたら Copy Files で org.sparkle-project.Installer*.xpc を埋め込む。
ホストアプリに com.apple.security.network.client が付いてないと org.sparkle-project.Downloader.xpcも埋め込む必要があるらしい (今回は SNS クライアントなので必要がなかった)
https://gyazo.com/763b6bce14e718577b789b0817f17f44
ただこれだけだと Hardened Runtime が有効になってなくて Notarize 通す時に蹴られるので、追加で Sparkle の XPC Service に署名をしてやる必要がある。
この For the XPC branch ってやつ
https://github.com/sparkle-project/Sparkle/issues/1389#issuecomment-507950890
code:sh
# 👇 Shorthand for the script; adjust to where you checked-out Sparkle into is 👇
alias dosign="${PROJECT_DIR}/Extern/Sparkle/bin/codesign_embedded_executable"
# Code Signing identity
IDENTITY="${CODE_SIGN_IDENTITY}"
if "$IDENTITY" == ""
then
# If a code signing identity is not specified, use ad hoc signing
IDENTITY="-"
fi
# Shorthand for the Sparkle.framework
SPARKLE_PATH=${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sparkle.framework
dosign "$IDENTITY" "${BUILT_PRODUCTS_DIR}/${XPCSERVICES_FOLDER_PATH}"/*.xpc
dosign "$IDENTITY" "${SPARKLE_PATH}/Versions/A/Resources/Autoupdate"
dosign "$IDENTITY" "${SPARKLE_PATH}/Versions/A/Resources/Updater.app/"
dosign "$IDENTITY" "${SPARKLE_PATH}"
ちなみにこの Run Script はコピーした後のファイルに署名してるので Copy Files より後に持ってくる必要がある
たぶん一番最後に置いていい
そうしたら Sparkle.framework を追加する (Embed & Sign じゃないとだめかは検証してない)
https://gyazo.com/846acf9611f6c6a5b5133fd68ef20fa0
これで Archive して Notarize したらおしまい
#macOS開発