SwiftUI เข้ากันได้กับ iOS 12.x และเก่ากว่าหรือไม่


124

หากฉันมีแอปที่สร้างด้วย SwiftUI จะใช้งานได้กับ iOS ที่ต่ำกว่า iOS 13 หรือไม่


1
ทำไมคุณไม่ลองดูล่ะ? Xcode 11 เบต้าสามารถใช้ได้สำหรับการดาวน์โหลดและการสอนอยู่ที่นี่developer.apple.com/tutorials/swiftui
Martin R

1
มีใครรู้บ้างว่าทำไมคำตอบของฉันจึงถูกลบโดย @ Jean-François Fabre
CrazyPro007

10
ไม่ SwiftUI จะไม่ทำงานกับ iOS 12.x และเก่ากว่า
ystack

คำตอบ:


90

ฉันเพิ่งตรวจสอบใน Xcode 11 และสามารถยืนยันได้ว่าจะไม่เข้ากันได้แบบย้อนหลังดังที่เห็นได้จากViewการใช้งาน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
อย่างน้อยอีก 5 ปี? คุณใช้เฉพาะ API ที่มีใน iOS 7 และต่ำกว่าในขณะนี้หรือไม่
David Monagle

5
สิ่งที่แปลกที่สุดคือคุณสามารถสร้างแอปพลิเคชัน SwiftUI ด้วย xcode 11 บน Mojave (10.4) ซึ่งจะทำงานบน Catalina (10.5) เท่านั้น
Túlio Calazans

34

ฉันไม่คิดอย่างนั้นเพราะไลบรารีทั้งหมดมีคำอธิบายประกอบสำหรับ iOS 13 ขึ้นไปแล้ว

นอกจากนี้ในเอกสาร Apple ยังระบุเวอร์ชันที่รองรับไว้อย่างชัดเจน:

  • iOS13.0 + เบต้า
  • macOS10.15 + เบต้า
  • tvOS 13.0+ เบต้า
  • watchOS 6.0+ เบต้า

ใส่คำอธิบายภาพที่นี่


32

SwiftUIและCombineใช้Opaque-Return-typesใน Swift 5.1 และเนื่องจาก Opaque-Return-types (ควบคู่ไปกับคุณสมบัติอื่น ๆ ) ถูกนำไปใช้ใน Swift 5.1 และเนื่องจากลักษณะของการนำไปใช้งานจึงไม่สามารถนำกลับมาใช้กับSwift 5.0 ได้ (ไม่เหมือนกับDSLหรือProperty-Wrappers ) และเนื่องจาก iOS 13 เป็น iOS SDK รุ่นแรกสุดที่มีรันไทม์Swift 5.1ในระบบปฏิบัติการดังนั้นคำตอบสำหรับคำถามคือไม่และSwiftUIและCombineไม่สามารถใช้บน iOS เวอร์ชันก่อนหน้าได้

ยกเว้นในกรณีที่ Apple มีวิธีการรวมSwift 5.1รันไทม์ (หรือรุ่นในอนาคต) กับแอปพลิเคชันเช่นเดียวกับที่เคยทำกับ Swift เวอร์ชันก่อนหน้า แต่เนื่องจากจะเพิ่มขนาดแอปและเพิ่มค่าโสหุ้ยให้กับระบบทั้งหมดอีกครั้งฉันสงสัยว่านี่จะ เคยเกิดขึ้น

มันอาจจะเข้ากันได้

สวิฟท์ 5.1 จะยังไม่ออกและSwiftUIใช้คุณสมบัติเช่นประเภทผลตอบแทนทึบแสง , DSL , propertyDelegate (แนะนำใน WWDC เป็นpropertyWrapper ) และอื่น ๆ ซึ่งจะสามารถใช้ได้เฉพาะในสวิฟท์ 5.1 เนื่องจาก Swift 5 มีความเสถียรแบบไบนารีฉันเดาว่ามันเป็นไปไม่ได้ที่จะใช้เฟรมเวิร์กที่ฝังไว้ภายใน Xcode11 ดังนั้นพวกเขาจึงนำคุณสมบัติเหล่านี้กลับมาใช้ในคอร์ของ Cocoa และทำเครื่องหมายเป็น iOS13 + ที่พร้อมใช้งานจนกว่า Swift 5.1 จะออก

สมมติฐานของฉันขึ้นอยู่กับข้อเท็จจริงที่ว่าOrder Collection DiffingและDSLจะพร้อมใช้งานใน Swift 5.1 และไม่มีความสัมพันธ์กับ Xcode หรือระบบนิเวศของ Apple แต่ยังถูกระบุว่าเป็น@available(iOS13,...)ไฟล์. ซึ่งหมายความว่าพวกเขาต้องทำเครื่องหมายทุกอย่างโดยใช้คุณสมบัติ Swift 5.1 พร้อมกับคุณสมบัติความพร้อมใช้งานของ iOS บางส่วนจะถูกลบออกเมื่อ Swift 5.1 ได้รับการเผยแพร่ แต่เราไม่สามารถแน่ใจได้SwiftUIและCombineเว้นแต่ 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 เวอร์ชันเก่า


เป็นไปได้ที่จะใช้ SwiftUI บน iOS 13 ในขณะที่รองรับเป้าหมายการปรับใช้ที่ต่ำกว่า โปรดตรวจสอบstackoverflow.com/a/58372597/840742
Renatus

13

หากคุณกำลังถ่ายทำเพื่อรองรับ iPhone ไม่ใช่ iPad คุณอาจคาดหวังว่าผู้ใช้ส่วนใหญ่จะอัปเกรดเป็น iOS 13 ภายใน 12-18 เดือน (เริ่มจากวันที่วางจำหน่าย) อาจจะ 85-90%? (ฉันคิดว่า Apple กล่าวว่า ณ จุดนี้ยังมีคน 15% ที่ไม่ได้ใช้ iOS 12) ยังคงเป็นเวลาพอสมควรแม้ว่าคุณจะไม่สามารถปรับใช้แอป SwiftUI ได้ในทันทีหรืออาจเสี่ยงที่จะทำให้ผู้ใช้จำนวนมากแปลกแยก

ขึ้นอยู่กับว่าอีก 10-15% คืออะไรนั่นอาจหมายถึงผู้ใช้จำนวนมาก (และ $$) สำหรับคุณที่เหลืออยู่บนโต๊ะ

หากคุณรองรับ iPad เช่นกันมันจะยุ่งยากกว่าเพราะผู้คนไม่ได้อัปเกรด iPad บ่อยเท่า มี iPad 2s จำนวนมากพร้อมกับ iPad รุ่นที่ 3 และ 4 ที่ยังคงอยู่ในป่าซึ่งมีเพียง 10.3.3 และไม่สามารถอัปเกรดได้อีกต่อไป ผู้คนจะไม่ลุกขึ้นและจ่ายเงินระหว่าง $ 400 - $ 1,000 สำหรับ iPad ใหม่เมื่อพวกเขาทำงานได้ดีอย่างสมบูรณ์

มีที่ว่างและความจำเป็นในการอัปเดตแอปอยู่เสมอทำให้ดีขึ้นแก้ไขข้อบกพร่องที่ไม่จำเป็นต้องเกี่ยวข้องกับ iOS 13 นั่นคือการค้นหาจุดบกพร่องที่คุณไม่รู้มาก่อนซึ่งทำให้ผู้ใช้จำนวนมากไม่พอใจ . ไม่ใช่ iOS เวอร์ชันล่าสุด และเรายังไม่ได้พูดถึงลูกค้าระดับองค์กร / องค์กรที่ร้านค้า dev จำนวนมากรองรับ มีข้อผิดพลาดเพิ่มเติมเกี่ยวกับการอัปเดต iOS ด้วยเหตุผลหลายประการในพื้นที่นั้น

ดังนั้นก่อนที่คุณจะตื่นเต้นกับ iOS 13 และ SwiftUI (ซึ่งคุณควรอย่างยิ่งเพราะมันยอดเยี่ยม) กลับมาในโลกแห่งความเป็นจริงนอก Silicon Valley นั่นจะไม่สอดคล้องกับสิ่งที่ผู้บริโภคทั่วไปคาดหวังและคุณจะต้องสนับสนุน อุปกรณ์รุ่นเก่าและจำเป็นต้องมีเพราะมีคนจำนวนมากเกินไปที่คุณจะแปลกแยก


1
ฉันรู้จักผู้คนจำนวนมากที่ใช้ iPhone ที่ "ไม่รองรับ" ดังนั้นคุณจะไม่มีทางถึง 100% สำหรับ iOS รุ่นล่าสุด ฉันรู้ว่าฉันจะต้องคิดมากและหนักหน่วงเกี่ยวกับโทรศัพท์เครื่องถัดไปเมื่อเครื่องปัจจุบันของฉันเสียชีวิต
Gavin

@cspam แม้ว่าสมมติฐานของคุณอาจจะถูก แต่ก็ไม่ตอบคำถาม
user1892364

iOS 12 ไม่ได้ลดการรองรับอุปกรณ์เกิน 10% ดังนั้นจึงยากที่จะบอกว่าเราสามารถคาดหวังอัตราการใช้งานที่เท่ากันสำหรับ iOS 13 ได้หรือไม่
Casper Zandbergen

SwiftUIจะต้องรองรับอุปกรณ์รุ่นเก่าและจำเป็นเพราะมีคนจำนวนมากเกินไปที่คุณจะแปลกแยก! thumb
Trevor

9

จากเอกสารของ Apple มีให้บริการตั้งแต่ iOS 13 เท่านั้น

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


เอกสารที่เชื่อมโยงทั้งหมดกล่าวคือคุณต้องใช้ iOS 13 SDK (เช่น Xcode 11) นั่นไม่ได้หมายความว่าอุปกรณ์ iOS เวอร์ชันต่ำสุดที่รองรับจะต้องเป็น iOS 13 ... คุณสามารถรองรับ iOS เวอร์ชันเก่าได้ดี ...
เกล็ด

9

เข้ากันได้กับ iOS 13+ นี่คือลิงค์ไปยังเอกสารประกอบ

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


แม้แต่ Xcode 10 ก็ไม่รองรับ คุณต้องใช้ Xcode 11 ซึ่งเป็นรุ่นเบต้า ณ วันที่ (3 มิ.ย. 2019) https://developer.apple.com/tutorials/swiftui/creating-and-combining-views


6

ใช้งานได้กับ ios 13 หรือใหม่กว่าเท่านั้น

คุณยังสามารถแนบSwiftUIรหัสของคุณได้โดยใช้

@available(iOS 13.0, *)

หากคุณยังคงใช้ Xcode ด้านล่าง Xcode 11 และมีรหัส SwiftUI คุณสามารถห่อด้วยไฟล์

#if canImport(SwiftUI)
...
#endif

วิธีนี้สามารถแก้ไขปัญหาได้เมื่อคอมไพล์ด้วย Xcode ด้านล่าง Xcode 11


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 คนใหม่ฉันรู้สึกกังวลว่าควรใช้ SwiftUI ในระดับใดเมื่อเทียบกับ UIKit ฉันได้สร้างโครงการเล็ก ๆ กับ 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)

ทางด้านขวาของเอกสาร dev จะแสดง iOS, macOS, tvOS, watchOS และเวอร์ชันที่รองรับ

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

หวังว่านี่จะช่วยได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.