App Sandbox が有効なアプリで Sparkle を使う
disclaimer: Sparkle 2.0 は2021年2月現在まだ beta で production ready ではないらしい
が普通にいろんなメジャーアプリが使ってる
どうしようもないので今回は Sparkle 2.0 beta を使う。
ちなみに Sparkle の普通の設定 (SUFeedURL とか) はここでは語らないので公式を読んでください
まずはどうにかして Sparkle をビルドする
わたしは GitHub Actions で置いてビルド成果物をgitに置くとかいうろくでもないことをしている
その Sparkle をどうにかしてAppのリポジトリに持ってくる
持ってきたら 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 ってやつ
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}"
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 したらおしまい