SwiftUI có tương thích ngược với iOS 12.x trở lên không?


123

Nếu tôi có một ứng dụng được tạo bằng SwiftUI, thì ứng dụng đó có hoạt động với iOS dưới iOS 13 không?


1
Tại sao bạn không thử nó? Xcode 11 beta có sẵn để tải xuống và các hướng dẫn ở đây developer.apple.com/tutorials/swiftui .
Martin R

1
Folks Có ai biết rằng tại sao câu trả lời của tôi bị xóa bởi @ Jean-François Fabre
CrazyPro007

10
KHÔNG, SwiftUI sẽ không hoạt động với iOS 12.x trở lên.
ystack

Câu trả lời:


89

Tôi vừa kiểm tra nó trong Xcode 11 và có thể xác nhận rằng nó sẽ không tương thích ngược, như có thể thấy trong Viewtriển khai SwiftUI :

/// 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
Ít nhất 5 năm nữa? Vì vậy, bạn chỉ sử dụng API có sẵn trong iOS 7 trở xuống vào lúc này?
David Monagle

5
Điều kỳ lạ nhất là bạn có thể làm cho một ứng dụng SwiftUI với xcode 11 trên Mojave (10.4) rằng sẽ chỉ chạy trên Catalina (10.5)
Tulio Calazans

34

Tôi không nghĩ vậy, bởi vì tất cả các thư viện đều đã được chú thích cho iOS 13 trở lên.

Ngoài ra, trong tài liệu , Apple đề cập rõ ràng các phiên bản được hỗ trợ:

  • iOS13.0 + beta
  • macOS10.15 + beta
  • tvOS 13.0+ beta
  • watchOS 6.0+ beta

nhập mô tả hình ảnh ở đây


32

SwiftUIkết hợp sử dụng Các kiểu trả lại đục trong Swift 5.1 và vì Kiểu mờ-trả lại (cùng với các tính năng khác) được triển khai trong Swift 5.1 và do bản chất của việc triển khai, chúng không thể được triển khai trở lại Swift 5.0 (không giống như DSL hoặc Thuộc tính-Wrappers ) và bởi vì iOS 13 là iOS SDK sớm nhất có chứa thời gian chạy Swift 5.1 trong hệ điều hành, vì vậy câu trả lời cho câu hỏi là không và SwiftUI and Combine không thể được sử dụng trên các phiên bản iOS trước đó.

Trừ khi, Apple cung cấp một cách để gộp thời gian chạy Swift 5.1 (hoặc các bản phát hành trong tương lai) với ứng dụng như cách nó đã từng làm với các phiên bản Swift trước đó, nhưng vì nó sẽ tăng kích thước ứng dụng và thêm chi phí cho toàn bộ hệ thống, tôi nghi ngờ điều này sẽ bao giờ xảy ra.

thể tương thích ngược

Swift 5.1 vẫn chưa được phát hành và SwiftUIsử dụng các tính năng như kiểu trả về không rõ ràng , DSL , propertyDelegate (được giới thiệu trong WWDC với tên propertyWrapper ), v.v., sẽ chỉ có trong Swift 5.1. Vì Swift 5 là ổn định nhị phân, tôi đoán không thể sử dụng các khung công tác nhanh được nhúng bên trong Xcode11, do đó họ đã triển khai lại các tính năng này trong lõi của Cocoa và đánh dấu chúng là iOS13 + có sẵn cho đến khi Swift 5.1 được phát hành.

Các giả định của tôi dựa trên thực tế là, Phân biệt Bộ sưu tập Có Thứ tựDSL sẽ có sẵn trong Swift 5.1 và không có mối tương quan nào với Xcode hoặc hệ sinh thái của Apple, nhưng chúng cũng được đánh dấu là @available(iOS13,...). Điều này có nghĩa là họ phải đánh dấu mọi thứ bằng cách sử dụng các tính năng của Swift 5.1 với thuộc tính tính khả dụng của iOS. Một số trong số chúng sẽ bị xóa sau khi Swift 5.1 được phát hành, nhưng chúng tôi không thể chắc chắn về điều đó SwiftUICombinetrừ khi Apple nói khác. Điều này cũng được đề cập trong đề xuất của DSL :

Thực hiện: PR . Lưu ý rằng việc triển khai trong bản xem trước dành cho nhà phát triển Xcode sử dụng một chuyển đổi đơn giản hơn một chút so với cách được mô tả ở đây. PR được liên kết phản ánh việc triển khai trong bản xem trước nhưng đang được phát triển tích cực để phù hợp với đề xuất này.

Vì vậy, giới hạn không tương thích ngược có thể được dỡ bỏ khi Swift 5.1 được phát hành, nhưng nó thực sự cần được nhóm Apple làm rõ .


1
Bất kỳ cập nhật về điều này? PR mà bạn đề cập đã được hợp nhất, Swift 5.1 được phát hành
dùng158

@ user158 Tôi vừa cập nhật câu trả lời và mô tả lý do tại sao không thể hỗ trợ tính năng này.
farzadshbfn

15

Số SwiftUI đòi hỏi một mục tiêu triển khai của iOS 13 hoặc mới hơn, hệ điều hành MacOS 10.15 hay muộn, tvOS 13 trở lên hoặc watchos 6 hoặc mới hơn. Khung chứa nhiều kiểu mới không tồn tại trên các phiên bản HĐH cũ hơn.


Có thể sử dụng SwiftUI trên iOS 13 trong khi hỗ trợ mục tiêu triển khai thấp hơn. Vui lòng kiểm tra stackoverflow.com/a/58372597/840742
Renatus

13

Nếu bạn muốn hỗ trợ iPhone chứ không phải iPad, bạn có thể mong đợi hầu hết người dùng sẽ nâng cấp lên iOS 13 trong vòng 12-18 tháng (bắt đầu từ ngày phát hành). Có thể là 85-90%? (Tôi nghĩ rằng Apple cho biết tại thời điểm này vẫn còn 15% người dùng chưa sử dụng iOS 12) Tuy nhiên, vẫn còn khá lâu khi bạn sẽ không thể triển khai ứng dụng SwiftUI ngay lập tức nếu không có nguy cơ bị nhiều người dùng xa lánh.

Ngoài ra, tùy thuộc vào 10-15% còn lại, điều đó có thể có nghĩa là rất nhiều người dùng (và $$) cho bạn còn lại trên bảng.

Nếu bạn cũng đang hỗ trợ iPad thì khó khăn hơn vì mọi người không nâng cấp iPad của họ thường xuyên. Có rất nhiều iPad 2 cùng với iPad thế hệ thứ 3 và thứ 4 vẫn còn trong tự nhiên, chỉ có 10.3.3 và không thể nâng cấp nữa. Mọi người sẽ không đứng dậy và trả từ 400 - 1.000 USD cho một chiếc iPad mới khi iPad của chúng hoạt động hoàn toàn tốt.

Luôn có chỗ và nhu cầu cập nhật ứng dụng, làm cho ứng dụng trở nên tốt hơn, sửa lỗi, điều đó không nhất thiết phải liên quan đến iOS 13. . không có trên phiên bản iOS mới nhất. và chúng tôi thậm chí chưa nói về khách hàng doanh nghiệp / công ty mà rất nhiều cửa hàng nhà phát triển hỗ trợ. có rất nhiều phản hồi về các bản cập nhật iOS vì nhiều lý do khác nhau trong lĩnh vực đó.

Vì vậy, trước khi bạn cảm thấy hào hứng với iOS 13 và SwiftUI (điều bạn hoàn toàn nên làm vì nó tuyệt vời), hãy quay lại thế giới thực, bên ngoài Thung lũng Silicon, điều đó sẽ không hoàn toàn phù hợp với những gì người tiêu dùng bình thường mong đợi và bạn sẽ cần hỗ trợ thiết bị cũ hơn và cần phải như vậy vì có quá nhiều người mà bạn sẽ xa lánh.


1
Tôi biết một số người sử dụng iPhone "không được hỗ trợ", vì vậy bạn sẽ không bao giờ đạt được 100% cho bản phát hành iOS mới nhất. Tôi biết mình sẽ suy nghĩ rất lâu về chiếc điện thoại tiếp theo của mình khi chiếc điện thoại hiện tại của tôi qua đời
Gavin

@cspam Mặc dù các giả định của bạn có thể đúng nhưng chúng không trả lời được câu hỏi.
user1892364

iOS 12 đã không ngừng hỗ trợ cho hơn 10% của các thiết bị như vậy thật khó để nói nếu chúng ta có thể mong đợi các tỷ lệ áp dụng tương tự cho iOS 13.
Casper Zandbergen

SwiftUI sẽ cần phải hỗ trợ các thiết bị cũ hơn và cần phải như vậy vì có quá nhiều người mà bạn sẽ xa lánh! ngón tay cái
Trevor

9

Rất tiếc, dựa trên tài liệu của Apple, nó chỉ có sẵn bắt đầu từ iOS 13.

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


Tất cả các tài liệu được liên kết đó nói rằng bạn cần sử dụng iOS 13 SDK (tức là Xcode 11). Điều đó không có nghĩa là phiên bản iOS được hỗ trợ tối thiểu của thiết bị phải là iOS 13 ... bạn có thể hỗ trợ các phiên bản iOS cũ hơn ...
scaly


6

chỉ hoạt động cho ios 13 trở lên

bạn vẫn có thể đính kèm SwiftUImã của mình bằng cách sử dụng

@available(iOS 13.0, *)

nếu bạn vẫn sử dụng Xcode bên dưới Xcode 11 và có mã SwiftUI, bạn có thể bọc nó bằng

#if canImport(SwiftUI)
...
#endif

Điều này có thể khắc phục sự cố khi biên dịch với Xcode bên dưới Xcode 11


4

Như mọi người đã nói, nó sẽ không tương thích ngược với các phiên bản iOS cũ hơn. Nhưng do Apple luôn có cơ sở cài đặt cao cho iOS mới nhất của họ và cũng cho rằng iOS 13 yêu cầu iPhone 6S trở lên, iPad Air 2 trở lên, iPad mini 4 mới và iPhone SE. Đại đa số người dùng sẽ có thể cài đặt iOS 13 và tận hưởng các ứng dụng SwiftUI đáng yêu.


3
IPad của tôi không thực hiện được sự cắt giảm cho iOS 13, và nó vẫn đang hoạt động mạnh mẽ và tôi sẽ được thay thế trong một thời gian (tôi hy vọng) ở đây hy vọng rằng các ứng dụng tôi thích / cần không loại bỏ các thiết bị cũ hơn.
Gavin

3

Như tất cả những người trước đây tôi đã đề cập, rất rõ ràng rằng nó sẽ yêu cầu iOS 13 trở lên. Nhưng với tư cách là một nhà phát triển iOS mới, tôi lo lắng không biết mình nên áp dụng SwiftUI ở mức độ nào so với UIKit. Tôi đã xây dựng một số dự án nhỏ với UIKit và đã đi đến một nơi nào đó nâng cao với nó.

Nhưng khi SwiftUI bắt đầu, làm thế nào để kết hợp giữa chúng. Bài viết trong liên kết sau đặt tất cả trong ngữ cảnh: https://www.hackingwithswift.com/quick-start/swiftui/ans tower- the-big-question-should-you-learn-swiftui-uikit-or-both

Mối quan tâm duy nhất của tôi bây giờ là tôi nhận thấy với Xcode 11 rằng một dự án Xcode không thể kết hợp cả Storyboards và SwiftUI.


3

Đáng tiếc là không, SwiftUI chỉ được phép trong iOS 13 trở lên. Nó đã được giới thiệu trong khuôn khổ iOS 13. Trước iOS 13, mọi thứ đều được xây dựng bằng khung Obj-C (Bao gồm cả Swift).

Ở phía bên phải của tài liệu dành cho nhà phát triển, nó hiển thị các phiên bản được hỗ trợ của iOS, macOS, tvOS, watchOS, v.v.

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

Hi vọng điêu nay co ich!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.