Slicing: що це таке, принцип роботи та зв’язок з App Thinning

Автор: IT Sectr Опубліковано: 2026-04-17 Час читання: 11 хв

Slicing — это механизм App Thinning, при котором App Store автоматически створює несколько варіантів бинарного файла, каждый из которых содержит ресурси только для конкретной модели пристрої. По данным Apple Developer Documentation, 2026, Slicing исключает из дистрибутива ресурси для неподдерживаемых конфигураций, уменьшая розмір установки. Разберём принцип работы, варіанти нарезки и проверку результатов.

Головне

  • Slicing — разделение бинарного файла застосунка на варіанти для разных архитектур, разрешений и версий iOS
  • App Store доставляет користувачеві только ресурси, соответствующие его пристроїву
  • Asset Catalogs — основний инструмент розробника для керування ресурсами, участвующими в Slicing
  • GPU-семейства (Apple GPU, PowerVR, Mali) также учитываются при нарезке Metal-шейдеров
  • Проверка срезов виконується через Xcode Organizer и App Store Connect Build Metrics

Що таке Slicing

Slicing — это компонент App Thinning, отвечающий за створення варіантів (срезов) бинарного файла застосунка на стороне App Store. Когда розробник загружает универсальный бинарник (fat binary), содержащий код и ресурси для всех поддерживаемых конфигураций, App Store анализирует его и генерирует несколько срезов: отдельно для iPhone с процесором A17, отдельно для iPad с M4, отдельно для Apple Watch. Каждый срез содержит только те фрагменты кода и ресурси, которые необходимы для данной комбинации архитектуры и разрешения.

До iOS 9 розробники вручную создавали отдельные бинарные файлы для разных пристроїв или поставляли универсальный fat binary, который содержал всё сразу. Slicing полностью автоматизировал цей процес: розробник готовит один проект в Xcode, загружает один архив в App Store Connect, а Slicing на стороне сервера створює оптимальное количество варіантів. Пользователь никогда не видит процеса нарезки — он получает готовый .app, оптимизированный под его пристрій.

Slicing застосовується не только к коду и зображенням, но и к Metal-шейдерам. Apple GPU використовує свой набор инструкций (Metal Shading Language), который отличается от инструкций PowerVR или ARM Mali. Slicing включає в срез только шейдеры для GPU-семейства целевого пристрої. Це особенно важно для игр с кастомными шейдерами — например, высокодетализированные эффекты постобработки компилируются только для пристроїв с мощным GPU (iPad Pro M4, iPhone 16 Pro Max).

Отличие Slicing от простой компиляции под архитектуру

Компилятор Xcode створює fat binary с несколькими архитектурами (armv7, arm64, arm64e), но не удаляет ресурси — все зображення для всех разрешений остаются внутри .app. Slicing идёт дальше: он анализирует Asset Catalogs, Metal-шейдеры и Swift-библиотеки, удаляя из каждого среза то, что не нужно для конкретной цели. Например, из среза для iPhone SE не попадает @3x-графика, а из среза для iPad Air — iPhone-специфичные контроллеры (если они вынесены в отдельные ресурси).

Как работает Slicing

Процесс Slicing запускается после загрузки билда в App Store Connect и состоит из трёх цяпов: анализ, нарезка и упаковка. На цяпе анализа сервер App Store розбирає бинарный файл, извлекает из него информацию о поддерживаемых архитектурах, пристроїх, разрешениях экранов и версиях iOS. App Store використовує маппинг всех коммерческих моделей Apple к их техническим характеристикам — база данных пристроїв (Device Database) обновляется с каждым релизом iOS.

На цяпе нарезки сервер створює отдельные копии бинарного файла для каждой уникальной комбинации. Для цього App Store извлекает из Asset Catalogs зображення с конкретными тегами (idiom, subtype, scale), выбирает только те, которые соответствуют целевому пристроїву, и собирает новый пакет ресурсів. Swift-стандартная библиотека также подлежит нарезке — из неё удаляются символы и методы, не використовувані конкретным застосунком (dead code stripping).

На цяпе упаковки каждый срез помещается в отдельный пакет дистрибутива и связывается с метаданными — список моделей пристроїв, для которых цей срез предназначен. App Store при загрузке застосунка пользователем выбирает подходящий срез по модели пристрої, версии iOS и типу соединения. Если точного совпадения нет, сервер використовує наиболее близкий по характеристикам срез. Apple хранит все варіанти в CDN-сети CloudKit для быстрой доставки по всему миру.

Slicing в контексте App Thinning

Slicing — это один из трёх механизмов App Thinning, но он вносит наибольший вклад в уменьшение розміру загрузки. Bitcode відповідає за оптимизацию машинного кода, On-Demand Resources — за керування ресурсами на пристрої, а Slicing — за удаление избыточных ресурсів на цяпе дистрибуции. Без Slicing первые два механизма работают, но користувачі получают ресурси для всех пристроїв, что увеличивает розмір на 20-40% в зависимости от количества Asset Catalogs.

Разница между Slicing и Bitcode в точке застосунка: Slicing работает на уровне ресурсів (зображення, шейдеры, NIB-файлы), Bitcode — на уровне машинного кода. Slicing делит код по архитектурам (arm64 vs arm64e), Bitcode дозволяє Apple перекомпилировать код под новые архитектуры. Bitcode + Slicing вместе дают максимальную оптимизацию: Bitcode генерирует код под конкретную архитектуру, а Slicing удаляет лишние ресурси для этой архитектуры.

Соотношение с On-Demand Resources — Slicing и ODR не пересекаются. Slicing решает, какие ресурси вообще попадут в дистрибутив на пристрій, а ODR управляет, когда ці ресурси загрузятся и выгрузятся. Разработчик может пометить ресурс тегом ODR, и Slicing включит его в срез, если он соответствует пристроїву. Apple рекомендует использовать все три механизма одновременно для минимального розміру установки.

МеханизмОбъект оптимизацииКогда застосовуєтьсяЭффект на розмір
SlicingРесурсы (зображення, шейдеры)На стороне App StoreУдаляет ~30% лишних ресурсів
BitcodeМашинный кодПри загрузке пользователемОптимизация кода под архитектуру
ODRРесурсы на пристроїПосле установкиУменьшает начальный розмір на 40-60%

Варианты Slicing для разных пристроїв

Slicing створює отдельные срезы по нескольким измерениям: архитектура процесора, розмір экрана (разрешение), версия iOS и GPU-семейство (для Metal). Архитектура определяет набор инструкций CPU: arm64 — базовый 64-битный набор (iPhone 5s — iPhone X), arm64e — расширенный набор с поддержкой Pointer Authentication и PAC (iPhone XS и новее, iPad Pro с A12X+). Срез для arm64e включає код с инструкциями защиты памяти, недоступными на arm64-пристроїх.

Разрешение экрана — второе ключевое измерение Slicing. Apple використовує масштабы @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus и новее) и специфичные для iPad (2x и 3x с дополнительными метриками). Slicing включає в срез только зображення с масштабом, соответствующим целевому пристроїву. При правильной организации Asset Catalogs в Xcode это избавляет от необходимости вручную управлять наборами ресурсів — достаточно добавить зображення в каталог, указав поддерживаемые типы пристроїв.

GPU-семейство — третье измерение, критически важное для Metal-приложений. Apple використовує классификацию GPU по поколениям: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4). Metal-шейдеры компилируются для каждого семейства отдельно, так как набор инструкций Metal Shading Language расширяется с каждым поколением GPU. Slicing включає в срез только шейдеры для GPU-семейства целевого пристрої, что значительно уменьшает розмір игр и приложений, использующих Metal для рендеринга.

Влияние архитектуры на розмір среза

Архитектура CPU напрямую впливає на розмір среза: arm64e-код содержит дополнительные инструкции Pointer Authentication (PAC) и Signed Return Address, которые увеличивают бинарный файл на 5-10% по сравнению с arm64. Однако это увеличение компенсируется тем, что Slicing включає arm64e-код только в срезы для пристроїв с A12+ процесорами. Для iPhone SE (третьего поколения) с A15 Bionic Slicing створює отдельный срез, оптимизированный под возможности цього чипа.

Настройка Slicing в Xcode

Настройка Slicing в Xcode минимальна — основна конфигурация виконується через Asset Catalogs и Build Settings. Asset Catalog должен содержать ресурси, организованные по типам пристроїв (Any, iPhone, iPad, Apple Watch, Apple TV) с корректным указанием масштаба и режима отображения. Xcode автоматически включає в сборку только те ресурси, которые соответствуют целевым пристроїм, указанным в налаштуваннях Deployment Target.

Ключевая налаштування Slicing в Xcode — Build Setting App Thinning. Доступные значения:

  • None — Slicing отключён, застосунок поставляется как universal fat binary
  • Automatic — Xcode включає Slicing с налаштуваннями по умолчанию
  • Manual — розробник выбирает конкретные комбинации для Slicing
Для публикации в App Store используйте Automatic. Manual-режим удобен для тестирования конкретных срезов на локальном пристрої.

Targeted Device Families в General → Deployment Info определяет, для каких типов пристроїв собирается застосунок (iPhone / iPad / Universal). Slicing опирается на цей параметр при нарезке — если застосунок поддерживает только iPhone, срез для iPad не створюєся. Deployment Target (минимальная версия iOS) также впливає на Slicing: для старых версий iOS могут потребоваться armv7-срезы, которые не нужны для iOS 13+. Apple рекомендует устанавливать Deployment Target на последнюю стабильную версию iOS — это уменьшает количество срезов и розмір бинарного файла.

Параметры Asset Catalog для Slicing

Для максимальной эффективности Slicing Asset Catalogs должны использовать специфичные теги для каждого ресурса. Xcode предоставляет в Attributes Inspector для зображень: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High). Комбинируя ці теги, розробник управляет, в какие срезы попадёт каждое зображення. Например, зображення для iPad с тегом Regular Width + Regular Height попадёт только в срезы для iPad в landscape-ориентации.

bash
# Експорт зрізу для конкретного пристрою
xcodebuild -exportArchive \
  -archivePath "App.xcarchive" \
  -exportPath "sliced/" \
  -exportOptionsPlist "export.plist" \
  -thinning "iPhone17,2" # iPhone 16 Pro Max

Xcodebuild с параметром -thinning и идентификатором модели створює срез только для этой модели. Список идентификаторов можно найти в Device Database Apple (формат: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4). Цет метод полезен для проверки розміру среза перед отправкой в App Store Connect. CI/CD может использовать эту команду для автоматической верификации — если розмір среза превышает лимит (например, 100 МБ для мобильной загрузки), пайплайн выдаёт предупреждение.

Проверка результатов Slicing

После загрузки архива в App Store Connect Apple предоставляет детальную статистику по розмірум срезов. App Store Connect → Activity → выберите билд → App Thinning — отображает Estimated App Store Size для каждой категории пристроїв: iPhone, iPad, Apple Watch, tvOS. Размеры разбиты по версиям iOS и типам процесоров. Если какой-то срез превышает ожидаемый розмір, App Store Connect помечает его жёлтым предупреждением.

Локальная проверка через Xcode Organizer: после архивации откройте Window → Organizer, выберите архив и нажмите App Thinning Profiles. Xcode покажет розміры для каждого возможного среза на основе текущей конфигурации проекта. Также доступна опция Export для створеноия IPA с конкретным профилем Slicing. Xcode генерирует .app-thinning.plist с информацией о том, какие ресурси вошли в каждый срез.

Для автоматизации проверки Slicing в CI/CD используйте xcodebuild с -thinning и анализируйте розмір створеноных .app-файлов. Apple предоставляет командную утилиту app-size (устанавливается через Xcode Command Line Tools), которая выводит подробный отчёт: розмір кода, розмір ресурсів по категориям (зображення, шейдеры, NIB), розмір Swift-библиотек. Сравнение розміров срезов до и после оптимизации Asset Catalogs помогает выявить ресурси, не участвующие в Slicing из-за неправильной конфигурации.

bash
# Аналіз розміру зрізу
app-size -m "sliced/App.app" \
  --format json

App-size выводит JSON-отчёт с разбивкой по категориям ресурсів. Если Slicing налаштовано правильно, в разделе "images" будет только один набор масштаба (@2x или @3x), а не все варіанти. Ошибка конфигурации Asset Catalogs проє в том, что все масштабы (@1x, @2x, @3x) присутствуют в срезе — это значит, что Xcode не смог определить целевое пристрій для цих зображень, и Slicing не сработал.

Часті запитання

Влияет ли Slicing на застосунка, распространяемые через TestFlight?

Да, TestFlight также поддерживает Slicing. Когда тестировщик загружает застосунок через TestFlight, сервер Apple доставляет срез, оптимизированный под пристрій тестировщика. App Store Connect автоматически обрабатывает Slicing для всех дистрибутивов, включая TestFlight, за исключением Enterprise и Ad Hoc сборок.

Можно ли отключить Slicing для конкретного ресурса?

Да, в Asset Catalogs для каждого зображення можно снять флаги с определённых типов пристроїв. Xcode дозволяє в Attributes Inspector указать, для каких Idiom (iPhone, iPad, Apple Watch, Mac) и масштабов ресурс должен включаться. Если ресурс нужен всем пристроїм, используйте Universal с любым масштабом.

Как Slicing работает с кастомными фреймворками?

Кастомные фреймворки (.framework) также участвуют в Slicing, если они собраны как XCFramework (с несколькими архитектурами). App Store включає в срез только ту архитектуру фреймворка, которая соответствует целевому пристроїву. Статические библиотеки (.a) не подвергаются Slicing — они встраиваются в бинарный файл полностью.

Почему розмір App Store билда отличается от розміру в Xcode Organizer?

Xcode Organizer показывает estimated size — прогнозируемый розмір без учёта фактической нарезки на серверах Apple. App Store Connect отображает реальный розмір после Slicing, который может быть на 10-15% меньше расчётного, так как сервер применяет дополнительные оптимизации (алгоритмы LZFSE, Zstandard сжатия ресурсів), недоступные локально.

Поддерживает ли Slicing SwiftUI ресурси?

Да, Slicing полностью совместим со SwiftUI. Asset Catalogs використовуються SwiftUI через типы Image, Color, SymbolImage. Slicing застосовується к векторным и растровым зображенням, символам SF Symbols и Metal-шейдерам независимо от того, використовується SwiftUI или UIKit для построения интерфейса.

Підсумки

  • Slicing — механизм нарезки бинарного файла на стороне App Store, удаляющий лишние ресурси для конкретного пристрої
  • Три измерения нарезки: архитектура CPU (arm64/arm64e), разрешение экрана (@2x/@3x) и GPU-семейство (Metal)
  • Asset Catalogs — основний инструмент керування ресурсами, участвующими в Slicing
  • App Store доставляет только те ресурси, которые соответствуют модели пристрої, версии iOS и типу соединения
  • Xcode Organizer и App Store Connect показывают розміры срезов для всех поддерживаемых конфигураций
  • App-size утилита из Xcode CL Tools дозволяє проверить эффективность Slicing в CI/CD
  • TestFlight также поддерживает Slicing, в отличие от Enterprise и Ad Hoc дистрибуции

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також