skip to content
私的歌詞倉庫

fastlaneを使ってmacアプリをビルドする

/ 4 min read

Updated:
Table of Contents

はじめに

自分は今Raelizeというmac向けのIMEを作っています。IMEは普通のアプリ開発と違って、ビルド後に~/Library/Input Methods に配置して、さらにPCをログアウトしないと動作検証ができません(と思っていました…)。

しかし、調べてみると実は毎回ログアウトしなくても、ビルドしたIMEをkillすれば検証ができることが分かりました。

だったら、fastlaneで全部自動化できそうだなということでやってみました。試してみるまでは、fastlaneはモバイル専用と思ってましたが、macアプリでも動きました。

ツールバージョン
Ruby3.3.0
fastlane2.220.0
Xcode15.3
Swift5.10

作ったlane

実際に作ったlaneです。リポジトリはこちらにあります。

default_platform(:mac)
platform :mac do
desc "Build macOS App"
lane :app_build do
ime_path = "/Library/Input Methods"
build_mac_app(
configuration: "Debug",
export_method: "development",
scheme: "Raelize",
output_directory: "#{ENV["HOME"]}#{ime_path}",
clean: true
)
sh("pkill", "Raelize")
end
end

platformにはmacを指定して、build_mac_appでビルドするようにしました。

一応、buid_appでも動きましたが、build_mac_appを使うようにしました。公式ドキュメントには以下のように書いていて、こっちのほうがmac向けだと分かりやすいし、なんとなくmac向けにビルド設定が最適化されてそう(多分)と思ったので使いました(gymbuild_appのエイリアスだということを初めて知りました)。

Terminal window
gym ## alias for "build_app"
build_ios_app ## alias for "build_app (only iOS options)"
build_mac_app ## alias for "build_app (only macOS options)"

各項目の設定と意味は以下のとおりです。

項目意味
configuration開発用で使いたいのでDebugを指定します
export_method開発用にビルドしたいのでdevelopmentを指定します
schemeビルドするターゲットはRaelizeなのでRaelizeを指定します
output_directoryビルド後のappの生成箇所を指定します。直接~/Library/Input Methods にビルドします
cleanキャッシュなどが残って意図しないエラーが出たりすると手間なのでcleanしてからビルドするようにしています(その分ビルド時間が伸びてる気がします)

output_directoryではホームディレクトリを含めたいので、#{ENV["HOME"]} の環境変数を使っています。これで、誰がビルドしても一意の場所にビルドするようになります。

最後にsh アクションでRaelizepkillしてプロセスをkillします

終わりに

初めてmac向けにfastlaneを使いました。IMEの検証がかなり面倒だったので、これで楽になりました。

自動化大好き!

参考文献