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

1. Manage your Apple ID
2. パスワード生成
3. FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORDに入れる

以下を参考
fastlaneでAppleIDの2段階認証に詰まったときにやったこと - Qiita

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

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へアップロードするという流れができました。
個人開発の作業の流れとしては

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

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