iPhoneアプリ開発の過程で参考にした情報のまとめ - 実装からプロモーションまで

# はじめに

2021年4月に iPhone & iPad 向けに [ToDo リストのアプリ](https://note.com/hide_snow/n/n93cb7768b7ee)をリリースしました。その際に参考にした情報をここにまとめます。
これから初めて **iPhone アプリを開発し、リリースする予定という方の参考に**なれば幸いです。

# SwiftUI に関する情報

* **SwiftUI の基礎**
  - 書籍: [詳細! SwiftUI iPhoneアプリ開発入門ノート[2020] iOS 14+Xcode 12対応](https://www.amazon.co.jp/dp/B08PBH1R2R?tag=note0e2a-22&linkCode=ogi&th=1&psc=1)
     - 分かりやすく、**入門書として最適**。
  - [SwiftUIへの道](https://d1v1b.com/swiftui)
     - **SwiftUI の具体例が豊富に記載されていて、またその説明も分かりやすい**。
  - [iOS SwiftUI Training (ミクシィの22新卒技術研修資料)](https://github.com/mixigroup/ios-swiftui-training)
  - [Apple公式チュートリアル: Develop Apps for iOS] (https://developer.apple.com/tutorials/app-dev-training/)

* **データの永続化**
  * **複数の永続化方式の比較**
     - [iOS Data Persistence in Swift](https://www.iosapptemplates.com/blog/ios-development/data-persistence-ios-swift)
         - 永続化の手段として、 `UserDefaults`, `Keychain`, `Saving files to disk`, `CoreData`, `SQLite`, `Property List` を比較
  * **CoreData の使い方**
     - [やっとわかったSwift/CoreData入門](https://qiita.com/pe-ta/items/89203ccc72d964277818)
     - [Core Dataの使い方：基本編](https://capibara1969.com/3242/)
     - [Core Dataの使い方：エンティエィ（Entity）を定義する](https://capibara1969.com/3195/)
  * **CoreData の iCloud 連携**
     - [Apple公式: Setting Up Core Data with CloudKit](https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/setting_up_core_data_with_cloudkit)
     - [Core Data を CloudKit 連携させる](https://qiita.com/tasuwo/items/abe90e8302f261f11845#core-data-%E3%82%92-cloudkit-%E9%80%A3%E6%90%BA%E3%81%95%E3%81%9B%E3%82%8B)
     - [SwiftUI と MVVM で始める CoreData 入門 (その１５：iCloud 同期)](https://software.small-desk.com/development/2021/01/04/swiftui-coredata-mvvm-icloud-sync/)
         * `NSPersistentContainer の代わりに、NSPersistentCloudKitContainer を使うことで、自動的に iCloud と Sync されます。`
  * **UserDefaults の使い方**
     - [SwiftUIでUserDefaultsを使う](https://capibara1969.com/2539/)
  * **UserDefaults の iCloud 連携**
     - [iOSにユーザーデータを保存する方法と、そのためのコードの書き方](https://qiita.com/MaShunzhe/items/e7263507e07919a6adab#user-defaults)

* **通知**
  * [Apple公式: Scheduling a Notification Locally from Your App] (https://developer.apple.com/documentation/usernotifications/scheduling_a_notification_locally_from_your_app)

* **Property Wrappers**
  * [忙しい人向けの Data Essentials in SwiftUI: Part 1 #WWDC20](https://note.com/tobi462/n/nb95e309a4c15)
     - `View が一時的に使用するデータは @State、他の View が所有するデータを変更する場合は @Binding を利用するとよい。`
  * [Stack Overflow: Use @Binding with Core Data NSManagedObject?](hhttps://stackoverflow.com/questions/57614564/swiftui-use-binding-with-core-data-nsmanagedobject/60020576#60020576)
     - `@Binding only works with structs.`

* **多言語対応**
  - テキストの多言語化対応
     - [iOS アプリの多言語化（ローカリゼーション）まとめ](https://qiita.com/de_kichi/items/b7b12a03871c3f3bb73f)
     - [iOSアプリの国際化対応の勘所とTips集(Swift版)](https://qiita.com/mono0926/items/c41c1ce18b90b765a8f2)
     - [SwiftUI でText をローカライズする](https://zenn.dev/ariiyu/articles/d7b3cfefec057f)
  - 画像の多言語化対応
     - [iOSのアプリで画像のローカライズは、Assetsで出来ます。](https://hikaruapp.jpn.com/xcode/ios_assets-1824)
  - テスト
     - [iOSシミュレータの言語切替方法](https://www.chihayafuru.jp/tech/index.php/archives/846)
  - 英語への翻訳
     - 翻訳ツール: [DeepL](https://www.deepl.com/)
     - 単語・文法チェックツール: [Grammarly](https://www.grammarly.com/)

# App Store へのアプリの登録

## Apple Developer Program
自分が開発したアプリを App Store に登録するには、まず **Apple Developer Program に参加する必要**があります。

* **Apple Developer Program の内容**は以下のページで確認できます。
  - https://developer.apple.com/jp/programs/
* **Apple Developer Program への参加手続き**は以下のページからです。
  - https://developer.apple.com/jp/programs/enroll/
* **Apple Developer Program の登録アカウントの管理**は以下のページから行えます。
  - https://developer.apple.com/account

## TestFlight

* [Apple公式: TestFlightでAppをテストする](https://testflight.apple.com/)
  - テスター向けの TestFlight の利用手順

## App Store Connect
自分のアプリを App Store に登録するには、まずはじめに**アプリを App Store Connect にアップロードし、必要な情報を入力した上で、 Apple に審査を依頼する必要**があります。

* アプリの App Store Connect へのアップロード手順
  * [アプリ申請のためXcodeでアップロードする](https://i-app-tec.com/ios/app-upload.html)
* App Store Connect の iPhone & iPad アプリ
  * [App Store Connect](https://apps.apple.com/jp/app/app-store-connect/id1234793120)
     * これを iPhone にインストールすることで、 iPhone からアプリの審査状況などを確認できます。

## スクリーンショット

* [Apple公式: スクリーンショットの仕様](https://help.apple.com/app-store-connect/#/devd274dd925)
* Apple Product Images
  * [Apple公式: Apple Product Images](https://developer.apple.com/app-store/marketing/guidelines/#section-products)
  * [FACEBOOK Design](https://design.facebook.com/toolsandresources/devices)
* [App Store スクリーンショットデザインまとめ](https://note.com/saoiro/n/n3c126be4f776)
* [App Store提出用のスクリーンショットを無料で自作する](https://yaba-blog.com/app-store-screenshot/)
  - 私もこのページを参考にし、 Keynote を使ってスクリーンショットを作成しました。

# プロモーション(宣伝)
アプリの宣伝のための一つの手段として、**独自ドメインを取得**し、そのドメインにアプリの紹介ページを作成しました。また、プライバシポリシーを開示するページもそのドメイン上に作成しました。

また、独自ドメインを取得することで、**新規のメールアカウントを容易に作成**することができます。その新規のメールアカウントを使い、新規の Twitter アカウントを作成することで、 Twitter における宣伝活動もしやすくなります。

* **独自ドメインの取得**
  - 業者の比較
     * [Best domain registrars in 2021: cheap ways to buy domain names and exotic TLDs](https://www.techradar.com/news/best-domain-registrars)
     * [10 Best Domain Registrars](https://websitesetup.org/choosing-best-domain-registrar/)
     * [ドメインレジストラ8社使ってみたので比較レビュー](https://jyn.jp/compare-domain-registrar/)
  - [Google Domains](https://domains.google/intl/ja_jp/)
     * [ドメインをお名前.comからGoogle Domainsに移管したらメリットしかなかった](https://blog.potproject.net/2020/07/29/onamae-com-google-domains-transfer)
     * => 比較の結果、私は Google Domains を利用して独自ドメインを取得しました。

* **Webページの作成**
  * [Google Sites](https://sites.google.com/)

* App Store バッジ
  * [Apple公式: マーケティングリソースとアイデンティティに関するガイドライン
](https://developer.apple.com/jp/app-store/marketing/guidelines/)
     - App Store バッジは上記ページからダウンロードできます。