fastlaneを使ってiTunes Connectへmetadataのアップロードを自動化する (個人開発用) - TAKOYAKING’s blog
これの続きで前回はメタデータのみのアップロードだけを行ったので、今回はiOSの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ファイルに記述して、コミットしないことにします。
手順
- Fastfileを記述する
- XcodeのPreferencesのCommand Line Toolsにバージョンを指定する
- 設定情報の記述(Appfile, env)と認証
- 実行
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へアップロードするという流れができました。
個人開発の作業の流れとしては
- ビルドする
- ビルドしたのをアップロードする
- アップロードが反映されるまでにリリースノートを書いてアップロードする
- 反映されていたら申請
になってます。
使ってみると結構便利です。あとは自動翻訳を残すのみです。