Slicing là một cơ chế của App Thinning mà App Store tự động tạo nhiều biến thể của tệp nhị phân, mỗi biến thể chỉ chứa tài nguyên cho một mẫu thiết bị cụ thể. Theo Apple Developer Documentation, 2026, Slicing loại trừ tài nguyên cho các cấu hình không được hỗ trợ khỏi bản phân phối, giảm kích thước cài đặt. Hãy cùng tìm hiểu nguyên lý hoạt động, các biến thể cắt lát và cách xác minh kết quả.
Các điểm chính
Slicing là một thành phần của App Thinning chịu trách nhiệm tạo các biến thể (lát cắt) của tệp nhị phân ứng dụng về phía App Store. Khi nhà phát triển tải lên một tệp nhị phân phổ quát (fat binary) chứa mã và tài nguyên cho tất cả các cấu hình được hỗ trợ, App Store sẽ phân tích nó và tạo nhiều lát cắt: riêng cho iPhone với bộ xử lý A17, riêng cho iPad với M4, riêng cho Apple Watch. Mỗi lát cắt chỉ chứa các đoạn mã và tài nguyên cần thiết cho sự kết hợp cụ thể giữa kiến trúc và độ phân giải đó.
Trước iOS 9, các nhà phát triển phải tạo thủ công các tệp nhị phân riêng biệt cho các thiết bị khác nhau hoặc phân phối một fat binary phổ quát chứa mọi thứ cùng một lúc. Slicing đã tự động hóa hoàn toàn quy trình này: nhà phát triển chuẩn bị một dự án trong Xcode, tải một kho lưu trữ lên App Store Connect, và Slicing về phía máy chủ tạo số lượng biến thể tối ưu. Người dùng không bao giờ thấy quá trình cắt lát — họ nhận được một tệp .app sẵn sàng, được tối ưu cho thiết bị của họ.
Slicing không chỉ áp dụng cho mã và hình ảnh, mà còn cho trình tạo bóng Metal. GPU Apple sử dụng tập lệnh riêng (Metal Shading Language), khác với các lệnh PowerVR hoặc ARM Mali. Slicing bao gồm trong lát cắt chỉ các trình tạo bóng cho họ GPU của thiết bị mục tiêu. Điều này đặc biệt quan trọng đối với các trò chơi có trình tạo bóng tùy chỉnh — ví dụ, các hiệu ứng hậu xử lý chất lượng cao chỉ được biên dịch cho các thiết bị có GPU mạnh (iPad Pro M4, iPhone 16 Pro Max).
Trình biên dịch Xcode tạo một fat binary với nhiều kiến trúc (armv7, arm64, arm64e), nhưng không loại bỏ tài nguyên — tất cả hình ảnh cho tất cả độ phân giải vẫn nằm trong tệp .app. Slicing đi xa hơn: nó phân tích Asset Catalogs, trình tạo bóng Metal và thư viện Swift, loại bỏ khỏi mỗi lát cắt những gì không cần thiết cho mục tiêu cụ thể. Ví dụ, đồ họa @3x không được đưa vào lát cắt cho iPhone SE, và các bộ điều khiển dành riêng cho iPhone (nếu được tách thành tài nguyên riêng) không được đưa vào lát cắt cho iPad Air.
Quá trình Slicing bắt đầu sau khi tải bản dựng lên App Store Connect và bao gồm ba giai đoạn: phân tích, cắt lát và đóng gói. Ở giai đoạn phân tích, máy chủ App Store phân tích tệp nhị phân, trích xuất thông tin về các kiến trúc, thiết bị, độ phân giải màn hình và phiên bản iOS được hỗ trợ. App Store sử dụng ánh xạ tất cả các mẫu Apple thương mại tới thông số kỹ thuật của chúng — Cơ sở dữ liệu thiết bị được cập nhật với mỗi bản phát hành iOS.
Ở giai đoạn cắt lát, máy chủ tạo các bản sao riêng biệt của tệp nhị phân cho mỗi tổ hợp duy nhất. Để làm điều này, App Store trích xuất hình ảnh từ Asset Catalogs với các thẻ cụ thể (idiom, subtype, scale), chọn những cái phù hợp với thiết bị mục tiêu và tập hợp một gói tài nguyên mới. Thư viện chuẩn Swift cũng phải chịu sự cắt lát — các ký hiệu và phương thức không được sử dụng sẽ bị loại bỏ khỏi nó (dead code stripping).
Ở giai đoạn đóng gói, mỗi lát cắt được đặt vào một gói phân phối riêng và liên kết với siêu dữ liệu — danh sách các mẫu thiết bị mà lát cắt này dành cho. Khi người dùng tải ứng dụng, App Store sẽ chọn lát cắt phù hợp dựa trên mẫu thiết bị, phiên bản iOS và loại kết nối. Nếu không có sự trùng khớp chính xác, máy chủ sẽ sử dụng lát cắt gần nhất về đặc tính. Apple lưu trữ tất cả các biến thể trong mạng CDN CloudKit để phân phối nhanh trên toàn thế giới.
Slicing là một trong ba cơ chế của App Thinning, nhưng nó đóng góp nhiều nhất vào việc giảm kích thước tải xuống. Bitcode chịu trách nhiệm tối ưu mã máy, On-Demand Resources chịu trách nhiệm quản lý tài nguyên trên thiết bị, và Slicing chịu trách nhiệm loại bỏ tài nguyên dư thừa ở giai đoạn phân phối. Nếu không có Slicing, hai cơ chế đầu tiên vẫn hoạt động, nhưng người dùng sẽ nhận được tài nguyên cho tất cả thiết bị, làm tăng kích thước lên 20–40% tùy theo số lượng Asset Catalogs.
Sự khác biệt giữa Slicing và Bitcode nằm ở điểm áp dụng: Slicing hoạt động ở cấp độ tài nguyên (hình ảnh, trình tạo bóng, tệp NIB), Bitcode hoạt động ở cấp độ mã máy. Slicing chia mã theo kiến trúc (arm64 vs arm64e), Bitcode cho phép Apple biên dịch lại mã cho các kiến trúc mới. Bitcode + Slicing cùng nhau mang lại sự tối ưu tối đa: Bitcode tạo mã cho một kiến trúc cụ thể, và Slicing loại bỏ các tài nguyên không cần thiết cho kiến trúc đó.
Mối quan hệ với On-Demand Resources — Slicing và ODR không trùng lặp. Slicing xác định tài nguyên nào sẽ được đưa vào bản phân phối trên thiết bị, trong khi ODR quản lý thời điểm các tài nguyên này được tải và dỡ. Nhà phát triển có thể gắn thẻ ODR cho một tài nguyên và Slicing sẽ bao gồm nó vào lát cắt nếu nó phù hợp với thiết bị. Apple khuyên bạn nên sử dụng cả ba cơ chế cùng một lúc để có kích thước cài đặt tối thiểu.
| Cơ chế | Đối tượng tối ưu | Khi áp dụng | Ảnh hưởng đến kích thước |
|---|---|---|---|
| Slicing | Tài nguyên (hình ảnh, trình tạo bóng) | Về phía App Store | Loại bỏ ~30% tài nguyên dư thừa |
| Bitcode | Mã máy | Khi người dùng tải xuống | Tối ưu mã cho kiến trúc |
| ODR | Tài nguyên trên thiết bị | Sau khi cài đặt | Giảm kích thước ban đầu 40–60% |
Slicing tạo các lát cắt riêng biệt theo nhiều chiều: kiến trúc bộ xử lý, kích thước màn hình (độ phân giải), phiên bản iOS và họ GPU (cho Metal). Kiến trúc xác định tập lệnh CPU: arm64 — tập 64 bit cơ bản (iPhone 5s — iPhone X), arm64e — tập mở rộng với hỗ trợ Pointer Authentication và PAC (iPhone XS trở lên, iPad Pro với A12X+). Lát cắt cho arm64e bao gồm mã có các lệnh bảo vệ bộ nhớ không có sẵn trên các thiết bị arm64.
Độ phân giải màn hình — chiều thứ hai chính của Slicing. Apple sử dụng các tỷ lệ @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus trở lên) và các tỷ lệ dành riêng cho iPad (2x và 3x với các chỉ số bổ sung). Slicing bao gồm trong lát cắt chỉ các hình ảnh có tỷ lệ phù hợp với thiết bị mục tiêu. Với việc tổ chức Asset Catalogs đúng cách trong Xcode, điều này loại bỏ nhu cầu quản lý thủ công các bộ tài nguyên — chỉ cần thêm hình ảnh vào danh mục, chỉ định các loại thiết bị được hỗ trợ.
Họ GPU — chiều thứ ba, có tầm quan trọng then chốt đối với các ứng dụng Metal. Apple phân loại GPU theo thế hệ: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Trình tạo bóng Metal được biên dịch riêng cho từng họ, vì tập lệnh Metal Shading Language mở rộng theo từng thế hệ GPU. Slicing bao gồm trong lát cắt chỉ các trình tạo bóng cho họ GPU của thiết bị mục tiêu, giảm đáng kể kích thước của các trò chơi và ứng dụng sử dụng Metal để kết xuất.
Kiến trúc CPU ảnh hưởng trực tiếp đến kích thước lát cắt: mã arm64e chứa các lệnh bổ sung Pointer Authentication (PAC) và Signed Return Address, làm tăng kích thước tệp nhị phân thêm 5–10% so với arm64. Tuy nhiên, sự gia tăng này được bù đắp bởi thực tế là Slicing chỉ bao gồm mã arm64e trong các lát cắt dành cho thiết bị có bộ xử lý A12+. Đối với iPhone SE (thế hệ thứ ba) với A15 Bionic, Slicing tạo một lát cắt riêng được tối ưu cho khả năng của con chip này.
Việc cấu hình Slicing trong Xcode rất tối thiểu — cấu hình chính được thực hiện thông qua Asset Catalogs và Build Settings. Asset Catalog phải chứa các tài nguyên được sắp xếp theo loại thiết bị (Any, iPhone, iPad, Apple Watch, Apple TV) với tỷ lệ và chế độ hiển thị được chỉ định chính xác. Xcode tự động bao gồm trong bản dựng chỉ các tài nguyên phù hợp với các thiết bị mục tiêu được chỉ định trong cài đặt Deployment Target.
Cài đặt chính của Slicing trong Xcode là Build Setting App Thinning. Các giá trị khả dụng:
Targeted Device Families trong General → Deployment Info xác định loại thiết bị nào ứng dụng được xây dựng cho (iPhone / iPad / Universal). Slicing dựa vào tham số này khi cắt lát — nếu ứng dụng chỉ hỗ trợ iPhone, lát cắt cho iPad sẽ không được tạo. Deployment Target (phiên bản iOS tối thiểu) cũng ảnh hưởng đến Slicing: các phiên bản iOS cũ có thể yêu cầu các lát cắt armv7 không cần thiết cho iOS 13+. Apple khuyên bạn nên đặt Deployment Target thành phiên bản iOS ổn định mới nhất — điều này làm giảm số lượng lát cắt và kích thước tệp nhị phân.
Để đạt hiệu quả Slicing tối đa, Asset Catalogs nên sử dụng các thẻ cụ thể cho mỗi tài nguyên. Xcode cung cấp trong Attributes Inspector cho hình ảnh: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Bằng cách kết hợp các thẻ này, nhà phát triển kiểm soát lát cắt nào mỗi hình ảnh xuất hiện. Ví dụ, một hình ảnh cho iPad với thẻ Regular Width + Regular Height sẽ chỉ xuất hiện trong các lát cắt cho iPad ở hướng ngang.
# Xuất lát cắt cho một thiết bị cụ thể
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild với tham số -thinning và định danh mẫu sẽ tạo lát cắt chỉ cho mẫu đó. Danh sách định danh có thể được tìm thấy trong Cơ sở dữ liệu thiết bị Apple (định dạng: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Phương pháp này hữu ích để kiểm tra kích thước lát cắt trước khi gửi đến App Store Connect. CI/CD có thể sử dụng lệnh này để xác minh tự động — nếu kích thước lát cắt vượt quá giới hạn (ví dụ 100 MB cho tải xuống di động), đường ống sẹ đưa ra cảnh báo.
Sau khi tải kho lưu trữ lên App Store Connect, Apple cung cấp thống kê chi tiết về kích thước các lát cắt. App Store Connect → Activity → chọn bản dựng → App Thinning — hiển thị Estimated App Store Size cho từng danh mục thiết bị: iPhone, iPad, Apple Watch, tvOS. Kích thước được phân chia theo phiên bản iOS và loại bộ xử lý. Nếu bất kỳ lát cắt nào vượt quá kích thước dự kiến, App Store Connect sẽ đánh dấu nó bằng cảnh báo màu vàng.
Xác minh cục bộ qua Xcode Organizer: sau khi lưu trữ, mở Window → Organizer, chọn kho lưu trữ và nhấp vào App Thinning Profiles. Xcode sẽ hiển thị kích thước cho từng lát cắt khả dựa trên cấu hình dự án hiện tại. Tùy chọn Export cũng có sẵn để tạo IPA với một hồ sơ Slicing cụ thể. Xcode tạo một tệp .app-thinning.plist chứa thông tin về tài nguyên nào được bao gồm trong mỗi lát cắt.
Để tự động hóa việc xác minh Slicing trong CI/CD, hãy sử dụng xcodebuild với -thinning và phân tích kích thước các tệp .app được tạo. Apple cung cấp tiện ích dòng lệnh app-size (được cài đặt qua Xcode Command Line Tools), xuất báo cáo chi tiết: kích thước mã, kích thước tài nguyên theo danh mục (hình ảnh, trình tạo bóng, NIB), kích thước thư viện Swift. So sánh kích thước các lát cắt trước và sau khi tối ưu Asset Catalogs giúp xác định các tài nguyên không tham gia Slicing do cấu hình không chính xác.
# Phân tích kích thước lát cắt
app-size -m "sliced/App.app" \
--format json
App-size xuất báo cáo JSON được phân chia theo danh mục tài nguyên. Nếu Slicing được cấu hình chính xác, phần “images” sẽ chỉ chứa một bộ tỷ lệ (@2x hoặc @3x), không phải tất cả các biến thể. Lỗi cấu hình Asset Catalog thể hiện khi tất cả các tỷ lệ (@1x, @2x, @3x) đều có mặt trong lát cắt — điều này có nghĩa là Xcode không thể xác định thiết bị mục tiêu cho các hình ảnh này và Slicing đã không hoạt động.
Câu hỏi thường gặp
Có, TestFlight cũng hỗ trợ Slicing. Khi người thử nghiệm tải ứng dụng qua TestFlight, máy chủ Apple sẽ cung cấp một lát cắt được tối ưu cho thiết bị của người thử nghiệm. App Store Connect tự động xử lý Slicing cho tất cả các bản phân phối, bao gồm TestFlight, ngoại trừ các bản dựng Enterprise và Ad Hoc.
Có, trong Asset Catalogs, bạn có thể bỏ chọn các loại thiết bị nhất định cho mỗi hình ảnh. Xcode cho phép bạn trong Attributes Inspector chỉ định Idiom (iPhone, iPad, Apple Watch, Mac) và tỷ lệ mà tài nguyên nên được bao gồm. Nếu một tài nguyên cần cho tất cả các thiết bị, hãy sử dụng Universal với bất kỳ tỷ lệ nào.
Các framework tùy chỉnh (.framework) cũng tham gia vào Slicing nếu chúng được xây dựng dưới dạng XCFramework (với nhiều kiến trúc). App Store bao gồm trong lát cắt chỉ kiến trúc framework phù hợp với thiết bị mục tiêu. Các thư viện tĩnh (.a) không phải chịu sự cắt lát — chúng được nhúng hoàn toàn vào tệp nhị phân.
Xcode Organizer hiển thị estimated size — kích thước dự kiến mà không tính đến việc cắt lát thực tế trên máy chủ Apple. App Store Connect hiển thị kích thước thực tế sau Slicing, có thể nhỏ hơn ước tính 10–15% vì máy chủ áp dụng các tối ưu bổ sung (thuật toán LZFSE, nén tài nguyên Zstandard) không có sẵn ở máy cục bộ.
Có, Slicing hoàn toàn tương thích với SwiftUI. Asset Catalogs được SwiftUI sử dụng thông qua các kiểu Image, Color và SymbolImage. Slicing áp dụng cho hình ảnh vector và raster, SF Symbols và trình tạo bóng Metal bất kể giao diện được xây dựng bằng SwiftUI hay UIKit.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm