このアプリを作っているときにiTunes Connectへアプリを申請する情報を毎度作るのが面倒でした。特にプロモーションテキストは前のものからコピーしてくれないので、いちいちコピーし直さないといけなくて、複数の言語に対応していると結構面倒でした。
fastlaneはそれを自動化してくれるので、自動化してみました。
fastlaneでやることの例
- iOSのビルドでipaを作成する
- ipaをiTunes Connectへアップロード
- iOSアプリ申請のメタデータ (プロモーションテキストとか、説明文とか、タイトルとか)をアップロード(今回はここのみ対応)
- iOSのアプリ申請のスクショをアップロード
他にもあるらしいです。
詳しくは
fastlane docs
今回やること
メタデータのアップロードのみを対応したいと思います。ゆくゆくは全部するつもりだけど、長くなるので一番簡単で効果が大きいところをしてみます。
スクショはアップロードしません。(アップロード時間かかるし、個人開発ではそんなに変更することないので)
今回は対応しないけど最終的な個人開発iOS用自動化構成計画
- fastlaneからunityのxcodeworkspaceの生成
- fastlaneからipaファイルを生成
- 日本語リリースノートを入れると勝手に他の言語へも自動翻訳
- fastlaneからipaとmetadataをiTunes Connectへアップロードし、申請する
- 作業終わればslackへ通知
多分これで個人開発では十分すぎるかなと思います。
手順
- renv使ってrubyをインストール (renv入っていたら不要)
- fastlaneインストール
- プロジェクトの作業フォルダでfastlane init
- iTunesConnectの設定情報を記述
- fastlane deliver init
- deliver用のlaneを構築
renv使ってrubyをインストール (renv入っていたら不要)
省略
以下renvが入っている前提です。
fastlaneインストール
fastlane docs
ここをみながらインストールします。
以下抜粋
# Using RubyGems sudo gem install fastlane -NV # Alternatively using Homebrew brew cask install fastlane
適宜環境に合わせた方法で実行してください。
(sudo つけるつけないなど)
プロジェクトの作業フォルダでfastlane init
お好きな作業フォルダfastlane initしてください。
fastlaneのフォルダが出現します。
この時iOSプロジェクトの配下に作ると色々自動で作ってくれるみたいでしたが、unityは毎度iOSプロジェクトを生成し直すので、僕の場合はiOSのプロジェクト配下には置かず、違うところに置きました。
Appfile
Fastfile
が生成されていると思います。
Appfileが設定情報を記述するところで
Fastfileはlaneを記述するところになります。
iTunesConnectの設定情報を記述
AppFileに設定情報を記述していくことになるのですが、このまま直接書いていっても問題ないのですが、書いた情報をgitにコミットしてしまうのは気がひけるので、
.env.defaultファイルに記述し、それをAppFileから参照する形にします。
もちろん.envファイルはgitignoreします。これでgitに重要な情報をコミットせずにすみます。
.envについては以下です。
Keys - fastlane docs
最終的なファイルは以下です。
Appfile
app_identifier ENV["APP_IDENTIFIER"] # The bundle identifier of your app apple_id ENV["APPLE_ID"] # Your Apple email address
.env.default
SLACK_URL="http://~~" APP_IDENTIFIER="com.your.project" APPLE_ID="your.mail@example.com"
ついでにslackのフックするためのURLも入れておきます。
slackのフックURLについては自身のslackアカウントから取得してください。
fastlane deliver init
deliver - fastlane docs
metadataやscreenshot関係はdeliverコマンドとなります。
fastlane deliver init
するとmetadata、screenshotがもろもろダウンロードされます (便利すぎ!)
もう一回ダウンロードし直したい場合は以下のコマンドがあります。
fastlane deliver download_screenshots fastlane deliver download_metadata
ただ注意点として、現在作成した最新のものを取得するので最新のものが提出準備中なら提出準備中のものを取得するみたいです。中途半端に作成してしまうと、中途半なものを取得してしまうので、何もiTunesConnectで作業準備していない時に実行するほうが最初はいいかもしれません。(オプションあるかは不明?)
deliver用のlaneを構築
Deliverfileに書いてもいいのですが、Fastfileのlaneの中で記述しました。(特に理由はありません。)
Fastfile
platform :ios do desc "Description of what the lane does" lane :upload_metadata do # add actions here: https://docs.fastlane.tools/actions deliver( submit_for_review: false, # Appleの審査に出すかどうか force: true, # If set to true, no HTML report skip_screenshots: true, # 時間節約 skip_binary_upload: true, # ipaアップするかどうか copyright: "#{Time.now.year} TAKOYAKING", automatic_release: true, # Appleの審査後にこのバージョンを自動的にリリースする # metadata_path: "./metadata" ) end end after_all do |lane, options| slack( default_payloads: [], message: "#{lane} All OK!", ) end error do |lane, exception, options| slack( message: exception.message, success: false ) end
処理流れとしてはmetadataをアップロードする。成功すればslackへ。失敗すればslackへ。
という流れになります。
オプションは詳しくは以下です。
deliver - fastlane docs
skip_screenshots
skip_binary_upload
は共にtrueにしています。metadataだけにして時間節約したいからです。
metadata_pathは指定しなくても自動でとってくれます。最初間違ったパスを指定してしまっていて、小一時間悩むはめになったので、指定しない方向でいきます。
copyrightにはこの形式で設定していますが、年をこの形式にしていないと、注意文が出たのでこれにしました。
lane名はupload_metadataにしています。最終的にはfastlane upload_metadataで実行します。
使い方
bundle exec fastlane upload_metadata
bundle execを省略しても良いのですが、省略するとbundle execつけたほうが速いよとメッセージが出るので、とりあえずつけときました。
どちらでも実行可能です。
これでmetadata > 各言語 > release_notes.txtにアプデ内容書いてコマンド実行という流れに持っていけそうです。
感想
まだmetadataの部分しかブログに書けていないですが、時間があったらビルド、ipaアップロード、翻訳自動化まで書こうかなと思っています。
metadataだけでも結構便利です。いつもiOSの提出は作業はちょいちょい生じるので結構、億劫になっていましたが、かなり効率化できたかなと思います。
個人開発なので全部自動化は対応しなくてもmetadataだけ自動化とかでも結構コスパいいなと思います。
よくわからない点
app preview(動画)が見当たりませんでした。 app previewに対応したみたいなissueはあったのでできるのかなと思ったけどわからなかったです。
でも既存のapp previewは引き継いでくれるみたいなので別にいいかな
続き ビルド編
fastlaneでiOSビルドをしてiTunesConnectへアップロードする (個人開発) - TAKOYAKING’s blog