iOSアプリ開発でやっておくべき設定と実装しておきたい機能まとめ！

個人的にアプリ開発をするようになってからアプリ開発をスムーズに行うために**何かと実装しがちな機能や処理、やっておくべき設定など、備忘録がてらまとめておきます**。

# やっておくべき設定

+ アプリアイコンの設置
+ ダークモード対応
+ アプリアイコン下の名称変更
+ 日本語化(Localizations)
+ 広告の付与

## アプリアイコンの設置
アプリアイコンを設置するには「Xcode」から「**Assets**」または「**Assets.xcassets**」をクリックしてその中にアイコンセットを組み込みます。

![2B5B49CB-922D-45CD-A34A-72077AF85A7F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/6e1dbaf2-6b2a-2ff3-2ea5-4580009cb913.png)

iOSアプリでは**アイコンを複数サイズ用意**しなければいけません。自分で用意するのは大変すぎるので**専用のジェネレーターツールを使うのがオススメ**です。

[Webツール：App Icon Generator](https://appicon.co/)

[【Swift UI】Xcodeでアプリアイコンを設定する方法！](https://appdev-room.com/swift-app-icon)

## ダークモード対応
SwiftUIでは現在**デフォルトでダークモード対応を施してくれる**ようになっています。

とはいえ**明示的に文字色や背景色を白色や黒色に指定している場合は注意**が必要です。

環境値のcolorSchemeを参照すれば現在のモードを取得できるのでそれに合わせて分岐させるようにしておくと良いです。

```swift
@Environment(\.colorScheme) var colorScheme: ColorScheme

var body: some View {
    TextField("km", text: $milage)
      .foregroundColor(colorScheme == .dark ? Color.white : Color.black)
}
```

[【Swift UI】ダークモード時にテキストの文字色を変更する方法！](https://appdev-room.com/swift-dark-mode)

## アプリアイコン下の名称変更
ホーム画面でアプリアイコン下に表示される名称は**デフォルトではプロジェクト名**になっているので任意の値に変更しておくと見た目が良くなります。

![97DE217B-D6AB-443C-BF7C-526A94DA7A66.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/cddc7581-cddb-d66c-2569-91e68591518f.png)

変更方法はプロジェクトファイルの「**Info.plist**」に「**Bundle display name**」を追加して任意の値を入力するだけです。

[【iOS】Xcodeでホーム画面に表示されるアプリ名を変更する方法！](https://appdev-room.com/swift-app-name)

## 日本語化(Localizations)
アプリ内のLocalizationsを日本語にするためにはプロジェクトファイルの「Info.plist」に「**Localizations**」を追加します。するとArrayのLocalizationsが作成されるので再度クリックし中の「**Key：item 0**」のValueを**Japaneseに変更**します。

![46EC354C-74A5-4602-B337-0E7FC8FB3812.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/d667eede-134d-bad2-3ec6-e59001e8f070.png)

[日本語化(Localizations)](https://appdev-room.com/swift-sharebutton#head7)

## 広告の付与
アプリを運用する上で完全無償というわけにもいかないので広告を付与します。
広告をつけるためには「**Google AdMob**」へ登録します。Web版の「Google AdSense」と同じようなものです。

Swiftでは「**Google-Mobile-Ads-SDK**」**ライブラリとして提供**されているのでプロジェクトに簡単に組み込むことが可能です。

[【SwiftUI】AdMobを使って広告を実装する方法!バナーViewの作成](https://appdev-room.com/swift-admob)

常時表示されるバナー広告や短い動画を視聴するリワード広告など用途によってさまざまな種類の広告を使用可能になります。


# iOSアプリに欲しい機能

+ シェア機能
+ レビュー投稿機能
+ ダークモード/ライトモード切り替え
+ 利用規約/プライバシーポリシーの設置

## アプリのシェア機能
アプリ内から**アプリをシェアしてもらうためのボタン**を追加しておくと便利です。

以下のようなシェア先を指定できるポップアップがSwiftでは簡単に実装できるので試してみてください。

![61863DD8-8F57-4894-AF54-F8941109D070.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/0266521d-6d35-ca1d-89a1-c3591f352df6.png)


[【Swift UI】SNSシェアボタンの作成方法！UIActivityViewControllerの使い方](https://appdev-room.com/swift-sharebutton)


## レビュー投稿機能
App Storeのレビュー投稿へ促すにはアプリ内からリンクボタンで飛ばせばオーケーです。
レビューページのURLはアプリページURL末尾に```?action=write-review```を付与するだけです。

```swift
Link(destination:URL.init(string: "https://apps.apple.com/jp/app/%E3%81%B5%E3%82%8B%E3%83%AD%E3%82%B0/id1644963031?action=write-review")!,
  label: {
    HStack{
        Image(systemName:"hand.thumbsup").frame(width: 30).frame(width: 30).foregroundColor(.orange)
        Text("アプリをレビューする")
    }
})
```

[https://apps.apple.com/jp/app/ふるログ/id1644963031?action=write-review](https://apps.apple.com/jp/app/ふるログ/id1644963031?action=write-review)

## ダークモード/ライトモード切り替え
**アプリ内からダークモードとライトモードを切り替える**ようにすることも可能です。

切り替えるには```preferredColorScheme```メソッドを使います。引数に```ColorScheme```の値を指定すれば**呼び出したビューが指定したモードに切り替わります**。

以下は**ボタンクリックでモードを切り替えるコード**です。


```swift
struct ContentView: View {
    @State  private var isDarkMode = true
    var body: some View {
        Button(action: {
            isDarkMode.toggle()
        }, label: {
            Text(isDarkMode ? "Light Mode" : "Dark Mode")
        }).preferredColorScheme(isDarkMode ? .dark : .light)
    }
}
```

![38C9713B-0D5E-4E50-8B88-1A33131A24FC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2264957/84c47889-58fb-7974-1bfe-62462319b993.png)

[【Swift UI】アプリ内でダークモードとライトモードを切り替える方法！](https://tech.amefure.com/swift-dark-mode-change)

## 利用規約/プライバシーポリシーの設置
アプリ内から**利用規約やプライバシーポリシー**へのリンクがあると親切です。必須ではありませんが余裕があったら追加すると良いかもしれません。

ご覧いただきありがとうございました。
他にも何かありましたら教えていただけると嬉しいです。