世界一詳細に全部日本語でXcode11で作った新規プロジェクトをiOS12以前で実行できるところまで解説する

# 追記
初心者の方から***「そもそもターゲットってなんだよ」***という質問をいただきました
ターゲットを指定すると ***それ以降のバージョンで動く*** というものになります
iOS11をターゲットにしてると、2020/02/27現在, iOS11, iOS12, iOS13で動きます
デフォルトのiOS13をターゲットにしてると、iOS13だけでしか動かせません

# そもそも
ここしばらく新規プロジェクトを作ったことなかったので気付きませんでしたが、2020/02/24現在、最新のXcode11で新規プロジェクトを作成するとそのままではiOS12以前では動かない状態のものが作成されました
いくらSwiftUIを普及させたいからって初心者殺しも大概にせいよってことでiOS12以前でも動かせるようになるまでを手順にしてみました
初心者への分かりやすさを優先したつもりですので、実際そういうことじゃないという箇所がありましても大目に見てください :bow: 

|環境||
|:--:|:--:|
|Xcode|version 11.3.1|
|レイアウト|Autolayout|
|ターゲット|iOS 11.0|


# Xcodeを起動する

<img src="https://i.gyazo.com/80c6811778369407b3638b683b318594.png" width=900 />


1は最近起動したプロジェクトが並びますので初めて起動した人は少し画面が違うかもしれません
2の**Create a new Xcode project**をクリックします


# プロジェクト を作成する

## テンプレートを選択する

<img src="https://i.gyazo.com/180a021e5567608b33835349bbe628d7.png" width=900 />

こういう画面になりますので、まず１のように**iOS**を選択します
次に、2のように**Single View App**を選択します
最後に3の**Next**を押します

### 補足、ここでは何をしたか
プログラムにはだいたいどれも同じようなことを書く定型文があります。
テンプレートとはその定型文のことであり、ここではどの定型文を使うのか選択しています。
XCodeは `iOS専用開発ツールではなく`、MacやAppleWatchといった`メジャーなApple製品全般で動くソフトウェアを開発できるツール`です
そのため、まず1で `iOSアプリを作る時の定型文を選びましたよ`という選択をしてます

## プロジェクトを保存する箇所を選択する

このような画面になるので好きな場所を選択して**Createボタン**を押してください
その指定した保存場所にソースコードなどが配置されます

<img src="https://i.gyazo.com/b9db8eb4c96a0cf3f33cc9c5347d42ce.png" width=900 />

# Targetを変更する

## Targetを確認する

<img src="https://i.gyazo.com/11504032020b0ef42077e713b6379a4b.png" width=900 />

このような画面になると思いますが選択されている状態によっては真ん中あたりが違う画面になってるかもしれません
この画面にするためには
1の**プロジェクト名**の部分を選択します
2のTargetsの中にある**プロジェクト名**の部分を選択します
3の**General**を選択します
これで今度こそ上記の画面になるかと思います

そして4のTargetが**iOS XXX**になってること確認します
このXXXはiOSのバージョン番号が書かれています

## Targetを選択する

<img src="https://i.gyazo.com/0d8c801e1de04abc56bce71acb048cd0.png" width=900 />

上記のように**iOS XXX**の部分を選択すると他のiOSバージョンが一覧で並びます
今回は**iOS 11.0**を選択します

### 補足、ここでは何をしたか
アプリが動くiPhone本体やiOS自身もどんどんバージョンアップをしています
そのため、古いOSや端末では使えない機能があります
具体例だと顔認証の機能はiOS11.1で初めて追加されました
なので、顔認証のプログラムを組み込んでアプリを出したらiOS11以前のバージョンでは動きません
そのためXcodeで`最低限どのバージョンで動かすようにするのか`というものを指定する必要があります
逆に古すぎるiOSをターゲットにするとどんどん追加された便利な機能が使えません

### 補足の補足
Appleとしてはなるべく最新のOSを使って欲しいので新しいOSがデフォルトで選択されています
しかしアプリ開発者はユーザ数を増やしたいのでなるべく古いOSを指定したいものです
具体的な正解はなくその時々でiOSのバージョンの普及率などをネットで調べてTargetを指定してください

# iOS11で動くようにソースコードや設定を書き換える

## SceneDelegate.swiftを開く

<img src="https://i.gyazo.com/98c1038f722ada317242fa76cc20eed0.png" width=900 />

1で**SceneDelegate.swift**を選択すると上のような画面になると思います
2が**SceneDelegate.swift**の中身のソースコードで赤くなってる部分がエラーを意味しています
エラーになっている原因はさきほど**Target**を**iOS11.0**にしたからで、この**SceneDelegate.swift**自体がiOS11では動きません
3でプロジェクト全体のエラーの総数を表しています

## SceneDelegate.swiftを削除する

<img src="https://i.gyazo.com/64edea7c3fc6a4e97d8e55cbbbd3ef25.png" width=900 />

iOS11で使えないファイルなので削除します
削除したいファイル(SceneDelegate.swift)を選択中に「command」 + 「delete」を同時に押すと上記のようなアラートが出ます
**Move to Trash**を選択してください

削除はこのような状態になります

<img src="https://i.gyazo.com/2c930079f4034bbdbdd2e2902e59c30d.png" width=900 />

1で**SceneDelegate.swift**が消えて2でアラートが減ったことが分かると思います

### 補足、ここでは何をしたのか
プログラムのファイルは当然PCの中にありますが、Xcodeはさらにどのファイルが今のプロジェクトに関係のあるファイルなのか設定されています
アラートの中の**Remove Reference**は「Xcodeの管理から外すけどMacには残す」ということになり、**Move to Trash**は「Xcodeの管理から外すしMacからもファイルを消すよ(ゴミ箱に入れる)」ということになります
いらないファイルを残しておく意味もないので**Move to Trash**を選択しました


## AppDelegate.swiftを開く

<img src="https://i.gyazo.com/6491f22678d90f20b82182742c8bc78f.png" width=900 />

1の**AppDelegate.swift**を開くと真ん中が2のようになると思います
これが**AppDelegate.swift**に書かれているソースコードの内容です
2の中に赤マルが4と書かれている部分が「ここでエラーが4つ分あるぞ」という意味です
3で分かる通り残りのエラーは6つなのでこのファイルに全てのエラーがあります
これを修正していきます

## AppDelegate.swiftにwindowを追加する

<img src="https://i.gyazo.com/a0b358c22546dc55294a943cd98c67ef.png" width=900 />

上記のように1の`var window: UIWindow?`を追加します

## AppDelegate.swiftから不要なコードを消す

<img src="https://i.gyazo.com/4ccd5ae4494567c2c27d6916edabdf0f.png" width=900 />

上記の1で囲われたふたつの**func**を消します

## エラーが消えたことを確認する

<img src="https://i.gyazo.com/0c97a88a9c56f5f1f9bfe4c7a6686d47.png" width=900 />

**func**の削除が終わると上記の画面になります
1でエラーが消えたことを確認できます

### 補足、ここでは何をしたか
iOSが動くには**let window: UIWindow?**というコードが必要なのですが、元はさきほど削除した**SceneDelegate.swift**にそれが書かれていました
その**let window: UIWindow?**を**AppDelegate.swift**に移し、さらにiOS11では動かない不要なコードを削除しました

## info.plistを開く

<img src="https://i.gyazo.com/218b5dbe8f5a33535870b1b12c285b29.png" width=900 />

上記のように1の**info.plist**を選択します
真ん中の画面が**info.plist**の内容を表示したものに変わるので2の**Application Scene Manifest**を選択します
キーボードの**delete**を押して削除します

削除後の画面はこのようになります

<img src="https://i.gyazo.com/279d17efedb03aafa5a06ceff02e03f5.png" width=900 />

### 補足、ここでは何をしたか
これも**SceneDelegate.swift**, **AppDelegate.swift**と同様にiOS11では使えない設定を削除しました


# プログラムをシミュレータで動かす

プログラムが動く状態になったので実際にiPhoneシミュレータを選択してアプリを動かします

## iOS Deviceを選択する

<img src="https://i.gyazo.com/1d37b31f097efdb72b48da4372bfb174.png" width=900 />

上記の1を選択すると画面が下記のようにシミュレータが一覧で表示されます(シミュレータの数や種類は実際のものとは違うかもしれません)

<img src="https://i.gyazo.com/2a3004514b83c1381e14fd535e92a28e.png
" width=900 />

この中からこれから動かしたいiPhoneを選択します、今回はiPhone8(11.4)を選択しました
(11.4)はOSのバージョンを表しています
選択すると画面は下記のようになります

<img src="https://i.gyazo.com/db47e3703f0ef9f4774db59747f75e10.png
" width=900 />


## 選択したシミュレータでアプリを動かす

<img src="https://i.gyazo.com/d64bbdbe484dec0064b02286087e2d44.png
" width=900 />

上記の1を押ししばらく待ちます

<img src="https://i.gyazo.com/839856f6622c523d651aa8fcef145821.png" width=900 />

しばらくすると上記の1のようにシミュレータが立ち上がり画面が真っ白になれば成功です
2を押すと起動中のアプリが終了します

###補足、ここでは何をしたのか
iPhone開発ではMacでプログラムを書きiPhoneで動かしますが、プログラムを１行書き変える度にiPhoneにプログラムを転送していては時間がかかります
またiPhoneにも8やXや11など種類がありますが全ての端末を揃えるにはお金がかかります
そのためMacの中に仮想のiPhone(シミュレータ)があるので、そこでプログラムの動作を確認します

# 以上です
初心者が新規プロジェクト作成してから5分もかからず動かせたら嬉しいです