blog.tawa.me

東京から福岡移住したWeb開発の人のブログ。適当に何でも置きます。

Expo.ioで開発したアプリをAppleに審査提出する方法

f:id:tawachan39:20190201191622j:plain

React Native(Expo.io)を使ってiOSアプリを開発して公開したので審査提出方法を簡単にまとめる。

スタンドアローンアプリをビルドする

1. Expo CLIでアカウントにログイン

expo login

2. アプリをビルド

app.jsonを整理

ここを参照すればよさそう。 https://docs.expo.io/versions/latest/workflow/configuration

しかし、ネイティブのiOS/Androidアプリをビルドするときの設定と同じはずなので、ネイティブの情報を見たほうがわかりやすそう。

ビルド

expo build:ios --release-channel=production

本番用のリリースチャンネル名をproductionとしているが、どんな文字列でも良い。

以上を実行すると、証明書周りのことを聞いてくる

[exp] No currently active or previous builds for this project.

Would you like to upload a keystore or have us generate one for you?
If you don't know what this means, let us handle it! :)

  1) Let Expo handle the process! <- こっち
  2) I want to upload my own keystore!
[exp] Making sure project is set up correctly...
[exp] Your project looks good!
[exp] Checking if current build exists...

[exp] No currently active or previous builds for this project.
? How would you like to upload your credentials?
 (Use arrow keys)
❯ Expo handles all credentials, you can still provide overrides <- こっち
  I will provide all the credentials and files needed, Expo does no validation

その後、1つ1つcredentialsに関して聞かれる。

特に指定がなければ全てExpoに自動でやってもらうほうを選ぶ。

ネイティブアプリだと本来自分で証明書等を発行して食わせる必要があるが、 新規開発であれば基本Expoに任せるが吉。

ウェブエンジニア的にはこのあたりの勝手がわからないのでありがたい。

しばらくするとExpoのサーバー上でビルドが始まる。

終ったらビルドされたファイルをダウンロードする。

3. ビルドしたipaファイルをApp Storeにアップロード

Application Loaderを使ってアップロード。

Application Loaderを使えばXcode以外でビルドしたバイナリーもApp Storeに置ける。(Expoやって初めて知った)

f:id:tawachan39:20190201182938p:plain
Application LoaderはXcodeから開ける

4. iTunesConnectから審査提出

ここからはExpo関係なく普通のiOSアプリ審査提出の流れとなる。

アップロード後、該当ビルドが見つかるはずなのでそれで審査提出に必要な情報を記入する。

一番ハマりどころなのは以下の点

ExpoにおけるIDFA

ExpoはIDFAを使っているようなので、広告を出していなくても広告IDのところでチェックをいくつか付ける必要がある

When you submit to the app store, be aware that Segment collects the IDFA for use in doing mobile install attribution with integrations like Mobile App Tracking. Even if you’re not currently doing mobile install attribution, if you get asked, “Does this app use the Advertising Identifier (IDFA)?” on this page, you’ll want to check the following three boxes:

“Attribute this app installation to a previously served advertisement” “Attribute an action taken within this app to a previously served advertisement” “I, YOUR_NAME, confirm that this app, and any third party…” Note, you should not check the box labeled “Serve advertisements within the app” unless you are actually going to display ads.

参照: https://github.com/expo/expo/issues/1138

おまけ

知らなくても開発できそうだけれど知っておいたほうが色々便利そうなこと。

channel

Expoのbundleにはchannelという概念がある productionやstagingなど環境を分けるために存在している。

なので、

expo publish --release-channel=production
expo build:ios --release-channel=production
expo build:android --release-channel=production

のようにchannel名をつけてあげることでオプション一つでビルドし分けることができる。

本番用に使っているchannelに対してはむやみにbuild or publishは打たないようにしないといけない。 簡単に打てるが簡単に本番のコードに影響を与えてしまうので注意。

テストや動作確認用のchannelも用意して普段はそちらを利用するなど注意したい。

※ビルドするということはjsもbundleしデプロイするということなので、その時のbundleされたjsは本番にも即時反映されるという点に注意

の対応策としては、

expo build:ios --release-channel=staging

を使っておけば安全と思われる。(channelが違うので関係ない)

まとめ

ExpoはWebエンジニアでもアプリを開発するためにかなり便利なツール。 ただ情報があまりまだ落ちていないのでそれが少し難しさになっているように感じる。

なので、知っていることは積極的に発信していきたいと思っている。 質問等あれば個人的にでもコメントにでも聞いて頂けると嬉しい。