質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

343閲覧

Swift4で書いたプログラムが動くiOSのバージョン

tarofess

総合スコア127

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

2クリップ

投稿2018/01/06 09:37

Swift4で書いたプログラムは、例えばiOS10では普通に動作するでしょうか?もしくはどのiOSのバージョンまで動かすことができるでしょうか?
もしiOS10でも動くとすると、Swift4からはCodableというプロトコルが追加されていますが、こちらもiOS10では動作するということになるでしょうか?
iOS10ではなかったプロトコルなので、動かないのではないかと懸念しています。
どなたか教えていただけると助かります。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Swiftバージョンと最低動作OSとの関係はちょっと複雑です。

iOS開発で最低OSバージョンを決めているのは、言語ではなく、SDKです。普通にXCodeの最新版を使っていると最新のSDKが付属しますが、その最新のSDKはだいたい数バージョン前のOSまでをサポートすることが多いです。現在、 XCode9付属のSDKでは最低iOS8までサポートしているようです。
加えて、手動で古いSDKをインストールすることができるので、頑張るともう少し前のOSまでサポート範囲を広げることができるようです(けっこう苦労するらしいですが)。

一方、コンパイラもどんどんバージョンアップしており、最新のコンパイラは最新のXCodeでしか使えません。Swift4をコンパイルできるコンパイラが使えるのはXCode9以降のみです。

したがって、こういう流れでアプリの最低バージョンが決まります

Swift4を選択

XCodeのバージョンがSwift4対応コンパイラを扱えるXcode9以降に縛られる

対象OSがXCode9でサポートされるSDKに縛られる

デフォルトでは iOS8以降が対象に。古いSDKを入れられればもっと広がるかも

これにプラスして、使う機能によってはAPIによる縛りがかかります。新しいOSでのみ利用可能な機能を使うアプリは、最低サポートOSがそこになります。例えばiOS9以降で搭載されたReplayKitを使用する場合、そのアプリの最低OSバージョンはiOS9です。

Codableですが、CodableプロトコルはSwift4の言語仕様を使っていますが、これ自体は言語の方の話なので本来はOSとは関係ありません。が、実際にエンコード/デコードを行うJSONDecoderがiOS11から利用可能なAPIなので、上記のAPIによる縛りがかかってiOS11以降専用となります。

(修正)
Codableですが、CodableプロトコルはSwift4の言語仕様を使っていますが、OSの新機能を使っているわけではないので、コンパイル時にデータや文字列の基本操作に還元されるようです。したがって、SDKの最低サポートバージョンまで利用可能です。JSONDecoderはiOS11以降かと思っていましたが、Deployment TargetをiOS8にしてもビルド可能でした。これも内部的には新機能は使っていないようです。

投稿2018/01/09 23:41

編集2018/01/10 02:43
YokemuraTakeshi

総合スコア297

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarofess

2018/01/10 01:12

ご回答ありがとうございます。 とても分かりやすくて理解が深まりました。ありがとうございます。 あと少し疑問があり、「CodableプロトコルはSwift4の言語仕様を使っていますが」とあるのですが、Swift4を扱うには最新のコンパイラが必要、つまり最新のSDKが必要ということですよね? ということは、「これ自体は言語の方の話なので本来はOSとは関係ありません」とありますが、Codableを使うには最新のSDKが必要であり、CodableはOSと関係があるということにはならないのでしょうか?
YokemuraTakeshi

2018/01/10 02:19 編集

「Swift4を扱うには最新のコンパイラが必要、つまり最新のSDKが必要ということですよね?」←ここは違っています。正しくは「Swift4を扱うには最新のコンパイラが必要、ゆえに最新のXCodeが必要、その最新のXCodeには最新のSDKが付いてくる」です。それはさておき、Codableについては間違ったことを言っているかもしれません。あらためて調べて分かり次第回答を修正します。
tarofess

2018/01/10 02:22

なるほど、最新のSDKが付いているXcodeが必要と言うことなのですね。 了解しました、編集お待ちしております。
fuzzball

2018/01/10 02:58 編集

>>JSONDecoderはiOS11以降かと思っていましたが、 >>Deployment TargetをiOS8にしてもビルド可能でした JSONDecoderは、ドキュメントのSDKsに iOS 7.0+ と書いてますね。
tarofess

2018/01/10 03:00

Codableはコンパイル時にそのような動作になっているのですね。 スッキリしました。 詳しい解説誠にありがとうございました。 JSONDecoderはiOS7以降で使えるものなのですね。ありがとうございます。
guest

0

プロトコルはSwiftの標準ライブラリの一部ですので、iOSのバージョンとは関係ありません。
バージョンが問題になるのは、iOSのAPIを呼び出す場合です。存在しないAPIを呼び出すとアプリがクラッシュします。

投稿2018/01/06 10:01

編集2018/01/06 10:05
hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarofess

2018/01/07 05:17

ご回答ありがとうございます。 標準ライブラリとAPIは何が違うのでしょうか?例えばこちらの記事のSwiftのソースコードでCoreLocationをインポートしていますが、CoreLocationってAPIではなく標準ライブラリなのでしょうか? https://qiita.com/k-yamada-github/items/5ce29b3c30397104461e 標準ライブラリとAPIの違いがイマイチ分からないです...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問