Bỏ qua việc biên dịch lại hơn 70 gói iOS trong mỗi lần build
Các nhà phát triển React Native thường gặp một vấn đề chung. Mỗi lần clean build iOS, toàn bộ cây phụ thuộc (dependency tree) của bạn đều bị biên dịch lại. Bạn phải chờ React Native core, các module Expo và các thư viện bên thứ ba được xây dựng lại mỗi lần như vậy.
Expo SDK 56 giải quyết vấn đề này. Nó cung cấp các module Expo dưới dạng các XCFrameworks đã được biên dịch trước. Ứng dụng của bạn sẽ liên kết trực tiếp với các tệp nhị phân (binaries) này. Bạn không còn phải biên dịch chúng từ mã nguồn nữa.
Thay đổi này giúp các bản clean build nhanh hơn. Nó cũng chuyển đổi hệ sinh thái từ CocoaPods sang Swift Package Manager. Đây là hệ thống quản lý phụ thuộc hiện đại của Apple.
Lợi ích dành cho bạn:
- Ít bước biên dịch hơn
- Phát triển local nhanh hơn
- Build EAS nhanh hơn
- Môi trường build dễ dự đoán hơn
Bạn không cần phải di chuyển (migrate). Điều này hoạt động tự động trong các ứng dụng hiện có của bạn.
XCFrameworks là gì? Đây là định dạng của Apple dành cho các thư viện native đã được biên dịch trước. Thay vì biên dịch mã nguồn trên máy của bạn, bạn sẽ sử dụng các tệp nhị phân đã được xây dựng sẵn cho các thiết bị iOS và trình giả lập (simulators).
Hiệu suất cải thiện trên Apple M4 Max: • React Native core đã build sẵn: giảm ~44% thời gian build. • Expo modules đã build sẵn: giảm ~50% so với mã nguồn. • Thư viện bên thứ ba đã build sẵn: giảm ~65% so với mã nguồn.
Các dự án lớn sẽ thấy được lợi ích lớn nhất. Khi ứng dụng của bạn lớn dần, thời gian build native thường tăng lên. Điều này gây ảnh hưởng đến tốc độ CI và EAS Build của bạn. Các XCFrameworks đã biên dịch trước sẽ đẩy công việc lên sớm hơn trong pipeline. Chúng tôi biên dịch các framework một lần và tái sử dụng chúng.
Sự chuyển đổi này là một bước thay đổi hạ tầng lớn. Chúng tôi đã phải giải quyết nhiều rào cản kỹ thuật:
- Tái cấu trúc (Refactoring) các giao diện công khai để cô lập các phụ thuộc.
- Khắc phục các phụ thuộc vòng (cyclic dependencies) giữa Objective-C và Swift.
- Tạo các cấu trúc mã nguồn tạm thời để đáp ứng các quy tắc của Swift Package Manager.
- Sử dụng Clang Virtual File System overlays để hỗ trợ các bố cục header cũ (legacy header layouts).
SDK 56 tập trung vào sự đồng tồn tại. Bạn vẫn có thể sử dụng CocoaPods. Nếu bạn cần tắt các module đã biên dịch trước, hãy sử dụng cài đặt này: EXPO_USE_PRECOMPILED_MODULES=0
Bước đi này đưa Expo đến gần hơn với hệ sinh thái phát triển hiện đại của Apple. Điều này đồng nghĩa với việc build nhanh hơn và kiến trúc sạch hơn cho tương lai.
Nguồn: https://dev.to/expo/skip-recompiling-70-ios-packages-on-every-build-27a6
