4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React Native EXPO】EASのbuildの流れとログの表示

Last updated at Posted at 2022-02-02

eas build の際にエラーに苦戦したので、備忘録として、デバッグの際に調べたこと、考えたことを記しておきます。

EASについての基礎知識

eas.jsonの見方などを解説します。build profileの特有な概念があるので、まずここを押さえる必要があると思います。

EAS Build の設定は、すべて "build" キーに属します。 以下のeas.jsonを例に説明を進めます。

{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  }
}

build profileとは

Build Profileとは、ある特定のビルドを実行するために必要なパラメータを記述した、名前付きの設定グループのことです。
上記の例では、development, preview, production の3つのBuild Profileがありますが、お好みで foo, bar, baz など好きな名前にすることができます。
特定のプロファイルでビルドを実行するには、eas build --profile <profile-name> と実行します。--profile フラグを省略した場合、EAS CLI は production という名前のチャンネルが存在すれば、それをデフォルトで使用します。

詳しい設定のプロパティについてはこちらを参照ください、

EASがどのような流れでbuildを進めるか

※ iOSアプリのbuildの流れになります

eas build を実行すると、ローカルマシンでいくつかのステップを実行してプロジェクトを準備し、その後リモートサービスで実際にプロジェクトをビルドという流れで進みます。

ローカルでのステップ(プロジェクトをeasへ送る前の準備)

  1. eas.json で cli.requireCommittrue に設定されている場合、git index がクリーンであるかどうかを確認します。つまり、 cli.requireCommittrue の場合、gitでcommitできていないファイルが残った状態でbuildしよとすると、まず警告を出されます。
  2. buildに必要なcredentialsを準備する
    • builds.ios.PROFILE_NAME.credentialsSource の値に応じて、ローカル credentials.json ファイルまたは EAS サーバーからクレデンシャルを取得します。
      remoteモードが選択されているが、まだクレデンシャルが存在しない場合、それらを生成するように指示されます。
  3. Bare projects の場合、EASサーバでビルドできるようにXcodeプロジェクトが設定されているかどうかを確認します(例えば、正しいバンドル識別子とApple Team IDが設定されいるか、など。)
  4. リポジトリのコピーを含むtarballを作成します。実際の動作は、使用しているVCSのワークフローに依存します。詳しくはこちらをご覧ください。
  5. プロジェクトのtarballをAWSのプライベートS3バケットにアップロードし、EAS Buildにビルドリクエストを送信します。

※ tarball はtarファイルのこと。(.tat または .tar.gzを拡張子にもつファイル) 

リモート(EASのクラウド上)でのステップ

tarballがEAS側に投げられると、ここから先のステップはクラウド上での話になります。

  1. buildのための macOS VM 環境が構築される.

    • すべてのビルドツール(Xcode、Fastlaneなど)がインストールされた、独自の新しいmacOS VMを取得します。 この環境をローカルで再現するのは相当厳しい、、、
  2. 先ほどのステップでAWSプライベートS3バケットにアップロードしたtarballを展開します

  3. NPM_TOKENが設定されている場合、.npmrcを作成します。(詳しくはこちら)

  4. package.json が定義されている場合は、eas-build-pre-install スクリプト を実行します。

  5. プロジェクトのルートでyarn installを実行します(yarn.lockが存在しない場合はnpm installを実行します)。

  6. credentialsの作成、復元。以下の内容を行なってくれているようです。

    • 新しい keychain の作成
    • keychainへ Distribution Certificateをインポート
    • ~/Library/MobileDevice/Provisioning Profiles directory へProvisioning Profileの書き込み
    • Distribution Certificateと Provisioning Profileがマッチすることの検証 (すべてのProvisioning Profileは、特定のDistribution Certificateに割り当てられ、他の証明書でiOSを構築するために使用することはできません)
  7. Managed projects では、追加で expo prebuild を実行して、プロジェクトを bare projecte へ変換する

  8. build profileの cache.key 値で特定される、以前に保存されたキャッシュを復元する (詳しくはこちら)

  9. ios directory にて pod install の実行

  10. package.json が定義されている場合は、eas-build-post-install スクリプト を実行します。

  11. Provisioning Profile の ID で Xcode プロジェクトを更新します。

  12. ios ディレクトリに Gymfile が存在しない場合は作成します (Default Gymfile のセクションを参照してください)。

  13. Run fastlane gym in the ios directory.

  14. package.json が定義されている場合は、eas-build-pre-upload-artifacts スクリプト を実行します。

  15. build profileで定義されたファイルやディレクトリのキャッシュを保存する。 Podfile.lockはデフォルトでキャッシュされます。それ以降のビルドでは、このキャッシュが復元されます。 (Learn more.)

  16. build 生成物を private AWS S3 bucket へアップロードする.

    • アーティファクトのパスは eas.json の builds.ios.PROFILE_NAME.artifactPath で設定することができます。デフォルトはios/build/App.ipaです。artifactPathには、グロブライクなパターンを指定することができます。ここでは、fast-glob パッケージを使用しています。

buildの流れからわかることは、ほとんどの作業がリモートで行われており、見たことのないeasコマンドばかりでした。ローカル環境での検証はかなり効率が悪いということですね、、

ネイティブ開発の経験がない自分は、buildの詳しい過程もあまり分かりませんでした😂

とりあえず、logファイルを見るのが一番

expoのダッシュボードのbuild一覧から、エラーしたbuildの記録を選んで下にスクロールすると、以下のようにXcodes Logsがダウンロードできます。

スクリーンショット 2022-02-01 21.55.39.png

このファイルは、たとえxcodeを使ったことがない人であっても、頑張って読むべきです

クラウド上でビルドしているEASの環境は、自分のローカルで再現するには相当な労力が必要です。(自分がチャレンジして挫折した)

まず、その環境で起こっているエラーが何なのかを、このログファイルから感じ取りましょう。
画像のRun fastlaneをクリックした際に表示されるログからは大した情報は得られないので、しっかりとエラーの原因を突き詰めるためには、このログファイル一択だと感じました。参考にしていただければと思います。

参考文献

https://docs.expo.dev/build-reference/ios-builds/

https://docs.expo.dev/build/eas-json/

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?