หากฉันมีแอปที่สร้างด้วย SwiftUI จะใช้งานได้กับ iOS ที่ต่ำกว่า iOS 13 หรือไม่
หากฉันมีแอปที่สร้างด้วย SwiftUI จะใช้งานได้กับ iOS ที่ต่ำกว่า iOS 13 หรือไม่
คำตอบ:
ฉันเพิ่งตรวจสอบใน 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 }
}
ฉันไม่คิดอย่างนั้นเพราะไลบรารีทั้งหมดมีคำอธิบายประกอบสำหรับ iOS 13 ขึ้นไปแล้ว
นอกจากนี้ในเอกสาร Apple ยังระบุเวอร์ชันที่รองรับไว้อย่างชัดเจน:
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 จำเป็นต้องชี้แจงจริงๆ
ไม่SwiftUIต้องการเป้าหมายการปรับใช้ iOS 13 หรือใหม่กว่า, macOS 10.15 ขึ้นไป, tvOS 13 ขึ้นไปหรือ watchOS 6 หรือใหม่กว่า เฟรมเวิร์กประกอบด้วยประเภทใหม่ ๆ มากมายที่ไม่มีใน OS เวอร์ชันเก่า
หากคุณกำลังถ่ายทำเพื่อรองรับ 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 นั่นจะไม่สอดคล้องกับสิ่งที่ผู้บริโภคทั่วไปคาดหวังและคุณจะต้องสนับสนุน อุปกรณ์รุ่นเก่าและจำเป็นต้องมีเพราะมีคนจำนวนมากเกินไปที่คุณจะแปลกแยก
จากเอกสารของ Apple มีให้บริการตั้งแต่ iOS 13 เท่านั้น
เข้ากันได้กับ iOS 13+ นี่คือลิงค์ไปยังเอกสารประกอบ
https://developer.apple.com/documentation/swiftui/
แม้แต่ Xcode 10 ก็ไม่รองรับ คุณต้องใช้ Xcode 11 ซึ่งเป็นรุ่นเบต้า ณ วันที่ (3 มิ.ย. 2019) https://developer.apple.com/tutorials/swiftui/creating-and-combining-views
ใช้งานได้กับ ios 13 หรือใหม่กว่าเท่านั้น
คุณยังสามารถแนบSwiftUI
รหัสของคุณได้โดยใช้
@available(iOS 13.0, *)
หากคุณยังคงใช้ Xcode ด้านล่าง Xcode 11 และมีรหัส SwiftUI คุณสามารถห่อด้วยไฟล์
#if canImport(SwiftUI)
...
#endif
วิธีนี้สามารถแก้ไขปัญหาได้เมื่อคอมไพล์ด้วย Xcode ด้านล่าง Xcode 11
อย่างที่ทุกคนพูดไปมันจะไม่สามารถใช้งานร่วมกับ iOS เวอร์ชันเก่าได้ แต่เนื่องจาก Apple มีฐานการติดตั้ง iOS ล่าสุดสูงอย่างต่อเนื่องและเนื่องจาก iOS 13 ต้องใช้ iPhone 6S หรือใหม่กว่า, iPad Air 2 หรือใหม่กว่า, iPad mini 4 และ iPhone SE ใหม่ ผู้ใช้ส่วนใหญ่จะสามารถติดตั้ง iOS 13 และเพลิดเพลินกับแอพ SwiftUI ที่น่ารัก
อย่างที่ทุกคนก่อนหน้าฉันพูดถึงมันชัดเจนมากว่าจะต้องใช้ 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 ได้
น่าเสียดายที่ไม่อนุญาตให้ใช้ SwiftUI ใน iOS 13 ขึ้นไปเท่านั้น ได้รับการแนะนำในกรอบงาน iOS 13 ก่อน iOS 13 ทุกอย่างถูกสร้างขึ้นโดยใช้เฟรมเวิร์ก Obj-C (รวมถึง Swift)
ทางด้านขวาของเอกสาร dev จะแสดง iOS, macOS, tvOS, watchOS และเวอร์ชันที่รองรับ
https://developer.apple.com/documentation/swiftui/
หวังว่านี่จะช่วยได้!