SwiftUIはiOS 12.x以前と下位互換性がありますか?


123

SwiftUIで作成されたアプリがある場合、iOS 13より前のiOSで動作しますか?


1
やってみませんか?Xcode 11ベータ版をダウンロードできます。チュートリアルはこちらのdeveloper.apple.com/tutorials/swiftuiにあります。
Martin R

1
フォークスは、なぜ私の回答が@Jean-FrançoisFabreによって削除されたのか誰もが知っています
CrazyPro007

10
いいえ、SwiftUIはiOS 12.x以前では動作しません。
ystack

回答:


89

Xcode 11でチェックアウトしたところ、SwiftUIのView実装でわかるように、下位互換性がないことが確認できます。

/// A piece of user interface.
///
/// You create custom views by declaring types that conform to the `View`
/// protocol. Implement the required `body` property to provide the content
/// and behavior for your custom view.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public protocol View : _View {

    /// The type of view representing the body of this view.
    ///
    /// When you create a custom view, Swift infers this type from your
    /// implementation of the required `body` property.
    associatedtype Body : View

    /// Declares the content and behavior of this view.
    var body: Self.Body { get }
}

7
少なくともあと5年?現在、iOS 7以下で利用可能なAPIのみを使用していますか?
David Monagle

5
奇妙なことだけカタリナ(10.5)上で実行されますモハーベ(10.4)上のXcodeの11とSwiftUIアプリケーションを作ることができるということです
闘莉王Calazans

34

すべてのライブラリはすでにiOS 13以降で注釈が付けられているので、私はそうは思いません。

また、ドキュメントでは、Appleはサポートされているバージョンについて明記しています。

  • iOS13.0 +ベータ
  • macOS10.15 +ベータ
  • tvOS 13.0以降のベータ版
  • watchOS 6.0+ベータ

ここに画像の説明を入力してください


32

SwiftUIおよびCombineは、Swift 5.1でOpaque-Return-Typesを使用します。Opaque -Return-Types(他の機能とともに)はSwift 5.1で実装されているため、その実装の性質上、Swift 5.0にデプロイできません(DSLとは異なります)またはProperty-Wrappers)、そしてiOS 13はOS にSwift 5.1ランタイムを含む最も初期のiOS SDKであるため、質問に対する答えは「いいえ」であり、SwiftUICombineは以前のバージョンのiOSでは使用できません。

それ以外の場合は、AppleはSwift 5.1ランタイム(または将来のリリース)を以前のSwiftバージョンと同じようにアプリケーションにバンドルする方法を提供しますが、これによりApp-sizeが増加し、システム全体にオーバーヘッドが再び追加されるため、これは疑わしいでしょう起こります。

それは可能性が下位互換性があります

Swift 5.1はまだリリースされておらず、不透明な戻り値の型DSLpropertyDelegatepropertyWrapperとしてWWDCで導入)などのSwiftUI機能を使用します。これらはSwift 5.1でのみ使用できます。Swift 5はバイナリで安定しているため、Xcode11内に埋め込まれたswift-frameworksを使用することはできなかったと思います。したがって、Swift 5.1がリリースされるまで、Cocoaのコアにこれらの機能を再実装し、iOS13 +として使用可能とマークしました。

私の仮定は、Ordered Collection DiffingDSLがSwift 5.1で利用可能になる予定であり、XcodeやAppleのエコシステムとは相関がないという事実に基づいていますが、それらもとマークされてい@available(iOS13,...)ます。これは、Swift 5.1機能を使用してすべてをiOSの可用性属性でマークする必要があったことを意味します。スウィフト5.1がリリースされるが、我々はについて確認することはできません一度それらのいくつかは削除されますSwiftUICombine、Appleはそう伝えていない限り。これは、DSLの提案でも言及されています。

実装:PR。Xcode開発者プレビューの実装では、ここで説明する変換よりもやや単純な変換を使用していることに注意してください。リンクされたPRはプレビューでの実装を反映していますが、この提案に合わせて活発に開発中です。

そのため、Swift 5.1がリリースされると、後方非互換性の制限が解除される可能性がありますが、それは実際にAppleチームが明確にする必要があります


1
これに関する更新はありますか?あなたが言及したPRがマージされ、Swift 5.1がリリースされました
user158

@ user158回答を更新し、この機能をサポートできない理由を説明しました。
farzadshbfn

15

いいえ。SwiftUIには、iOS 13以降、macOS 10.15以降、tvOS 13以降、またはwatchOS 6以降の展開ターゲットが必要です。フレームワークには、古いバージョンのOSには存在しない多くの新しいタイプが含まれています。


より低い展開ターゲットをサポートしながら、iOS 13でSwiftUIを使用することが可能です。stackoverflow.com/a/58372597/840742を
Renatus

13

iPadではなくiPhoneをサポートするために撮影している場合、ほとんどのユーザーが12〜18か月以内にiOS 13にアップグレードすることを期待できます(リリース日以降)。たぶん85-90%?(現時点では、AppleはiOS 12を使用していない人の15%がまだいると言っています)SwiftUIアプリをすぐに展開することができず、多くのユーザーを疎外するリスクがあるとは言えません。

また、残りの10〜15%によっては、多くのユーザー(および$$)がテーブルに残ったことを意味する場合があります。

iPadもサポートしている場合は、人々がiPadを頻繁にアップグレードしないため、より注意が必要です。多くのiPad 2と、第3世代および第4世代のiPadがまだ一般に出回っていて、10.3.3しかなく、もうアップグレードできません。新しいiPadが完璧に機能する場合、人々は立ち上がって新しいiPadに400ドルから1,000ドルを支払うつもりはありません。

常にiOS 13とは何の関係もない、アプリを更新して改善するバグを修正する余地とニーズがあります。つまり、以前は知らなかったバグを見つけて、多くのユーザーを不満にしています。 。最新のiOSバージョンではありません。また、多くの開発ショップがサポートしている企業/企業の顧客についてさえ話していません。その領域のさまざまな理由により、iOSの更新に対する多くの反発があります。

ですから、iOS 13とSwiftUI(本当に素晴らしいので絶対にすべきです)に興奮する前に、シリコンバレー以外の現実の世界に戻ると、平均的な消費者が期待するものと完全に一致するわけではなく、サポートする必要があります。古いデバイスを使用する必要があります。疎外される人が多すぎるためです。


1
「サポートされていない」iPhoneを使用している人はたくさんいるので、最新のiOSリリースで100%に到達することは決してありません。私の現在の電話が亡くなったとき、次の電話について長い間懸命に考えていることを知っています
Gavin

@cspamあなたの仮定は多分正しいですが、彼らは質問に答えません。
user1892364

それは私たちがiOSの13に同じ採用率を期待することができるかどうか言うのは難しいですので、iOSの12は、デバイスの10%以上のサポートをドロップしませんでした
キャスパーザンドベルゲン

SwiftUIは、古いデバイスをサポートする必要があり、疎外される人が多すぎるため、サポートする必要があります。thumb
Trevor

9

Appleのドキュメントによると、残念ながらiOS 13以降でしか利用できません。

https://developer.apple.com/documentation/swiftui/


リンクされたドキュメントによると、iOS 13 SDK(Xcode 11など)を使用する必要があるということです。...最小のデバイスのiOSのバージョンはiOSの13にする必要があり、サポート...あなただけの罰金古いiOSのバージョンをサポートできることを意味しないこと
うろこ状の


6

iOS 13以降でのみ機能します

あなたはまだSwiftUI使用してコードを添付することができます

@available(iOS 13.0, *)

Xcode 11より前のXcodeをまだ使用していて、SwiftUIコードがある場合は、

#if canImport(SwiftUI)
...
#endif

これにより、Xcode 11未満のXcodeでコンパイルするときの問題を修正できます


4

誰もが言ったように、それは古いiOSバージョンとの後方互換性はありません。しかし、Appleは常に最新のiOSの高いインストールベースを持っていること、およびiOS 13にはiPhone 6S以降、iPad Air 2以降、新しいiPad mini 4およびiPhone SEが必要であることを考えると、大多数のユーザーはiOS 13をインストールして素敵なSwiftUIアプリを楽しむことができます。


3
私のiPadはiOS 13を削減しません。それでもまだ強力で、しばらくの間(私は願っています)交換されることを考えると、私が楽しむ/必要とするアプリが古いデバイスを流し込まないことを期待しています。
Gavin

3

私の前のすべての人が言ったように、iOS 13以降が必要になることは明らかです。しかし、私は新しいiOS開発者として、UIKitと比較してSwiftUIをどの程度採用すべきかについて心配していました。私はすでにUIKitを使用していくつかの小さなプロジェクトを構築しており、それを使ってどこかに進んでいます。

しかし、SwiftUIが始まったとき、それらをどのように組み合わせるかについて説明しました。次のリンクの記事は、すべてを文脈に置いています:https : //www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

私の唯一の懸念は、Xcode 11では、XcodeプロジェクトではStoryboardsとSwiftUIの両方を組み合わせることができないことに気付いたことです。


3

残念ながら、SwiftUIはiOS 13以降でのみ使用できます。iOS 13フレームワークで導入されました。iOS 13より前は、すべてがObj-Cフレームワーク(Swiftを含む)を使用して構築されていました。

開発ドキュメントの右側に、iOS、macOS、tvOS、watchOSなどのサポートされているバージョンが表示されます。

https://developer.apple.com/documentation/swiftui/

お役に立てれば!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.