เปิดตัว Swift SDK สำหรับ Android
(swift.org)- ขณะที่ภาษา Swift เติบโตเต็มที่และขยายไปสู่ คลาวด์, Windows, เบราว์เซอร์, ไมโครคอนโทรลเลอร์ ตอนนี้ก็ได้มีการเปิดตัว Swift SDK สำหรับ Android แล้ว
- SDK นี้เป็นผลลัพธ์จากความพยายามตลอดหลายเดือนของ Swift Android Workgroup ซึ่งช่วยให้นักพัฒนาสามารถสร้าง แอปเนทีฟ Android ด้วย Swift ได้
- SDK นี้ รวมอยู่ในตัวติดตั้งสำหรับ Windows หรือสามารถ ดาวน์โหลดแยกสำหรับ Linux และ macOS ได้ พร้อมโค้ดตัวอย่างและคู่มือการใช้งาน
- ผ่านโครงการ swift-java ทำให้รองรับ การทำงานร่วมกันแบบสองทิศทาง ระหว่าง Swift และ Java พร้อมการสร้าง binding อัตโนมัติเพื่อคงทั้งประสิทธิภาพและความปลอดภัย
- การเปิดตัวครั้งนี้ถูกมองว่าเป็นจุดเปลี่ยนที่เร่งการขยาย ระบบนิเวศข้ามแพลตฟอร์ม ของ Swift และเปิดความเป็นไปได้ใหม่ให้กับการพัฒนาแอปมือถือ
ภาพรวมของ Swift SDK for Android
- จากที่ภาษา Swift ได้ขยายตัวตลอด 10 ปีที่ผ่านมา ตั้งแต่ บริการคลาวด์ไปจนถึง Windows, เบราว์เซอร์, ไมโครคอนโทรลเลอร์ ตอนนี้การรุกเข้าสู่แพลตฟอร์ม Android ก็ได้รับการประกาศอย่างเป็นทางการแล้ว
- ด้วยความสามารถด้าน interoperability ของ Swift จึงทำให้การแชร์โค้ดข้ามหลายแพลตฟอร์มทำได้ง่าย
- Android workgroup เป็นกลุ่มเปิดที่ทุกคนสามารถเข้าร่วมได้ โดยมีเป้าหมายเพื่อขยาย Swift ไปสู่ Android
- การประกาศครั้งนี้หมายถึงการเผยแพร่ nightly (preview) build ของ Swift SDK for Android ซึ่งเป็นผลลัพธ์จากความร่วมมือของชุมชนมาอย่างยาวนาน
ความสามารถหลักของ SDK และรูปแบบการแจกจ่าย
- ตอนนี้นักพัฒนาสามารถใช้ Swift เพื่อพัฒนา แอปพลิเคชันเนทีฟบน Android ได้โดยตรง
- สิ่งนี้เปิดโอกาสใหม่สำหรับ การพัฒนาข้ามแพลตฟอร์ม
- SDK นี้ถูก บันเดิลมากับตัวติดตั้ง Windows และสามารถ ดาวน์โหลดแยกสำหรับ Linux และ macOS ได้
- Swift.org ให้คำแนะนำวิธีตั้งค่าโค้ด Swift บนอุปกรณ์ Android ผ่านคู่มือ “Getting Started”
- รีโพซิทอรี Swift for Android Examples บน GitHub สาธิต เวิร์กโฟลว์แอปแบบ end-to-end
ความเข้ากันได้ของแพ็กเกจและการขยายตัวของชุมชน
- ผ่าน Swift SDK ทำให้สามารถ พอร์ตแพ็กเกจ Swift เดิมไปยัง Android ได้
- แพ็กเกจมากกว่า 25% ใน Swift Package Index รองรับการบิลด์บน Android แล้ว
- หน้า Community Showcase จะแสดงว่าเข้ากันได้กับ Android หรือไม่
- การขยายตัวนี้นำไปสู่การเสริมความแข็งแกร่งด้าน การรองรับหลายแพลตฟอร์ม ของระบบนิเวศ Swift
โครงการ swift-java และการทำงานร่วมกัน
- โครงการ swift-java เป็นทั้ง ไลบรารีและตัวสร้างโค้ด ที่มอบ interoperability ระหว่าง Swift และ Java
- ระบบจะจัดการ การผสานรวมแบบสองทิศทาง ระหว่าง Swift และ Java โดยอัตโนมัติ พร้อมสร้าง binding ที่ปลอดภัยและประสิทธิภาพสูง
- นักพัฒนาสามารถใช้สิ่งนี้เพื่อ ย้าย business logic ไปยัง Android ได้ และดูรายละเอียดเพิ่มเติมได้จากวิดีโอบรรยายของ Swift Server Side Meetup
การมีส่วนร่วมของชุมชนและโรดแมปในอนาคต
- พรีวิวรีลีสครั้งนี้ได้เปิดโอกาสใหม่สำหรับ การปรับปรุงเครื่องมือและการขยายระบบนิเวศ
- มีการแนะนำให้แบ่งปันประสบการณ์ ไอเดีย เครื่องมือ และแอปต่าง ๆ ใน หมวด Android ของ Swift Forums
- ขณะนี้ประกาศดังกล่าวกำลังถูกพูดคุยกันอยู่ใน เธรดทางการ ของฟอรัมด้วย
- ขณะนี้ Android workgroup กำลังจัดทำ vision document เพื่อเสนอ พื้นที่ลำดับความสำคัญและทิศทางในอนาคต ของ Swift on Android
- สามารถติดตามความคืบหน้าหลักผ่าน project board และมีการดูแลคุณภาพ SDK ด้วย ระบบ CI อย่างเป็นทางการ
- ทีม Swift สนับสนุนให้ชุมชนเข้ามามีส่วนร่วม โดยมีเป้าหมายเพื่อ เสริมความแข็งแกร่งให้กับสถานะของ Swift ในระบบนิเวศ Android
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
คำถามสำคัญของทุก cross-platform framework คือจะจัดการ UI อย่างไร
ถ้าใช้ดีไซน์ซิสเต็มที่ให้ความรู้สึกแปลกแยกจากแต่ละแพลตฟอร์มแบบ Adobe Flex Builder สุดท้ายก็ต้องมาทำ อารมณ์แบบ native เองอยู่ดี
Flutter พยายามจำลอง ธีม Cupertino ของ iOS ให้สมบูรณ์แบบ ส่วน React Native ใช้วิดเจ็ตพื้นฐานของแพลตฟอร์ม จึงทำให้องค์ประกอบอย่างการเลื่อนดูเป็นธรรมชาติ
น่าเสียดายที่บทความบล็อกไม่ได้พูดถึงประเด็นสำคัญนี้
ต่อให้ Apple ออก Swift สำหรับ Android ก็มีโอกาสที่จะยังดูแปลกบน Android เพราะปรัชญาการออกแบบเฉพาะตัวของ Apple
ดูเหมือนว่าทิศทางในอนาคตจะขึ้นอยู่กับว่าโปรเจกต์นี้ Apple เป็นผู้ขับเคลื่อนเองโดยตรง หรือเป็นความพยายามแบบ โอเพนซอร์สที่ขับเคลื่อนโดยคอมมูนิตี้
นั่นจึงเป็นเหตุผลที่ฉันชอบ KMP เพราะบน iOS ใช้ SwiftUI เขียน UI ได้ ส่วนบน Android ใช้ Kotlin และแชร์เฉพาะ business logic
ถ้าพยายามแชร์ UI มักจะกลายเป็นฝันร้ายแบบ “เขียนครั้งเดียว ดีบักทุกที่”
Swift for Android ก็ดูเหมือนจะทำให้ แชร์ logic ระดับภาษา ในลักษณะนี้ได้
แม้แต่ในตัวอย่างก็ยังใช้ Jetpack Compose ตามเดิม แล้วเรียกใช้ logic ที่เขียนด้วย Swift
มันยังคงโครงสร้างแบบเดียวกับ memory model แบบ reference counting ของ Swift จึงมีความสอดคล้องสูง
ในฐานะคนที่ดูแลเครื่องมือสำหรับนักพัฒนาที่ Apple ฉันหวังว่าเทคโนโลยีนี้จะเป็นจุดตั้งต้นของนวัตกรรมใหม่
เดิมที SwiftUI ไม่ใช่ “Native UI” โดยตรง แต่เป็น ภาษาประกาศเชิง declarative ที่ระบบตีความแล้วสร้าง UIView หรือ NSView ขึ้นมา
ถ้าไม่ทำการจำลองขึ้นมาเองแบบ Flutter ก็เป็นไปไม่ได้ที่จะใช้ Apple UI บน Android แบบเดิมทุกประการ
แต่โปรเจกต์อย่าง Skip.tools จะช่วย bridge SwiftUI ไปยัง Jetpack Compose
ดูตัวอย่างได้ใน แอป Skip Showcase
ฉันเป็นสมาชิกทั้งของผลิตภัณฑ์ Skip และ Swift Android Workgroup และมีส่วนร่วมเป็น release manager ของ SDK ครั้งนี้
ดีใจมากที่มีการประกาศเป็นโปรเจกต์ทางการ
เคยใช้ทั้ง RN และ Flutter แต่ปัญหาคือขาด ความเป็น native อยู่เสมอ
แม้จะมี KMP แต่โดยมากนักพัฒนามักเริ่มจาก iOS แล้วค่อยขยายไป Android
ถ้าแชร์โค้ดด้วย Swift Package ได้ กระบวนการนี้จะเป็นธรรมชาติมากขึ้นมาก
ในทางกลับกัน นักพัฒนา Swift/Objective-C มีจำนวนน้อยกว่ามาก
นอกสหรัฐฯ ส่วนแบ่งตลาด iPhone ต่ำกว่า ทำให้บริษัทต่าง ๆ มักคิดในเชิง Windows หรือเบราว์เซอร์เป็นศูนย์กลาง
KMP ถูกใช้แล้วในแอประดับใหญ่อย่าง Google Workspace และด้วยการลงทุนจาก Kotlin และ JetBrains ทำให้มี ความสุกงอม สูง
ส่วน Flutter มีรอบการออกเวอร์ชันเร็วเกินไปจนตามไม่ทัน
ใช้ JavaScriptCore หรือ QuickJS ก็รันได้ทั้งบน iOS, Android และ Web พร้อมทั้งรองรับ hot reload
แต่ด้วยนโยบายของ App Store การเปลี่ยนฟีเจอร์ใหญ่ทำได้ยาก จึงเหมาะกับการแก้บั๊กมากกว่า
ในความเป็นจริงที่รอบการปล่อยแอปบนมือถือช้า แนวทางนี้ถือเป็นโอกาสใหญ่
รูปแบบ shared core library + โปรเจกต์ Native UI ของแต่ละแพลตฟอร์มทำงานได้ดี
ฉันสงสัยว่าเกี่ยวข้องกับโปรเจกต์ที่ใช้ SKIP transpiler ที่เห็นใน บล็อก Skip.tools หรือเปล่า
อยากย้ายแอป SwiftUI ไป Android แต่ก็อยากเลี่ยง RN
Skip มีสองโหมด: โหมด Lite ที่แปลงโค้ด Swift เป็น Kotlin และ โหมด Fuse ที่คอมไพล์ Swift ให้ทำงานบน Android โดยตรง
สามารถใช้ทั้งสองโหมดร่วมกันเพื่อเชื่อมเข้ากับ ecosystem ของ Kotlin ได้ เช่น Lottie และ Firebase
ดูรายละเอียดเปรียบเทียบเพิ่มเติมได้ที่ Skip Docs
ดีใจที่มี SDK ทางการออกมา เพราะต่อจากนี้จะได้ใช้เวอร์ชันทางการแทนการ build เอง
หวังว่าจะไม่จบลงแค่เป็น proof of concept แบบง่าย ๆ เหมือน Swift Embedded
Swift เป็นภาษาที่สวยงามในเชิงภาษา แต่ก็มีบรรยากาศความไม่มั่นใจอยู่บ้างเกี่ยวกับภาวะผู้นำของคอมมูนิตี้
ไม่อยากเห็น RN กับ Flutter อีกแล้ว
เบื่อ UI ที่ดูแข็งทื่อ และการตอบสนองต่อการแตะที่ช้า
ถ้าตอบสนองช้า อาจเป็นปัญหาจากการ implement ของแอปเองมากกว่า
Apple อาจ หมดความสนใจ ไปอย่างรวดเร็วก็ได้
“You got Kotlin in my iOS.”
“You got Swift in my Android.” — เป็นคำเปรียบเปรยที่มีไหวพริบ
ดู ภาพรวม Kotlin Native
การประกาศครั้งนี้ดูเหมือนเป็นการพิสูจน์ความสำเร็จของ ระบบ Swift SDK แบบใหม่
ในอดีตการรองรับแพลตฟอร์มอื่นยุ่งยากเพราะพัวพันกับ CMake แต่ตอนนี้ถ้าทำตามกฎของ SDK ก็พอร์ตไปแพลตฟอร์มไหนก็ได้
นอกจาก Android แล้วยังมีแผนขยายไป Linux, wasm, embedded และเร็ว ๆ นี้ Windows
การทำงานร่วมกับ JVM ยังไม่สมบูรณ์ แต่เห็นได้ชัดว่า ความเป็นอิสระจากแพลตฟอร์ม เพิ่มขึ้นมาก
ฉันชอบ Kotlin Multiplatform แต่ Swift for Android ก็น่าสนใจ
การแชร์ Swift native library สำหรับงานที่ไวต่อหน่วยความจำน่าจะมีประโยชน์
แต่ถ้าจะย้าย business logic ทั้งหมดไป Swift ตอนนี้ KMP ยังดูสุกงอมกว่า
เรื่องแชร์ business logic นั้นเป็นปัญหาที่แก้ได้มานานแล้ว
ความเจ็บปวดจริงคือการต้อง เขียน UI ซ้ำสองครั้ง
ต้องการ common UI framework ที่ไม่อึดอัดแบบ React Native
ถ้าใช้ร่วมกับ Expo ประสบการณ์พัฒนาก็ดีขึ้นมาก
ฉันแชร์โค้ดระหว่าง Android กับ iOS มานานแล้ว แต่การ แชร์ UI คือฝันร้าย
เดิมทีแชร์เฉพาะ logic ที่ซับซ้อนด้วย C/C++/Rust สุดท้ายเลยมีภาษาถึงสามภาษา
KMP และ Swift for Android ทำให้แชร์กันได้ด้วย Kotlin/Swift เท่านั้น จึงสะอาดตากว่ามาก
แนวทางแบบนี้ สมจริงและมีประสิทธิภาพ กว่าเฟรมเวิร์กที่พยายามบังคับแชร์ UI มาก