Vậy đã gần một tháng kể từ WWDC 2019 diễn ra năm nay. Tất cả developer vẫn bận rộn với những gì Apple mới thêm hoặc cập nhật cho phát triển. Có những thông báo lớn và nhỏ, nhưng chúng ta, các nhà phát triển, cần chắc chắn không bỏ lỡ điều gì quan trọng. Vì vậy tôi tạo checklist nhanh các mục không được bỏ qua. Hãy làm ngắn gọn, súc tích và đơn giản.
iOS:
- iOS 13 cho phép giới hạn truy cập vị trí ứng dụng chỉ một lần. Cho đến nay, có ba tùy chọn — "Luôn luôn" (Always), "Khi sử dụng" (While Using) hoặc "Không bao giờ" (Never). Thêm một tùy chọn "Chỉ lần này" (Just Once). Lần đầu tiên, bạn có thể chia sẻ vị trí cho app — chỉ một lần — rồi yêu cầu nó hỏi lại lần sau khi muốn.
- Có thể là thông báo phổ biến nhất và mọi người điên đảo. Có, tôi nói về "Đăng nhập bằng Apple" (Apple Sign-in). Yêu cầu của Apple là nhà phát triển app phải triển khai giải pháp đăng nhập đơn (single sign-in) mới của công ty nếu app đã cung cấp đăng nhập bên thứ ba khác.
- Bạn có thể loại bỏ (dismiss) modal view controller tương tác (interactively) có thể phá vỡ một số app hiện có. Trên iOS 13, mặc định người dùng chỉ vuốt modal xuống để dismiss. Vì vậy khi phát triển app mới hãy chắc chắn xem xét điều này. Có thể tắt hành vi này bằng
isModalRepresentation = false. UISegmentedControlvàUIStepperkhác biệt trong iOS 13 với thiết kế hoàn toàn mới.- Cập nhật mới cho
Localizationtrong iOS 13. Từ giờ, người dùng có thể đặt ngôn ngữ khác nhau cho từng ứng dụng cài trên thiết bị. Developer không cần thay đổi hoặc cân nhắc gì về phát triển, appSettingssẽ lo thay bạn. - iOS 13 có gần 1500 system icon khác nhau và
UIImagecó initializer mớiUIImage(systemName:)để khởi tạo bất kỳ system icon nào. - Cho đến nay khi tải东西 trong Safari trực tiếp vào thư mục
downloads, nhưng năm nay Safari cập nhật và bạn có thể đổi thư mục tải mặc định sang thư mục khác, thậm chí chọn USB drive. - Cải tiến
UIStoryboardSegue. Apple giới thiệu modifierIBSegueActionmới. Bây giờ bạn có thể truyền context và tham số thêm trực tiếp đến destination view controller cần khởi tạo. - App có thể cung cấp thông tin đặt chỗ cho Siri với ngữ cảnh và thời điểm cụ thể để người dùng thực hiện hành động liên quan. Ví dụ: xác nhận đặt khách sạn, nhắc check-in chuyến bay, giúp trả xe thuê.
- Với framework Core NFC, app giờ hỗ trợ ghi thẻ (tag writing), bao gồm ghi vào thẻ định dạng NDEF. Framework cũng hỗ trợ đọc/ghi thẻ dùng native protocol như ISO 7816, MIFARE, ISO 15693, FeliCa.
- Đồng bộ Core Data store với CloudKit, cho người dùng app truy cập liền mạch dữ liệu trên mọi thiết bị. Core Data với CloudKit kết hợp lợi ích persistence cục bộ với backup và phân phối đám mây.
- Metal cho GPU kiểm soát lớn hơn pipeline đồ họa và tính toán, thêm tính năng làm xử lý GPU nâng cao dễ dàng hơn, đơn giản hóa công việc hỗ trợ các loại GPU khác. Công cụ mới, bao gồm Metal support trong Simulator, giúp bắt đầu nhanh và hiểu app iOS dùng Metal đúng cách.
- Với framework VisionKit mới, app cho người dùng quét tài liệu dùng camera thiết bị, như trong app Notes. Kết hợp với nhận dạng văn bản Vision để trích xuất text từ tài liệu quét.
- Core ML 3 hỗ trợ cá nhân hóa model trên thiết bị (on-device model personalization), cho phép cập nhật model bằng cách retraining hoặc fine-tuning với dữ liệu người dùng riêng tư từ trong app. Core ML cũng mở rộng hỗ trợ dynamic neural networks với hơn 100 loại layer.
- Framework PencilKit mới làm cho việc kết hợp nội dung vẽ tay vào app dễ dàng và nhanh chóng. PencilKit cung cấp môi trường vẽ cho app iOS nhận input từ Apple Pencil hoặc ngón tay, biến thành hình ảnh chất lượng cao hiển thị trên iOS hoặc macOS. Môi trường có công cụ tạo, xóa, chọn nét.
- MetricKit là framework mới cung cấp metric hiệu năng và năng lượng trên thiết bị về app do hệ thống ghi nhận, dùng để cải thiện hiệu năng app.
- Framework Core Haptics mới cho phép compose và play haptic pattern để tùy chỉnh haptic feedback của app.
- Dùng framework Apple CryptoKit mới thực hiện các thao tác mật mã học phổ biến an toàn và hiệu quả: tính toán và so sánh digest an toàn mật mã, dùng public-key cryptography tạo và đánh giá chữ ký số, tạo khóa đối xứng, dùng trong xác thực thông điệp và mã hóa.
- Combine là framework mới cung cấp Swift API khai báo (declarative) xử lý giá trị theo thời gian. Giá trị này đại diện cho sự kiện UI, phản hồi mạng, sự kiện lên lịch, và nhiều dữ liệu bất đồng bộ khác. Với Combine, khai báo publishers expose giá trị thay đổi và subscribers nhận giá trị từ publishers. Combine làm code dễ đọc, dễ maintain, tập trung code xử lý sự kiện và loại bỏ kỹ thuật rắc rối như nested closures và convention-based callbacks.
- Giữ nội dung app cập nhật và chạy tác vụ dài khi app ở background dùng framework BackgroundTasks mới.
- RealityKit là framework Swift mới mô phỏng và render nội dung 3D cho app AR bao gồm animation, physics, spatial audio. RealityKit tận dụng thông tin ARKit để tích hợp vật thể ảo vào thế giới thực liền mạch.
- Symbol images cung cấp bộ icon nhất quán cho app, đảm bảo icon thích ứng với kích thước khác nhau và nội dung app. Symbol images dùng SVG để implement vector shape scale không mất độ nét. Cũng hỗ trợ nhiều trait thường gắn với text như weight và baseline alignment.
- Với iOS 13, người dùng tạo và quản lý nhiều instance UI của app cùng lúc và chuyển đổi qua app switcher. Trên iPad, cũng hiển thị nhiều instance app side-by-side. Mỗi instance UI hiển thị nội dung khác hoặc cách hiển thị khác. Ví dụ: app Calendar hiển thị lịch hẹn ngày cụ thể và cả tháng side-by-side.
- SwiftUI là cách tiếp cận hiện đại xây dựng UI cho iOS, macOS, watchOS, tvOS. Xây dựng giao diện động nhanh hơn bao giờ hết, dùng lập trình khai báo (declarative), composition-based. Framework cung cấp view, control, layout structure khai báo UI app. Cũng cung cấp event handler xử lý tap, gesture, input khác, và công cụ quản lý luồng data từ model xuống view/control người dùng thấy và tương tác.
- Khi Voice Control Accessibility bật, có icon microphone xanh ở trên thiết bị chỉ iOS đang ở Voice Control mode. Icon mờ khi điện thoại không chú ý bạn.
- Tính năng mới iOS 13: tùy chọn trong app Files kết nối server dùng SMB. Tính năng không hoạt động beta 1 nhưng chạy beta 2, nên user iOS 13 có thể kết nối home NAS.
- Khi chia sẻ trang web từ Safari Share Sheet, có tùy chọn mới chia sẻ dạng PDF hoặc Web Archive. Cũng có tùy chọn "Tự động" (Automatic) chọn format phù hợp cho mỗi app/hành động.
- Không còn spam call. iOS 13 hỗ trợ strict silencing unknown callers (im lặng hoàn toàn người gọi lạ).
- Trong iOS 13, phương thức mới trên
UIImageAssettênregisterImage:withTraitCollectiondùng tạo dynamic image cho light/dark theo code. - Dữ liệu di động thấp? Chế độ "Low Data" mới tránh hết data khi roaming.
- Khi không có wifi đôi khi khó tải app dung lượng lớn. Sau iOS 13, thấy ánh sáng: giới hạn tăng 200 MB, vẫn chưa đủ? Có thể bỏ giới hạn trong Settings.
- Chia sẻ ảnh với thông tin gốc. iOS 13 cho tùy chọn thêm thông tin gốc khi chia sẻ.
- Hãy vui vì mute iPhone. Apple giới thiệu indicator mute thiết kế lại hoàn toàn khớp indicator sạc Apple Pencil.
- Bây giờ khởi tạo UIViewController subclass với context và arguments thêm (yêu cầu cho dependency injection).
- Nếu không fan của delegate thì tin tốt: iOS 13 cập nhật một số API dựa trên delegate sang block-based API.
- Không cần long press app rồi tap dấu xóa. Giờ chỉ vuốt trái trên trang cập nhật AppStore để xóa app.
- Cho đến nay screenshot chỉ định dạng ảnh. iOS 13 cho phép screenshot dạng PDF.
- iOS 13 có API private mới
_visualRecursiveDescriptionxây dựng biểu diễn trực quan view hierarchy. Lệnh hữu ích debug trong LLDB. - Class
UICollectionViewCompositionalLayoutmới thêm vào UIKit dễ tạo compositional layout không cần customUICollectionViewLayout. - Enum
UITableViewStylecó case public mớiUITableViewStyleInsetGroupedtạo grouped style table view. - App iOS dùng File Management API giờ được cấp quyền read/write toàn bộ folder, không chỉ file đơn lẻ.
- Chán vuốt scroll view? iOS 13 cho kéo scroll indicator duyệt tài liệu dài.
- App dành cho trẻ em không được có quảng cáo/analytics bên thứ ba và không truyền dữ liệu cho bên thứ ba.
- MDM truy cập dữ liệu nhạy cảm, app MDM phải yêu cầu capability mobile device management, chỉ cung cấp bởi doanh nghiệp thương mại (tổ chức kinh doanh, giáo dục, chính phủ), và trường hợp hạn chế công ty dùng MDM cho parental controls. App MDM không được bán, dùng, tiết lộ dữ liệu cho bên thứ ba bất kỳ mục đích, phải cam kết trong privacy policy. (ám chỉ app lạm dụng MDM cho tính năng kiểu Screen Time).
À, danh sách khá dài đầy tính năng mới. Developer dùng tất cả để làm app tốt hơn, mượt hơn. Bây giờ xem các framework mới kèm iOS 13:
Frameworks:
- BackgroundTasks: Dùng BackgroundTasks framework giữ nội dung app cập nhật và chạy tác vụ mất phút khi app background. Tác vụ dài hơn có thể yêu cầu thiết bị có nguồn và kết nối mạng. Đăng ký launch handler cho tác vụ khi app launch và lên lịch khi cần. Hệ thống launch app background và thực thi tác vụ.
- Combine: Combine framework cung cấp Swift API khai báo xử lý giá trị theo thời gian. Giá trị đại diện sự kiện UI, phản hồi mạng, sự kiện lên lịch, dữ liệu async khác. Combine khai báo publishers expose giá trị thay đổi theo thời gian, và subscribers nhận giá trị từ publishers.
- CoreAudioTypes: CoreAudioTypes framework khai báo kiểu dữ liệu chung và hằng số dùng bởi Core Audio interfaces khác. Framework cũng có vài hàm tiện ích.
- Core Haptics: Core Haptics thêm haptic và audio feedback tùy chỉnh cho app. Dùng haptic gắn kết user vật lý, feedback xúc giác và âm thanh thu hút sự chú ý và củng cố hành động. Một số element hệ thống — picker, switch, slider — tự cung cấp haptic feedback khi user tương tác. Với Core Haptics, mở rộng chức năng bằng compose và combine haptic vượt pattern mặc định.
- QuickLookThumbnailing: Có thể muốn tạo biểu diễn thu nhỏ (thumbnail) file và nội dung hiển thị trong app, hoặc cung cấp thumbnail cho OS. Ví dụ: macOS hiển thị thumbnail trong Finder và Quick Look. QuickLookThumbnailing framework cung cấp API tạo thumbnail cho file type phổ biến dùng
QLThumbnailGenerator. - PencilKit: PencilKit dễ dàng kết hợp nội dung vẽ tay vào app iOS/macOS nhanh. Cung cấp môi trường vẽ nhận input Apple Pencil hoặc ngón tay, biến thành hình ảnh chất lượng cao hiển thị iOS/macOS. Môi trường có công cụ tạo, xóa, chọn nét.
- RealityKit: Dùng RealityKit framework triển khai mô phỏng và render 3D hiệu năng cao. RealityKit tận dụng thông tin ARKit tích hợp vật thể ảo vào thế giới thực liền mạch.
- VisionKit: VisionKit framework nhỏ cho app dùng scanner tài liệu hệ thống. Hiện document camera như view controller, bao phủ toàn màn hình như camera trong Notes.
- SoundAnalysis: Dùng SoundAnalysis framework phân tích audio nhận dạng loại cụ thể như tiếng cười hay vỗ tay. Framework phân tích dùng Core ML model trained bởi
MLSoundClassifier. Khả năng phân tích audio stream hoặc file thêm nhận dạng audio thông minh cho app. - CryptoKit: Dùng Apple CryptoKit thực hiện thao tác mật mã phổ biến: tính toán và so sánh digest an toàn mật mã. Dùng public-key cryptography tạo và đánh giá chữ ký số, key exchange. Ngoài làm việc với key trong bộ nhớ, cũng dùng private key lưu trong Secure Enclave. Tạo khóa đối xứng, dùng trong xác thực thông điệp và mã hóa. Ưu tiên CryptoKit hơn interface thấp hơn. CryptoKit giải phóng app khỏi quản lý raw pointer, tự xử lý task làm app an toàn hơn như ghi đè dữ liệu nhạy cảm khi giải phóng bộ nhớ.
- Maps Web Snapshots: Dịch vụ Maps Web Snapshots tạo static map image từ URL. Dùng Snapshots bất cứ khi interactive map không cần, và nơi thường dùng image URL — trang web, email client nơi JavaScript không khả dụng.
- DriverKit: Dùng DriverKit tạo device driver user cài trên Mac. Driver built với DriverKit chạy userspace, không phải kernel extension, cải thiện bảo mật và ổn định hệ thống.
- MetricKit: Với MetricKit, nhận metric hiệu năng và năng lượng on-device do hệ thống ghi nhận. App đăng ký nhận báo cáo chứa dữ liệu 24h trước tối đa một lần/ngày. Dùng dữ liệu báo cáo cải thiện hiệu năng app.
- SystemExtensions: Tạo system extensions cho app nâng cao khả năng Mac user, không rủi ro kernel extensions (KEXTs). System extensions chạy userspace, không làm rủi ro bảo mật/ổn định macOS. Hệ thống cấp quyền cao cho extensions, thực hiện task trước đây dành cho KEXTs.
- EndpointSecurity: Dùng Endpoint Security library tạo phần mềm liên quan bảo mật. Client Endpoint Security monitor system event hoạt động độc hại tiềm ẩn. Client đăng ký với Endpoint Security authorize pending event, hoặc nhận thông báo event đã xảy ra. Event bao gồm thực thi process, mount file system, fork process, raise signal.
- USBSerialDriverKit: USBSerialDriverKit framework cung cấp API phát triển driver serial communication cho USB device như modem và serial adapter. Framework xây trên DriverKit thêm khả năng set attribute như baud rate, parity và làm việc với UART (universal asynchronous receiver/transmitter) của device.
- USBDriverKit: Dùng USBDriverKit framework phát triển driver cho USB device custom hoặc non-class compliant cho macOS. USBDriverKit cung cấp C++ class attach và cấu hình device, tạo USB message và stream pipe trao đổi data. USBDriverKit device làm việc với core types trong DriverKit framework.
- HIDDriverKit: HIDDriverKit framework cung cấp C++ class phát triển driver human interface device: bàn phím, thiết bị trỏ, digitizer như bút và touchpad. HIDDriverKit dùng core types DriverKit, thêm tính năng đặc thù human interface device development.
Đó là tất cả hôm nay. Happy coding!!
???Cảm ơn bạn đã đọc???