expo + react native アプリリリース

## 前準備
環境：mac
とりあえずexpo + react native でアプリ作成

## EAS CLI　入れる
eas-cliをinstall
expoの設定を色々やってくれる

`$npm install -g eas-cli`
*Pathを通したりはいる

```
$npm root -g
/Users/****/.nvm/versions/node/v15.5.1/lib/node_modules

$ls /Users/****/.nvm/versions/node/v15.5.1/lib/node_modules
eas-cli expo-cli ...

$echo 'export PATH=$HOME/.nvm/versions/node/v15.5.1/lib/node_modules/eas-cli/bin:$PATH' >> ~/.bash_profile

$source ~/.bash_profile

$eas -v
eas-cli/0.46.0 darwin-x64 node-v15.5.1

OK
```

## EAS CLI 準備

ログイン

```
$eas login
? Email or username > [expoで作成したアカウント名]
? Passwod > [パスワード]
Logged in
```

設定ファイル作成 試しにiOSだけ

```
$cd [projectのフォルダ]
$eas build:configure
? Which platforms would you like to configure for EAS Build? › - Use arrow-keys. Return to submit.
    All
❯   iOS
    Android


✔ Generated eas.json

🎉 Your project is ready to build.

- Run eas build when you are ready to create your first build.
- Once the build is completed, run eas submit to upload the app to app stores.
- Learn more about other capabilities of EAS Build: https://docs.expo.dev/build/introduction
```

## 環境変数を設定していく

```
$eas secret:create
★ eas-cli@0.47.0 is now available, please upgrade.
Proceeding with outdated version

✔ Linked to project @*****/***** (​https://expo.dev/accounts/******/projects/******​)
✔ Secret name: …[環境変数]
✔ Secret value: … [.envの値]
```
これを必要分だけ

`$eas secret:list`で登録結果を確認できる。

これしとかないと審査時にクラッシュでリジェクトされた（１敗）

## build　

yesでどんどん進めてく

```
eas build --platform ios
✔ Linked to project @****/****
✔ Using remote iOS credentials (Expo server)

If you provide your Apple account credentials we will be able to generate all necessary build credentials and fully validate them.
This is optional, but without Apple account access you will need to provide all the values manually and we can only run minimal validation on them.
? Do you want to log in to your Apple account? › (Y/n)

› The password is only used to authenticate with Apple and never stored on EAS servers
  Learn more: https://bit.ly/2VtGWhU
? Password (for ********): › 

› Saving Apple ID password to the local Keychain
  Learn more: https://docs.expo.dev/distribution/security#keychain
✔ Logged in, verify your Apple account to continue
Two-factor Authentication (6 digit code) is enabled for *********. Learn more: https://support.apple.com/en-us/HT204915

? How do you want to validate your account? › device / sms
? Please enter the 6 digit code › ****

✔ Logged in Local session
✔ Bundle identifier registered ****
✔ Synced capabilities: Enabled: Push Notifications
✔ Synced capability identifiers: No updates
✔ Fetched Apple distribution certificates
? Generate a new Apple Distribution Certificate? … yes
✔ Created Apple distribution certificate
✔ Created distribution certificate
✔ Generate a new Apple Provisioning Profile? … yes
? Created Apple provisioning profile
✔ Created provisioning profile

Project Credentials Configuration

Project                   *****
Bundle Identifier         *****
                          
App Store Configuration   
                          
Distribution Certificate  
Serial Number             ****
Expiration Date           Mon, 16 Jan 2023 21:28:19 GMT+0900
Apple Team                *****
Updated                   11 seconds ago
                          
Provisioning Profile      
Developer Portal ID       ****
Status                    active
Expiration                Mon, 16 Jan 2023 21:28:19 GMT+0900
Apple Team                ****
Updated                   3 seconds ago
                          
All credentials are ready to build ****

? Would you like to set up Push Notifications for your project? › (Y/n)

? Generate a new Apple Push Notifications service key? … yes

✔ Created Apple push key
✔ Created push key
✔ Push Key assigned to ****
✔ Uploaded to EAS 6s Learn more: https://expo.fyi/eas-build-archive

Build details: https://expo.dev/accounts/****/builds/******

Waiting for build to complete. You can press Ctrl+C to exit.
⠙ Build in progress...
```

ここまで来ると順番待ちが発生するみたい　３０分くらいかかる？

```
✖ Build failed

🍎 iOS build failed:
Unknown error. Please see logs.
```

と思ったらエラーが・・・ログを見ろとのこと

```
✔ Build finished

🍎 iOS app:
https://expo.dev/artifacts/eas/*******.ipa
```

ログ見て修正して再度ビルドで通ったらipaファイルってのができた

## APP STORE CONNECT 準備

次にhttps://appstoreconnect.apple.com/に接続し

マイAppから＋ボタンで新規App　でモーダルが開くので以下を入力していく

・プラットフォーム　iOS

・名前　（他で使われてたら怒られる）

・プライマリ言語　日本語

・バンドルID　さっきのビルドで一緒に作られたIDが選択できる

・SKU アプリを識別できる名前を自分で決定する

・ユーザーアクセス　制限　なし

登録するとアプリの詳細設定画面？が開く

## TRANS PORTER 

先にMACのapp storeを開き、TransPoterというアプリをインストールする

アプリを開いてIPAファイルをドラッグすると読み込まれてデリバリボタンが表示されるのでクリックする

終わったらデリバリ済みとなった。

## 再度 APP　STORE　CONNECT

やったこと

- サポートURLとしてGatsbyでブログサイト立ち上げ（Vercel)
- プライバシーポリシーページも作成
    - ここを使った　https://app-privacy-policy-generator.firebaseapp.com/
- スクリーンショットが４サイズ画面＊３＝１２枚ひつようだった　（最低で）
    - あと、広告映ってるスクリーンショットはあかんかった
    - https://help.apple.com/app-store-connect/#/devd274dd925
- 著作権
- 使用許諾契約、年齢制限して、コンテンツ配信権、なども設定

## リジェクトをくらいまくる

申請後、いろいろな理由で差し戻しされた。

- モーダルの言語が統一されてないよ
    - 日本語設定なのに英語のモーダルがでてくる→日本語に統一
    - 広告を許可してもらうモーダルの設定でめちゃレスバした
```
{
  "expo": {
    ...
    "ios": {
      ...
      "infoPlist": {
        "NSUserTrackingUsageDescription": "アプリのバグ修正および体験向上のため、ユーザー行動データを利用します。"
      }
  }
}

```
この設定だけで実機では日本語オンリーでいけてたけど、レビュー者からは日本語と英語が混じってると返信。
どのようにテストしたか聞くも、返信はいつも同じで帰ってこず。
仕方なく、info.plistを追加した。（結果は一緒のはずだが）
```
<key>NSUserTrackingUsageDescription</key>
<string>アプリのバグ修正および体験向上のため、ユーザー行動データを利用します。</string>
```
これで通った。
あとは、
- スクリーンショットに広告が入っとる→広告なしのスクリーンショットに差し替え
- 最新OSのiPadで起動するとクラッシュした
    - こっちで試したけど問題なかった　→ そのことを英語で返信 →　なぜか通った

参考にさせていただいたサイト

- https://note.com/umotion/n/n457b371c731f
- https://zenn.dev/kazushige/articles/9afa10b36d6828