TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

fastlaneでiOSビルドをしてiTunesConnectへアップロードする (個人開発)

apps.apple.com

fastlaneを使ってiTunes Connectへmetadataのアップロードを自動化する (個人開発用) - TAKOYAKING’s blog
これの続きで前回はメタデータのみのアップロードだけを行ったので、今回はiOSipaを生成してiTunesConnectへアップロードするというのをやりました

環境

今回やること

  • ビルドしてipaの作成
  • ipaをiTunesConnectへアップロード

metaデータのアップロードとビルドファイルをアップロードの処理を分けた理由

ビルドファイルをアップロードしてもiTunesConnectへ反映されるまで15分くらいあるので、先にビルドファイルだけアップロードして、反映までの間にリリースノートを書いたりしたかったので、分けました。
個人開発なのでこれでいいかなと思いました!

最終的なソースコード

Fastfile

platform :ios do
    desc "Description of what the lane does"
    lane :build do
        # add actions here: https://docs.fastlane.tools/actions
        gym(
            workspace: "/Your/Path/Unity-iPhone.xcworkspace",
        )
    end

    desc "Description of what the lane does"
    lane :release 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: false, # 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} #{options} All OK!",
    )
end

error do |lane, exception, options|
    slack(
        message: exception.message,
        success: false
    )
end

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="https://hooks.slack.com/services/your/path"
APP_IDENTIFIER="com.foo.bar"
APPLE_ID="youremail@example.com"
# FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=""
SPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER="+81 your phone number"

# もし期限切れたら -> fastlane spaceauth -u youremail@example.com
FASTLANE_SESSION=""

これも前回の構成と同じで基本的に大切な設定情報はenvファイルに記述して、コミットしないことにします。

手順

  1. Fastfileを記述する
  2. XcodeのPreferencesのCommand Line Toolsにバージョンを指定する
  3. 設定情報の記述(Appfile, env)と認証
  4. 実行

Fastfileを記述する

今回のlaneは

  • build
  • release

の2種類で
buildはXCodeでビルドしてipaを生成するlaneです。
releaseはiTunesConnectへビルドしたipaをアップロードするビルドです。
今回も成功したらslackへ通知するので、after_allでslackへの記述も行います。

buildのlaneを書くときにはまったこと
Project file is not a project file, must end with .xcodeproj

が出てビルドできなかったです。
Fastlaneにはxcodeproj用とxcworkspace用2つのオプションがあるので、間違えずに、指定してあげる必要があります。

僕のunityではxcworkspaceを使用していたのでworkspaceを指定してあげないといけないです。

gym(
            workspace: "youpath/Unity-iPhone.xcworkspace",
        )

xcodeprojならこちらです。

gym(
            project: "youpath/Unity-iPhone.xcodeproj",
        )

違いを発見するのが難しかったです。

XcodeのPreferencesのCommand Line Toolsにバージョンを指定する

もし指定されているなら大丈夫なのですが、指定されていないとbuildできません。以下のようなメッセージが出るはずです。

Unable to locate Xcode. Please make sure to have Xcode installed on your machine

下のStackOverflowの通り、Xcodeの設定でCommand Line ToolsにXcodeVersionを指定してあげるだけで解決しました!
ios - Unable to locate Xcode. Please make sure to have Xcode installed on your machine - Stack Overflow


設定情報の記述(Appfile, env)と認証

Appfileとenvファイルには前回で行った設定

  • iTunesConnecへの設定情報
  • slackのurl

に加え、認証の設定情報も必要となります。

認証

認証の設定情報がなくてもビルドは可能なのですが、iTunesConnecへアップロードができません。
パスワードを聞かれると思いますが、認証を行わないと何を入れても、NGとなります。

Continuous Integration - fastlane docs
上のサイトで認証は最終的にはFASTLANE_SESSIONに生成された値を入れことになるのですが、2つ?の方法があるっぽいです。
1つ目は暫定的な方法で月一にもう一度値を生成し直す方法
2つ目はおそらく長期的な方法でCI用。

1つめの方法は
fastlane spaceauth -u [yourmail@mail.com]
で生成される値を環境設定ファイルにFASTLANE_SESSION="生成された値"
として貼り付ける方法
この方法は月に1度生成し直さないといけないみたいです。

2つ目は
App用パスワードを作成して、
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORDに入れて、
FASTLANE_SESSIONに同じように定義する方法です。
これは月1の制限がないのかどうか試していないので不明ですが、多分不要なのではないでしょうか
以下を参考
fastlaneでAppleIDの2段階認証に詰まったときにやったこと - Qiita

他にもこんなやり方も参考
fastlane/credentials_manager at master · fastlane/fastlane · GitHub


とりあえず1つ目の方ほでやりました。
理由はApp用パスワードを作成したら、iPadとかにも長ったらしい値を入れないといけないのかもと思ったので、月一程度だったら個人開発なので別にいいかと思ってとりあえず、1つ目にしました。

2段階認証の初期値をsmsにする

これはお好みですが、もし初期設定をsmsにしたい場合はSPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBERを環境変数にセットする
fastlane/Authentication.md at master · fastlane/fastlane · GitHub


PACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER="+81 090 123 4567"

感想

一応これで前回の記事と合わせて、ビルドして、metaデータとipaをiTunesConnecへアップロードするという流れができました。
個人開発の作業の流れとしては

  • ビルドする
  • ビルドしたのをアップロードする
  • アップロードが反映されるまでにリリースノートを書いてアップロードする
  • 反映されていたら申請

になってます。
使ってみると結構便利です。あとは自動翻訳を残すのみです。