Mac初心者がSwiftUIアプリをApp Storeへ公開するまで(備忘録)

# はじめに
こんにちは。
はじめてのSwift言語。はじめてのアプリ開発。iOSアプリ開発
コーディングにはじまり、App StoreへのiOSアプリ公開に向けて悪戦苦闘中です。
手順備忘録として残します。
長いです。文章ばかりです。。後日改善を試みます･･･

なお、簡単ですが配信アプリに関するホームページを作りました。
こちらもこれからステップアップしていきます！

https://tamasy.jimdosite.com/


# やりたいこと
 - App Storeへ自作アプリを配信する
 - App Store配信前に、TestFlightを利用した内部＆外部テストをやる

# 構築環境
アプリ開発に使った環境です。
Macbook pro + macOS：13.2
iPhone13 Pro + iOS：16.0
Xcode14
Swift + Swiftui

# App Store配信までの全Step
1.Swift/SwiftUIを利用してアプリ開発する
2.アプリ公開へ向けてDeveloper登録をする
3.TestFlightを利用して内部テスターへアプリを配信して動作確認する
4.TestFlightを利用して外部テスターへアプリを配信して動作確認する
5.App Store Connectを経由してアプリを配信する

★内部テストとは
開発途中のベータ版テストが可能。最大100人を指定することができます。
App Store Connectへのユーザー登録が必要ですが、ベータ版配信に向けたアプリの審査は不要です。

★外部テストとは
一般ユーザーのメールアドレスを利用してて、最大10,000人までAppのテストに招待できます。
テスト開始には、Appの最初のビルドがTestFlight App Reviewで承認される必要があります。
(二回目以降のビルドは不要なケースもあるらしい)

# Step.1 Swift/SwiftUIを利用してアプリ開発する

本記事では割愛します。。


# Step.2 アプリ公開へ向けてDeveloper登録をする
※既にApp Store Connect登録している場合はスキップできます。

Apple Developers ProgramおよびApp Store Connectへの登録が必要です。
個人でApple Developers Programへ登録するときは、氏名を通称ではなく個人名にしないと審査(??)通過できないようでした。
Apple担当者の方とメールやり取りで数日ロスりました。。。


# Step.3 TestFlightを利用して内部テスターへアプリを配信して動作確認する

App Store Connectで新規Appを作成します。

**App IDを作成する**
　1.ブラウザを起動してApple Developerを開く
　2.Certificates, IDs & Profilesを選択する
　3.Identifiersを選択する
　4.「+」ボタンを押して新規作成する
　5.App IDsを選択してContinueボタンを押す
　6.Select a typeと表示されたらAppを選択してContinueボタンを押す
　7.DescriptionにApp IDの説明を入力する（例：ID for running App)
　8.Bundle IDとしてExplicitを選択する
　9.アプリ作成の際に設定したBundle IDを入力する
　10.Capabilities 一覧の中に必要なものがあればチェックを入れる
　　※アプリで実際に使う機能を事前に申告します。申告しておかないとアプリに怪しい機能があると判断されてリジェクトされることもあるらしい。
　11.Continueボタンを押す
　12.Registerボタンを押す
　13.おわり

**App Store Connectで新規Appを作成する**
　1.ブラウザを起動してApp Store Connectを開く
　2.新規Appを選択する
　3.プラットフォームを選択します
　4.名前を指定します。あとで変更可能です。
　5.言語を選択します。
　6.Bundle IDを指定する　※作成していない場合はここで要作成
　7.SKUを指定する
　   ※重複しない文字列であれば何でもOK。命名ルールなし。
  　 ※例えば"BundleID"がcom.gmail.AppならSKUはComGmailAppのように設定することを推奨します。

**App Store Connectにユーザーを登録する**
App Store Connectの"ユーザとアクセス"で新規ユーザーを招待する

**TestFlightにテスターを登録する**
App Store Connectで作成したアプリのTestFlightの画面で新規内部テストグループを作成します。
　1.ブラウザを起動してApp Store Connectを開く
　2.作成したアプリのTestFlightの画面を開く
　3."内部テスト”横の「+」を押して新規内部テストグループを作成する
　4.内部テストグループにテスターを登録する
    　※App Store Connectに招待して承認されたユーザーが表示される。

**App Store Connectにアプリをアップロードする**
Xcodeでアプリのアップロード設定をします。
　1.(ファイル名).xcodeprojを開く
　2."General"タブの"Bundle Identifier"に、App Store Connectで作成したBundle IDを設定する
　3.Siginingは、基本的に"Automatically manage sigining"でOK。
　　※署名権限がなき場合は、"Provisioning Profile"を発行＆設定する必要あり
　4.メニュー"Product"⇒”Archive”でアーカイブを実行する
　　※”Archive”が選べないときは、シミュレーターを”Generic iOS Device”に選択する
　5.完了したら、"Distribute App"からアプリをApp Store Connectへアップロードする
　6.App Store Connectの作成したアプリ管理画面に移動、”ビルド”⇒"iOS"からアプリ処理状況を確認する
　　※管理画面へ反映されるまでに5～10分程度のラグあり
　7.輸出コンプライアンス情報の管理ボタンが表示されたらアップロード完了。

**内部テスターへアプリを配信する**
以下で開発者のタスクは終了です。
　1.輸出コンプライアンスの内容を確認して選択後、"内部テストを開始"を押す
　2.上記”TestFlightにテスターを登録する”を実施していない場合はここで実施する
　3.おわり

**内部テスターが実機端末でアプリをインストールする**
ここからは内部テスターの操作です。
　1.iPhoneなどの実機端末でApp StoreからTestFlightアプリをインストールする
　2.届いた内部テスト開始ﾒール内のリンクからTestFlightを起動、配信されたアプリをインストールする
　　※メールをPCなどで読んだ場合はリンクを開くとTestFlightのコードが表示されるので、表示されたコードを実機端末のTestFlightに入力してもOKです
　3.おわり

# Step.4 TestFlightを利用して外部テスターへアプリを配信して動作確認する
**作ったアプリを外部テスト配信申請に出す**
　1.ブラウザを起動してApp Store Connectを開く
　2.作成したアプリのTestFlightの画面を開く
　3."外部テスト”横の「+」を押して新規テストグループを作成する
　4."外部テスト”の”ビルド”を選択し、内部テストでアップロードしたビルドを選択する
　5.必要事項を入力する　※F/Bするメールアドレス、連絡先情報
　6.テスト内容を記載する
　7."審査へ提出”を押す
　8.審査待ち。
　　※私の場合、依頼から結果通知まで約9hでした。(米国の深夜時間を挟んだので、稼働時間自体はめっちゃ短い??)
　9.審査に通ったら、パブリックリンクがAppStoreConnectから取得できる
　　例) https://testflight.apple.com/join/xxxxxxxx
　10.おわり

**外部テスターへアプリを配信する**
以下で開発者のタスクは終了です。


**外部テスターが実機端末でアプリをインストールする**
ここからは外部テスターの操作です。
　1.iPhoneなどの実機端末でApp StoreからTestFlightアプリをインストールする
　2.届いた外部テスト開始ﾒール内のリンクからTestFlightを起動、配信されたアプリをインストールする
　3.おわり


**テスト用アプリのクラッシュ情報を確認する**
異常の発生確認には、クラッシュフィードバック機能を利用できます。
”App Store Connect”の [マイApp]⇒テスト対象のアプリ⇒[TestFlight]⇒[クラッシュ]から確認できます。


# Step.5 App Store Connectを経由してアプリを配信する

**App情報の登録**
”App Store Connect”の [マイApp]⇒[App Store]で以下情報を登録する
 - スクリーンショットを登録する
以下必須項目が対象となる。Xcode上で選択したデバイスが基準となる。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3185764/79d87ce7-69fd-3eac-2f9c-af49eb433401.png)
 - App Storeに表示するコメント、概要を登録する
 - 検索するキーワードを１つ以上登録する
 - サポートのURLを登録する
 - 著作権を設定する　例：「@2023 hott」
 - App情報を登録する
 - 言語を設定する
 - 年齢制限を登録する
　Appには無制限のWebアクセスが含まれますか？
　　⇒UIWebView, WKWebView, SFSafariViewControllerなどを使っていて、インターネット上のWebページを表示できて、リンクも適当に辿れるようだと「はい」にチェックをつける必要がある。
 - 価格を設定する
⇒価格、予約注文の可否、配信国の選択、
 - Appのプライバシーポリシーを設定する
 ⇒自分で作成したページリンクをつける
 - 初版(1.0)かつ位置情報を付与する場合は実機での動画が必要と、App Review申請後にF/Bで発覚。
 ⇒App Review ガイドラインにはそれらしきものなし。ガイドラインは要確認。

# おわりに

今後更新予定


_________________________________________
# いろいろ補足
**SKU**
　SKUはApple社がアプリの売り上げを管理するとき内部的に使用する名前です。SKUがユーザーに表示されることはありません。アプリが無料化有料化に関わらず、SKUの設定は必須です。    
　ちなみに、”Stock Keeping Unit”の略で、意味は”在庫管理単位”。

**App ID/Bundle ID**
　App IDとBundle IDは同じものです。
　Apple DeveloperではApp IDと表示されていたり、AppStore ConnectではBundle IDと表示されていたり、表記が統一されていないようです。


**Appライブラリのフォルダ分け**
XcodeおよびApp Store Connectでカテゴリ設定するが、Appライブラリのフォルダ分けに反映されるのは申請完了後。
ビルド/内部/外部テスト中はアカウント名または”Testflight"の名前となる。

_________________________________________
# 参考にしたリンク
ありがとうございました！

https://ameblo.jp/10soba/entry-12500441948.html

https://qiita.com/toshi586014/items/62fcab5aecaaa410128e

https://dev.classmethod.jp/articles/testfligh/#toc-3

https://tech.motex.co.jp/entry/2021/11/29/180750

https://qiita.com/umi_mori/items/4cc96fa7c07622d8705c

https://i-app-tec.com/ios/itunes-connect.html

https://zenn.dev/moutend/articles/feebf0120dce6e6426fa
_________________________________________
https://qiita.com/Qiita/items/c686397e4a0f4f11683d