TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

fastlaneを使ってiTunes Connectへmetadataのアップロードを自動化する (個人開発用)

apps.apple.com
このアプリを作っているときにiTunes Connectへアプリを申請する情報を毎度作るのが面倒でした。特にプロモーションテキストは前のものからコピーしてくれないので、いちいちコピーし直さないといけなくて、複数の言語に対応していると結構面倒でした。
fastlaneはそれを自動化してくれるので、自動化してみました。

fastlaneでやることの例

  • iOSのビルドでipaを作成する
  • ipaiTunes Connectへアップロード
  • iOSアプリ申請のメタデータ (プロモーションテキストとか、説明文とか、タイトルとか)をアップロード(今回はここのみ対応)
  • iOSのアプリ申請のスクショをアップロード

他にもあるらしいです。
詳しくは
fastlane docs

環境

今回やること

メタデータのアップロードのみを対応したいと思います。ゆくゆくは全部するつもりだけど、長くなるので一番簡単で効果が大きいところをしてみます。

スクショはアップロードしません。(アップロード時間かかるし、個人開発ではそんなに変更することないので)

今回は対応しないけど最終的な個人開発iOS用自動化構成計画

  • fastlaneからunityのxcodeworkspaceの生成
  • fastlaneからipaファイルを生成
  • 日本語リリースノートを入れると勝手に他の言語へも自動翻訳
  • fastlaneからipaとmetadataをiTunes Connectへアップロードし、申請する
  • 作業終わればslackへ通知

多分これで個人開発では十分すぎるかなと思います。

手順

  1. renv使ってrubyをインストール (renv入っていたら不要)
  2. fastlaneインストール
  3. プロジェクトの作業フォルダでfastlane init
  4. iTunesConnectの設定情報を記述
  5. fastlane deliver init
  6. 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