Expo + React Nativeで個人アプリ開発をしていてストア公開までようやくいけた。
Ricetta(リチェッタ)というレシピ管理アプリで、WEB上のレシピのURLを登録していくことで、レシピを集約管理出来るっていうコンセプトです。開発期間はたしか1週間くらいなので、Expoは本当に便利だなあと感激しました。
Expoで普通に開発する場合、Managed workflowがデフォルトで、ストアアップロードまでコマンド一発でやってくれるんですが、ejectしてBare workflowにしてしまうとipaファイルのビルドからアップロードまでXCodeを通して自分でやらないといけなくなります。ちょっとハマってしまったのでブログに残しておきます。
iOSアプリをストア公開するためにはApple Developer Programに登録・設定する必要があるのですが、その辺はいろんなブログで解説されているので省略します。
とりあえずアプリを準備
プロジェクト生成時にテンプレート選択出来るが、最初からBare workflowで生成されるminimal (TypeScript) を選択する。
$ expo init ExpoBareSample ? Choose a template: ----- Managed workflow ----- blank a minimal app as clean as an empty canvas blank (TypeScript) same as blank but with TypeScript configuration tabs (TypeScript) several example screens and tabs using react-navigation and TypeScript ----- Bare workflow ----- ❯ minimal bare and minimal, just the essentials to get you started minimal (TypeScript) same as minimal but with TypeScript configuration
起動してみる。
$ cd ExpoBareSample $ expo start
なんかエラー。
Error: ENOENT: no such file or directory, scandir '/Users/atsushiharada/source/ExpoBareSample/assets'
どうやらassetsディレクトリがない。自動的にデフォルトのアプリのアイコンとかが入ってくるディレクトリだったと思うけど生成されていない。
仕方ないので更にejectしてみる。
$ expo eject
うーんやっぱりダメか。一旦プロジェクトを削除してやり直す。
$ rm -rf ExpoBareSample
expoのバージョンが古いのでは?と思ったので確かめる。
$ expo --version 3.22.3
アップデートする。
$ npm install --global expo-cli $ expo --version 3.28.1
再びプロジェクトを生成して起動してみる。
$ expo init ExpoBareSample $ cd ExpoBareSample $ expo start
同じエラーはまだでてるけど動くようになった!
ストア公開用にビルドする
公式チュートリアルによるとBare workflowのリリースについてはサポートされていない。それぞれでいい感じにやってよねっていうスタイルである。つまり、expo build
コマンドなどでipaファイルなどのアーカイブを作っても動かない。
Releasing to App Store and Play Store
This is entirely up to you! The Expo build service does not yet support builds for the bare workflow.
Bare Workflow Walkthrough - Expo Documentation
ググったりQiita見たりしたけども、Bare workflowでのリリースの事例は見つけられなかったので困った。
プロジェクト配下のiosディレクトリは以下のような構成になっている。分かる人にはすぐ分かると思うけど、CocoaPods使ったiOSプロジェクトの標準的構成である。つまりこのiOSプロジェクトをそのままXCodeでビルドすればいい。
$ cd ios $ ls -l total 56 drwxr-xr-x 11 atsushiharada staff 352 10 21 15:15 ExpoBareSample drwxr-xr-x@ 6 atsushiharada staff 192 10 21 17:51 ExpoBareSample.xcodeproj drwxr-xr-x@ 5 atsushiharada staff 160 10 21 15:17 ExpoBareSample.xcworkspace -rw-r--r-- 1 atsushiharada staff 632 10 21 15:14 Podfile -rw-r--r-- 1 atsushiharada staff 23842 10 21 15:15 Podfile.lock drwxr-xr-x 22 atsushiharada staff 704 10 21 18:01 Pods
XCodeでプロジェクトを開く。
$ open ExpoBareSample.xcworkspace
とりあえずシミュレーターで起動できるか確かめる。そのままXCodeで再生ボタンみたいのを押せば良い。
エラーになった。
error: Build input file cannot be found: '/Users/atsushiharada/Library/Developer/Xcode/DerivedData/ExpoBareSample-gotguwvydjciulazbvpdinjrwhci/Build/Products/Debug-iphonesimulator/ExpoBareSample.app/ExpoBareSample' (in target 'ExpoBareSample' from project 'ExpoBareSample')
うーん。cleanしてもなにしても出来ない。。
iosディレクトリを再生成してみる。ejectすれば何度でもiosフォルダとandroidフォルダを生成できる模様。
$ rm -rf ios $ expo eject
がしかしエラーは解消しない。
ちょっとググってみたらドンピシャっぽいページ見つけた。
XCodeのアップデートしろと言ってるのでApp StoreからXCodeをアップデートした。
動くんかーい!
そういえば前回やったときも結局XCodeのアップデートで動くようになったことを思い出した。Expoの開発は勢いがあるのでガンガン進化しているのかも知れない。とりあえずXCodeでビルドできないってなった際はとりあえずXCodeのアップデートがないか確かめるのが良さそう。
(iOSアプリ開発の基本知識だけど)ストア用のビルドは、メニューの Product -> Archive から作成する。このとき、デバイスをAny iOS Device
を選択する必要がある。
またエラーが出た。証明書関係のエラーなので、Signing & CapabilitiesからTeamを設定すれば後は勝手にいい感じにやってくれる。
**Showing Recent Messages** Signing for "ExpoBareSample" requires a development team. Select a development team in the Signing & Capabilities editor.
これでリリース用ビルドが出来上がる! あとは普通のiOSアプリの公開と同様に、バイナリをアップロードしたら、iTunes Connect(だっけ?)からアプリ情報を登録して申請に出せばOK。