追記
初心者の方から***「そもそもターゲットってなんだよ」***という質問をいただきました
ターゲットを指定すると それ以降のバージョンで動く というものになります
iOS11をターゲットにしてると、2020/02/27現在, iOS11, iOS12, iOS13で動きます
デフォルトのiOS13をターゲットにしてると、iOS13だけでしか動かせません
そもそも
ここしばらく新規プロジェクトを作ったことなかったので気付きませんでしたが、2020/02/24現在、最新のXcode11で新規プロジェクトを作成するとそのままではiOS12以前では動かない状態のものが作成されました
いくらSwiftUIを普及させたいからって初心者殺しも大概にせいよってことでiOS12以前でも動かせるようになるまでを手順にしてみました
初心者への分かりやすさを優先したつもりですので、実際そういうことじゃないという箇所がありましても大目に見てください
環境 | |
---|---|
Xcode | version 11.3.1 |
レイアウト | Autolayout |
ターゲット | iOS 11.0 |
Xcodeを起動する
1は最近起動したプロジェクトが並びますので初めて起動した人は少し画面が違うかもしれません
2のCreate a new Xcode projectをクリックします
プロジェクト を作成する
テンプレートを選択する
こういう画面になりますので、まず1のようにiOSを選択します
次に、2のようにSingle View Appを選択します
最後に3のNextを押します
補足、ここでは何をしたか
プログラムにはだいたいどれも同じようなことを書く定型文があります。
テンプレートとはその定型文のことであり、ここではどの定型文を使うのか選択しています。
XCodeは iOS専用開発ツールではなく
、MacやAppleWatchといったメジャーなApple製品全般で動くソフトウェアを開発できるツール
です
そのため、まず1で iOSアプリを作る時の定型文を選びましたよ
という選択をしてます
プロジェクトを保存する箇所を選択する
このような画面になるので好きな場所を選択してCreateボタンを押してください
その指定した保存場所にソースコードなどが配置されます
Targetを変更する
Targetを確認する
このような画面になると思いますが選択されている状態によっては真ん中あたりが違う画面になってるかもしれません
この画面にするためには
1のプロジェクト名の部分を選択します
2のTargetsの中にあるプロジェクト名の部分を選択します
3のGeneralを選択します
これで今度こそ上記の画面になるかと思います
そして4のTargetがiOS XXXになってること確認します
このXXXはiOSのバージョン番号が書かれています
Targetを選択する
上記のようにiOS XXXの部分を選択すると他のiOSバージョンが一覧で並びます
今回はiOS 11.0を選択します
補足、ここでは何をしたか
アプリが動くiPhone本体やiOS自身もどんどんバージョンアップをしています
そのため、古いOSや端末では使えない機能があります
具体例だと顔認証の機能はiOS11.1で初めて追加されました
なので、顔認証のプログラムを組み込んでアプリを出したらiOS11以前のバージョンでは動きません
そのためXcodeで最低限どのバージョンで動かすようにするのか
というものを指定する必要があります
逆に古すぎるiOSをターゲットにするとどんどん追加された便利な機能が使えません
補足の補足
Appleとしてはなるべく最新のOSを使って欲しいので新しいOSがデフォルトで選択されています
しかしアプリ開発者はユーザ数を増やしたいのでなるべく古いOSを指定したいものです
具体的な正解はなくその時々でiOSのバージョンの普及率などをネットで調べてTargetを指定してください
iOS11で動くようにソースコードや設定を書き換える
SceneDelegate.swiftを開く
1でSceneDelegate.swiftを選択すると上のような画面になると思います
2がSceneDelegate.swiftの中身のソースコードで赤くなってる部分がエラーを意味しています
エラーになっている原因はさきほどTargetをiOS11.0にしたからで、このSceneDelegate.swift自体がiOS11では動きません
3でプロジェクト全体のエラーの総数を表しています
SceneDelegate.swiftを削除する
iOS11で使えないファイルなので削除します
削除したいファイル(SceneDelegate.swift)を選択中に「command」 + 「delete」を同時に押すと上記のようなアラートが出ます
Move to Trashを選択してください
削除はこのような状態になります
1でSceneDelegate.swiftが消えて2でアラートが減ったことが分かると思います
補足、ここでは何をしたのか
プログラムのファイルは当然PCの中にありますが、Xcodeはさらにどのファイルが今のプロジェクトに関係のあるファイルなのか設定されています
アラートの中のRemove Referenceは「Xcodeの管理から外すけどMacには残す」ということになり、Move to Trashは「Xcodeの管理から外すしMacからもファイルを消すよ(ゴミ箱に入れる)」ということになります
いらないファイルを残しておく意味もないのでMove to Trashを選択しました
AppDelegate.swiftを開く
1のAppDelegate.swiftを開くと真ん中が2のようになると思います
これがAppDelegate.swiftに書かれているソースコードの内容です
2の中に赤マルが4と書かれている部分が「ここでエラーが4つ分あるぞ」という意味です
3で分かる通り残りのエラーは6つなのでこのファイルに全てのエラーがあります
これを修正していきます
AppDelegate.swiftにwindowを追加する
上記のように1のvar window: UIWindow?
を追加します
AppDelegate.swiftから不要なコードを消す
上記の1で囲われたふたつのfuncを消します
エラーが消えたことを確認する
funcの削除が終わると上記の画面になります
1でエラーが消えたことを確認できます
補足、ここでは何をしたか
iOSが動くにはlet window: UIWindow?というコードが必要なのですが、元はさきほど削除したSceneDelegate.swiftにそれが書かれていました
そのlet window: UIWindow?をAppDelegate.swiftに移し、さらにiOS11では動かない不要なコードを削除しました
info.plistを開く
上記のように1のinfo.plistを選択します
真ん中の画面がinfo.plistの内容を表示したものに変わるので2のApplication Scene Manifestを選択します
キーボードのdeleteを押して削除します
削除後の画面はこのようになります
補足、ここでは何をしたか
これもSceneDelegate.swift, AppDelegate.swiftと同様にiOS11では使えない設定を削除しました
プログラムをシミュレータで動かす
プログラムが動く状態になったので実際にiPhoneシミュレータを選択してアプリを動かします
iOS Deviceを選択する
上記の1を選択すると画面が下記のようにシミュレータが一覧で表示されます(シミュレータの数や種類は実際のものとは違うかもしれません)
この中からこれから動かしたいiPhoneを選択します、今回はiPhone8(11.4)を選択しました
(11.4)はOSのバージョンを表しています
選択すると画面は下記のようになります
選択したシミュレータでアプリを動かす
上記の1を押ししばらく待ちます
しばらくすると上記の1のようにシミュレータが立ち上がり画面が真っ白になれば成功です
2を押すと起動中のアプリが終了します
###補足、ここでは何をしたのか
iPhone開発ではMacでプログラムを書きiPhoneで動かしますが、プログラムを1行書き変える度にiPhoneにプログラムを転送していては時間がかかります
またiPhoneにも8やXや11など種類がありますが全ての端末を揃えるにはお金がかかります
そのためMacの中に仮想のiPhone(シミュレータ)があるので、そこでプログラムの動作を確認します
以上です
初心者が新規プロジェクト作成してから5分もかからず動かせたら嬉しいです