iOSアプリをAppStoreConnectに登録するまで

# 目次
1. はじめに
2. 前提
3. 環境
4. 実施したこと
    1. App ID作成
    2. 証明書の設定
    3. AppStoreConnectへの登録
5. 最後に
6. 参考


## 1.はじめに
iOSエンジニアなのにiOSアプリをAppStoreに公開する方法を知らなかったので、どんなことをやる必要があるのか、実際に調べて、試してみました！
この記事では、AppStoreConnectに登録するまでに実施したことを紹介します。


**公開までの大まかな流れ**
1. AppStoreConnectに登録
2. AppStoreに申請
3. AppStoreに公開
    * 申請が通ると、AppStoreに公開可能となる

**そもそもAppStoreConnectとは？**
AppStoreConnectとは、Appleが提供しているアプリの管理や申請を行うためのツールです。
アプリの名前や製造者名などを登録して申請することで、AppStoreに公開しても問題ないか確認することができます。
申請だけではなく、アプリの価格や年齢制限などの管理も行えます。


## 2.前提
以下は完了している前提で紹介します。
* Apple Developer Programに登録(年間99ドルかかります)
  * Webページからの登録すると失敗するという記事を見かけたので、アプリから登録した方が良いかもしれません。
    * [アプリでの登録手順](https://developer.apple.com/jp/support/app-account)

* Xcodeのダウンロード
  * Xcodeとは、Appleが提供しているAppleプラットフォーム向けの統合開発環境(IDE)です。Appleプラットフォーム(iPhone,iPad,Apple Vision Proなど)向けのアプリケーションを作成する際にはXcodeが必要になります。
    * [Xcodeのダウンロード方法](https://qiita.com/naginx/items/0d560c460235f1ab2282)
* 配信するアプリの作成 
  * タスクを簡単に管理できるTODOアプリを作成
    * iPhone向け(iPad非対応)、ローカライズは日本語のみ(以下画像の赤枠のアプリ)
  * <img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864710/b009bd37-7d22-956b-ea1e-c8530d8b7400.png">


## 3.環境
* 実施環境
  * macOS：Sonoma 14.6 (23G80)
  * Xcode：15.2 (15C500b)
* 必須環境(2024年9月時点)
  * macOS：Ventura 13.5以上
  * Xcode：15.0以上
    * 2024年9月時点では、AppStoreに公開するにはXcode15.0以降のバージョンが必須です。macOSバージョンによって使用できるXcodeのバージョンが異なり、15.0を使用するためにはmacOSのバージョンがVentura 13.5以上であることが必須です。
    *  [こちら](https://developer.apple.com/jp/ios/submit/)から引用
       >2024年4月より、App Storeに提出するiOSアプリとiPadOSアプリはすべて、Xcode 15以降およびiOS 17以降のSDKでビルドする必要があります。

## 4.実施したこと
2024年9月時点での検証内容です。
### 1. App ID作成
   * safariで[Apple Developer](https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=891bd3417a7776362562d2197f89480a8547b108fd934911bcbea0110d07f757&path=%2Faccount%2F&rv=1)にログインする
   * Certificates, Identifiers & Profiles > Identifiersを選択し「+」ボタンを押下する
   * App IDsを選択しContinueボタンを押下する
   * Select a typeはAppを選択し、Continueボタンを押下する
     * 通常のアプリを配信するためAppClipではなく、Appを選択
       * [AppClip](https://developer.apple.com/jp/app-clips/)とは
   * DescriptionにApp IDの説明を入力する(例：sample App)
     * 記載内容はStoreに公開されないが、自分がアプリを識別できるような情報を入力する
   * Bundle IDを設定する
     * Explicitを選択する
       * 基本的にはExplicitだが、Push通知などの機能を使用せずID定義の手間を減らしたいのであればWildcardを選択する
   * Bundle IDを入力 
     * App ID作成後は変更できないため注意
       * 逆ドメイン名スタイルの文字列 (com.domainname.appname) で作ることが推奨されているので、それに沿って作成するのが吉(これを見ずに作成し、作り直しが地味に手間だった)
     * アプリ作成時に設定したBundle IDを入力する
   * Capabilities一覧の中にアプリで使用した機能があれば、チェックを入れる
     * [Capabilities一覧表](https://developer.apple.com/jp/help/account/reference/supported-capabilities-ios/)
   * Continueボタン押下後、Registerボタンを押下する

### 2. 証明書の設定
   * Xcodeでプロジェクトを開く
   * Xcodeのコンテントエリアから作成したアプリを選択し、TARGETS欄から作成したアプリを選択
   * 上部バーの「Signing&Capabillities」を選択し、Profileを設定する
     * Profileを用意する場合、Provisioning ProfileにそのProfileを設定する
     * 用意しない場合、Automatically manage signingにチェックを入れる(今回はこちらを設定した)
   * TeamsにAppleDevelopperに登録したアカウントの法人名 or 個人名を選択
     * AppleDevelopperにログインし、メンバーシップの詳細から確認できる
   * Bundle Identifierの欄にApp ID作成時に設定したBundle IDを入力する

### 3. AppStoreConnectへの登録
   * WebブラウザでAppStoreConnectにログインする
   * アプリを選択後「＋」ボタンを押下し「新規アプリ」を選択
   * 配信するプラットフォーム、名前、プライマリ言語、BundleID、SKU、ユーザーアクセスの可否を入力
     * プライマリ言語について
       * ローカライズされていない言語のAppStoreで開かれた際に、デフォルトで表示する言語の設定
         * 登録したAppを選択 > 左メニューの「アプリ情報」>「ローカライズ可能な情報」の言語が表示されているプルダウンを表示し、言語横に表示されている「+」を押下することで追加可能
     * ユーザーアクセスについて
       * アプリの情報を閲覧できるかどうか、制限をかけることが可能。しかし、Admin、Finance、Access to Reportsの権限のメンバーには制限をかけることができない。
         * [アクセス権の変更方法](https://developer.apple.com/jp/help/app-store-connect/manage-your-team/edit-access-to-apps/)
       * AppStoreConnectに登録したアプリを削除するにはAdmin以上の権限がないとできないため、自身の権限がAdmin未満かどうか注意
         * [各権限のアクセス可能範囲](https://developer.apple.com/jp/help/account/manage-your-team/roles/)
 
 
## 5.最後に
このあとは、アプリの一般情報(画面のスクショなど)を登録してAppStoreに申請という流れになります。
実際にAppStoreの公開まで完了したら、また記事書こうと思っています。
今後公開されましたら、是非そちらもよろしくお願いします！
 
## 6.参考
* https://zenn.dev/moutend/articles/feebf0120dce6e6426fa
* https://zenn.dev/nekoniki/articles/f9d4a8e009603a