10 điểm bởi GN⁺ 2025-10-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • Khi ngôn ngữ Swift đã trưởng thành và mở rộng từ đám mây, Windows, trình duyệt, vi điều khiển đến nhiều môi trường khác, nay Swift SDK cho Android đã được công bố
  • SDK này là kết quả của nhiều tháng nỗ lực từ Swift Android workgroup, cho phép nhà phát triển xây dựng ứng dụng native Android bằng Swift
  • SDK được tích hợp trong trình cài đặt Windows hoặc có thể tải riêng cho Linux và macOS, đồng thời đi kèm mã ví dụ và hướng dẫn
  • Thông qua dự án swift-java, SDK hỗ trợ khả năng tương tác hai chiều giữa Swift và Java, tạo binding tự động để đảm bảo hiệu năng và độ an toàn
  • Lần công bố này được đánh giá là bước ngoặt mở ra những khả năng mới cho phát triển di động, đồng thời thúc đẩy mở rộng hệ sinh thái đa nền tảng của Swift

Tổng quan về Swift SDK for Android

  • Trong bối cảnh ngôn ngữ Swift trong 10 năm qua đã mở rộng từ dịch vụ đám mây đến Windows, trình duyệt, vi điều khiển, việc tiến vào nền tảng Android nay đã được chính thức hóa
    • Nhờ khả năng tương tác (interoperability) của Swift, việc chia sẻ mã giữa nhiều nền tảng trở nên dễ dàng
  • Android workgroup là một nhóm mở mà bất kỳ ai cũng có thể tham gia, với mục tiêu mở rộng Swift sang Android
  • Thông báo lần này mang ý nghĩa công bố bản nightly (preview) của Swift SDK for Android, là thành quả từ quá trình cộng tác lâu dài của cộng đồng

Các tính năng chính và cách phân phối SDK

  • Giờ đây, nhà phát triển có thể dùng Swift để trực tiếp xây dựng ứng dụng native Android
    • Từ đó mở ra những khả năng mới cho phát triển đa nền tảng
    Quảng cáo
  • SDK được đóng gói kèm trình cài đặt Windows và cũng có thể tải riêng cho Linux và macOS
  • Swift.org hướng dẫn cách thiết lập mã Swift trên thiết bị Android thông qua tài liệu "Getting Started"
    • Kho lưu trữ Swift for Android Examples trên GitHub trình diễn quy trình ứng dụng end-to-end

Khả năng tương thích gói và mở rộng cộng đồng

  • Với Swift SDK, có thể port các gói Swift hiện có sang Android
    • Hơn 25% số gói trên Swift Package Index đã hỗ trợ build cho Android
    • Trang Community Showcase hiển thị trạng thái tương thích với Android
  • Sự mở rộng này tiếp tục củng cố hỗ trợ đa nền tảng của hệ sinh thái Swift

Dự án swift-java và khả năng tương tác

  • Dự án swift-javathư viện và trình tạo mã cung cấp khả năng tương tác (interoperability) giữa Swift và Java
    • Nó tự động xử lý tích hợp hai chiều giữa Swift và Java, đồng thời tạo ra binding an toàn và hiệu năng cao
    Quảng cáo
  • Nhờ đó, nhà phát triển có thể chuyển logic nghiệp vụ sang Android, và có thể xem thêm nội dung liên quan trong video thuyết trình của Swift Server Side Meetup

Sự tham gia của cộng đồng và lộ trình sắp tới

  • Bản phát hành preview lần này đã mở ra những cơ hội mới để cải thiện công cụ và mở rộng hệ sinh thái
    • Cộng đồng được khuyến khích chia sẻ trải nghiệm, ý tưởng, công cụ và ứng dụng trong chuyên mục Android trên diễn đàn Swift
    • Thông báo này cũng đang được thảo luận trong chuỗi thảo luận chính thức trên diễn đàn
  • Android workgroup hiện đang soạn thảo tài liệu tầm nhìn (vision document), dự kiến sẽ đưa ra các lĩnh vực ưu tiên và định hướng tương lai cho Swift on Android
    • Có thể theo dõi tiến độ chính qua project board, trong khi chất lượng SDK được quản lý bằng hệ thống CI chính thức
  • Nhóm Swift đang thúc đẩy sự tham gia của cộng đồng, với mục tiêu củng cố vị thế của Swift trong hệ sinh thái Android

1 bình luận

 
GN⁺ 2025-10-25
Ý kiến trên Hacker News
  • Câu hỏi cốt lõi của mọi framework đa nền tảng là xử lý UI như thế nào
    Nếu dùng một hệ thống thiết kế tạo cảm giác lạc quẻ trên từng nền tảng như Flex Builder của Adobe, thì cuối cùng vẫn phải tự hiện thực cảm giác native
    Flutter cố tái hiện hoàn hảo theme Cupertino của iOS, còn React Native tận dụng widget mặc định của nền tảng để các yếu tố như cuộn có cảm giác tự nhiên
    Tiếc là bài blog không nhắc tới phần quan trọng này
    Dù Apple có phát hành Swift cho Android, triết lý thiết kế đặc trưng của Apple có thể vẫn khiến nó trở nên lạc điệu trên Android
    Có vẻ hướng đi sau này sẽ phụ thuộc vào việc dự án này do Apple trực tiếp dẫn dắt, hay là một nỗ lực mã nguồn mở lấy cộng đồng làm trung tâm

    • Tôi thích các framework cho phép viết UI native hơn là chia sẻ UI
      Vì vậy tôi thích KMP. Trên iOS có thể viết UI bằng SwiftUI, trên Android bằng Kotlin, còn chỉ chia sẻ business logic
      Nếu cố chia sẻ UI thì sẽ dẫn tới cơn ác mộng “viết một lần, debug ở mọi nơi”
      Swift for Android có vẻ cũng sẽ cho phép chia sẻ logic ở cấp độ ngôn ngữ theo cách này
    • Swift SDK for Android không ép buộc cách làm UI
      Ngay cả trong ví dụ cũng vẫn dùng Jetpack Compose rồi gọi logic Swift
      Nó giữ cùng một cấu trúc với mô hình bộ nhớ đếm tham chiếu của Swift nên có tính nhất quán cao
      Từ góc nhìn của người phụ trách công cụ dành cho nhà phát triển ở Apple, tôi hy vọng công nghệ này sẽ trở thành bàn đạp cho những đổi mới mới
    • Giống như trường hợp Browser Company port SwiftUI sang Windows, có khả năng trên Android SwiftUI sẽ được ánh xạ sang Jetpack Compose
      SwiftUI vốn không phải “UI native” theo nghĩa gốc, mà là một ngôn ngữ khai báo được hệ thống diễn giải để tạo ra UIView hoặc NSView
    • Bản phát hành lần này không có nội dung nào về việc port SwiftUI hay UIKit sang Android
      Trừ khi tự sao chép trực tiếp như Flutter, còn không thì không thể dùng nguyên xi UI của Apple trên Android
    • Swift SDK không chỉ định công nghệ UI
      Thay vào đó, các dự án như Skip.tools sẽ bridge SwiftUI sang Jetpack Compose
      Có thể xem ví dụ trong ứng dụng Skip Showcase
      Tôi là thành viên của sản phẩm Skip và Swift Android Workgroup, và đã tham gia với vai trò release manager cho lần phát hành SDK này
  • Thật sự rất vui vì nó được công bố như một dự án chính thức
    Tôi từng dùng RN và Flutter nhưng vấn đề luôn là thiếu cảm giác native
    Dĩ nhiên cũng có KMP, nhưng phần lớn nhà phát triển bắt đầu từ iOS rồi mới mở rộng sang Android
    Nếu có thể chia sẻ code bằng Swift Package thì luồng này sẽ tự nhiên hơn rất nhiều

    • Số lượng nhà phát triển Android nhiều hơn hẳn, và việc phân phối cũng đơn giản hơn
      Trong khi đó nhà phát triển Swift/Objective-C ít hơn nhiều
      Ở ngoài nước Mỹ, thị phần iPhone thấp hơn nên các công ty có xu hướng nghĩ theo hướng Windows hoặc trình duyệt là trung tâm
    • Cách nói “bắt đầu từ iOS” nghe khá là góc nhìn lấy Mỹ làm trung tâm
      KMP đã được dùng trong những ứng dụng lớn như Google Workspace, và nhờ Kotlin cùng khoản đầu tư của JetBrains mà độ trưởng thành của nó rất cao
      Flutter thì chu kỳ phát hành quá nhanh nên khó theo kịp
    • Business logic dựa trên JavaScript cũng không thể xem nhẹ
      Với JavaScriptCore hoặc QuickJS, nó có thể chạy trên iOS, Android và Web, đồng thời hỗ trợ hot reload
      Tuy vậy do chính sách app store, khó mà thay đổi tính năng lớn, nên hợp hơn với mức sửa lỗi
      Trong thực tế chu kỳ phát hành mobile chậm chạp, tôi nghĩ cách tiếp cận này là một cơ hội lớn
    • Ở Proton, họ chia sẻ hơn 80% logic bằng Rust, phần còn lại được hiện thực theo từng nền tảng
    • Thực ra kiểu cấu trúc này đã làm được từ lâu với .NET và MvvmCross
      Mô hình thư viện lõi dùng chung + project UI native cho từng nền tảng hoạt động rất ổn
  • Tôi từng thắc mắc liệu đây có phải là dự án liên quan đến SKIP transpiler mà tôi đã thấy trên blog của Skip.tools hay không
    Tôi muốn đưa một ứng dụng SwiftUI sang Android nhưng muốn tránh RN

    • Đúng vậy, Skip đã dùng bản preview của Swift SDK hơn một năm, và với chế độ Fuse có thể build ứng dụng SwiftUI native hoàn chỉnh lên Android
      Skip có hai chế độ: chế độ Lite chuyển mã Swift thành Kotlin, và chế độ Fuse biên dịch trực tiếp Swift cho Android
      Có thể dùng cả hai chế độ cùng nhau để tích hợp với hệ sinh thái Kotlin như Lottie, Firebase, v.v.
      So sánh chi tiết có thể xem trong Skip Docs
      Thật vui vì giờ đã có SDK chính thức nên có thể dùng bản chính thức thay vì tự build nữa
    • Skip là một trong những bên đóng góp chính cho nỗ lực lần này
    • Giờ đây có thể chạy Swift native mà không cần transpiler nữa, và tính tương thích cũng tốt hơn rất nhiều
  • Hy vọng nó không kết thúc chỉ như một mức chứng minh khái niệm đơn giản kiểu Swift Embedded
    Swift là một ngôn ngữ đẹp về mặt ngôn ngữ học, nhưng có cảm giác bất an quanh vai trò lãnh đạo cộng đồng

    • guard let self = self else { return } — đây là một câu đùa quen thuộc với các lập trình viên Swift
  • Tôi giờ không muốn thấy RN và Flutter nữa
    Đã quá mệt với UI vuông vức và phản hồi chạm chậm chạp

    • Ngay trong Flutter cũng có thể chỉnh bán kính bo góc, và hiệu năng cũng nhanh
      Việc phản hồi chậm có nhiều khả năng là do cách app được hiện thực
    • Tôi cũng không thích RN và Flutter lắm, nhưng không có gì đảm bảo Swift on Android sẽ tốt hơn họ
      Apple có thể sớm mất hứng thú với nó
  • “You got Kotlin in my iOS.”
    “You got Swift in my Android.” — một cách nói dí dỏm

    • Đây là một phép so sánh hoàn hảo. Biết đâu rồi sẽ xuất hiện một dạng lai trộn giữa Kotlin và Swift đúng kiểu quảng cáo Reese’s
    • Kotlin on iOS được biên dịch tĩnh và có thể tương tác native với Swift/ObjC
      Xem tổng quan về Kotlin Native
  • Thông báo lần này có vẻ là bằng chứng thành công của hệ thống Swift SDK mới
    Trước đây việc hỗ trợ nền tảng khác rất phức tạp vì vướng vào CMake, nhưng giờ chỉ cần tuân theo quy tắc SDK là có thể port sang bất kỳ nền tảng nào
    Ngoài Android còn dự kiến mở rộng sang Linux, wasm, embedded, và sắp tới là Windows
    Khả năng tương tác với JVM vẫn chưa hoàn chỉnh, nhưng rõ ràng tính độc lập nền tảng đã tăng lên

  • Tôi thích Kotlin Multiplatform, nhưng Swift for Android cũng rất thú vị
    Việc chia sẻ thư viện Swift native cho các tác vụ nhạy cảm về bộ nhớ có vẻ sẽ hữu ích
    Tuy vậy, nếu chuyển toàn bộ business logic sang Swift thì KMP hiện vẫn trưởng thành hơn

    • Không biết bạn đã từng làm app desktop bằng KMP chưa, tôi khá tò mò về độ trưởng thành tổng thể của nó
  • Việc chia sẻ business logic thực ra đã là bài toán được giải quyết từ lâu
    Nỗi đau thực sự là phải viết UI hai lần
    Cần một framework UI dùng chung mà không bất tiện như React Native

    • React Native gần đây đã tốt lên khá nhiều khi chuyển sang New Architecture
      Nếu dùng cùng Expo thì trải nghiệm phát triển được cải thiện đáng kể
  • Tôi đã chia sẻ code giữa Android và iOS trong thời gian dài, nhưng chia sẻ UI là cơn ác mộng
    Tôi chỉ chia sẻ logic phức tạp bằng C/C++/Rust, thành ra cuối cùng phải dùng tới ba ngôn ngữ
    KMP và Swift for Android cho phép chỉ chia sẻ bằng Kotlin/Swift nên gọn gàng hơn nhiều
    Cách tiếp cận này thực tế và hiệu quả hơn rất nhiều so với những framework cố ép chia sẻ UI