Slicing — 是 App Thinning 的一种机制,App Store 通过它自动创建二进制文件的多个变体,每个变体仅包含特定设备型号的资源。根据 Apple Developer Documentation, 2026,Slicing 从分发中排除不受支持配置的资源,从而减小安装大小。我们来分析工作原理、切割变体和结果检查。
要点
Slicing — 是 App Thinning 的组件,负责在 App Store 端创建应用程序二进制文件的变体(切片)。当开发人员上传包含所有支持配置的代码和资源的通用二进制文件(fat binary)时,App Store 对其进行分析并生成多个切片:分别适用于配备 A17 处理器的 iPhone、配备 M4 的 iPad、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)编译。
Xcode 编译器创建包含多个架构(armv7、arm64、arm64e)的 fat binary,但不会删除资源——所有分辨率的图像都保留在 .app 内部。Slicing 更进一步:它分析 Asset Catalogs、Metal 着色器和 Swift 库,从每个切片中删除特定目标不需要的内容。例如,iPhone SE 的切片不包含 @3x 图形,而 iPad Air 的切片不包含 iPhone 特有的控制器(如果它们被分离到单独的资源中)。
Slicing 过程在构建上传到 App Store Connect 后启动,包括三个阶段:分析、切割和打包。在分析阶段,App Store 服务器解析二进制文件,提取有关支持的架构、设备、屏幕分辨率和 iOS 版本的信息。App Store 将所有商业 Apple 型号映射到其技术规格——设备数据库(Device Database)随每个 iOS 版本更新。
在切割阶段,服务器为每个独特组合创建二进制文件的单独副本。为此,App Store 从 Asset Catalogs 中提取带有特定标签(idiom、subtype、scale)的图像,仅选择与目标设备匹配的图像,并组装新的资源包。Swift 标准库也经过切割——从中删除特定应用程序未使用的符号和方法(死代码剥离)。
在打包阶段,每个切片被放入单独的分发包中,并与元数据关联——该切片适用的设备型号列表。当用户下载应用程序时,App Store 根据设备型号、iOS 版本和连接类型选择合适的切片。如果没有完全匹配,服务器将使用规格最接近的切片。Apple 将所有变体存储在 CloudKit CDN 网络中,以便在全球范围内快速交付。
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 根据多个维度创建单独的切片:处理器架构、屏幕尺寸(分辨率)、iOS 版本和 GPU 家族(用于 Metal)。架构 确定 CPU 指令集:arm64 — 基本 64 位集(iPhone 5s — iPhone X),arm64e — 扩展集,支持 Pointer Authentication 和 PAC(iPhone XS 及更新机型、配备 A12X+ 的 iPad Pro)。arm64e 的切片包含 arm64 设备上不可用的内存保护指令代码。
屏幕分辨率 — Slicing 的第二个关键维度。Apple 使用 @1x(iPhone 3GS)、@2x(iPhone 4 — iPhone SE 3)、@3x(iPhone 6 Plus 及更新机型)以及 iPad 特定的缩放比例(2x 和 3x,附带额外指标)。Slicing 仅将具有与目标设备匹配的缩放比例的图像包含在切片中。通过在 Xcode 中正确组织 Asset Catalogs,这消除了手动管理资源集的需求——只需将图像添加到目录中,指定支持的设备类型即可。
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 指令,这使得二进制文件比 arm64 大 5-10%。然而,这种增加被 Slicing 仅将 arm64e 代码包含在配备 A12+ 处理器的设备的切片中这一事实所抵消。对于配备 A15 Bionic 的 iPhone SE(第三代),Slicing 创建了一个针对该芯片功能优化的单独切片。
在 Xcode 中配置 Slicing 是最小化的——主要配置通过 Asset Catalogs 和 Build Settings 完成。Asset Catalog 应包含按设备类型(Any、iPhone、iPad、Apple Watch、Apple TV)组织的资源,并正确指明缩放比例和显示模式。Xcode 自动仅在编译中包含与 Deployment Target 设置中指定的目标设备匹配的资源。
Xcode 中的关键 Slicing 设置 —— Build Setting App Thinning。可用值:
Targeted Device Families(位于 General → Deployment Info)确定应用程序针对哪些设备类型构建(iPhone / iPad / Universal)。Slicing 在切割时依赖此参数——如果应用程序仅支持 iPhone,则不会创建 iPad 的切片。Deployment Target(最低 iOS 版本)也会影响 Slicing:对于旧版 iOS,可能需要 armv7 切片,而这些对于 iOS 13+ 是不需要的。Apple 建议将 Deployment Target 设置为最新的稳定 iOS 版本——这可以减少切片数量和二进制文件的大小。
为了最大程度地提高 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)。通过组合这些标签,开发人员控制每个图像将进入哪些切片。例如,带有 Regular Width + Regular Height 标签的 iPad 图像将仅进入横向方向 iPad 的切片。
# 导出特定设备的切片
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild 使用 -thinning 参数和型号标识符仅为此型号创建切片。标识符列表可以在 Apple Device Database 中找到(格式:iPhone17,2 — iPhone 16 Pro Max,iPad14,1 — iPad Pro 11 M4)。此方法可用于在发送到 App Store Connect 之前检查切片大小。CI/CD 可以使用此命令进行自动验证——如果切片大小超过限制(例如,移动下载为 100 MB),管道会发出警告。
将存档上传到 App Store Connect 后,Apple 提供有关切片大小的详细统计信息。App Store Connect → Activity → 选择 build → App Thinning — 显示每个设备类别的 Estimated App Store Size:iPhone、iPad、Apple Watch、tvOS。大小按 iOS 版本和处理器类型细分。如果某个切片超过预期大小,App Store Connect 会用黄色警告标记它。
通过 Xcode Organizer 进行本地检查:存档后,打开 Window → Organizer,选择存档并单击 App Thinning Profiles。Xcode 将根据当前项目配置显示每个可能切片的大小。还提供 Export 选项,用于创建具有特定 Slicing 配置文件的 IPA。Xcode 生成 .app-thinning.plist 文件,其中包含有关哪些资源进入每个切片的信息。
要自动化 CI/CD 中的 Slicing 检查,请使用带有 -thinning 的 xcodebuild 并分析创建的 .app 文件的大小。Apple 提供了命令行工具 app-size(通过 Xcode Command Line Tools 安装),它输出详细报告:代码大小、按类别划分的资源大小(图像、着色器、NIB)、Swift 库大小。优化 Asset Catalogs 前后切片大小的比较有助于识别由于配置不正确而未参与 Slicing 的资源。
# 分析切片大小
app-size -m "sliced/App.app" \
--format json
App-size 输出按资源类别细分的 JSON 报告。如果 Slicing 配置正确,在 „images” 部分将只有一个缩放集(@2x 或 @3x),而不是所有变体。Asset Catalogs 配置错误表现为所有缩放比例(@1x、@2x、@3x)都存在于切片中——这意味着 Xcode 无法确定这些图像的目标设备,并且 Slicing 未生效。
常见问题
是的,TestFlight 也支持 Slicing。当测试人员通过 TestFlight 下载应用程序时,Apple 服务器会提供针对测试人员设备优化的切片。App Store Connect 自动处理所有分发的 Slicing,包括 TestFlight,但 Enterprise 和 Ad Hoc 构建除外。
可以,在 Asset Catalogs 中,对于每个图像,可以取消选中特定设备类型的标志。Xcode 在 Attributes Inspector 中允许指定资源应包含在哪些 Idiom(iPhone、iPad、Apple Watch、Mac)和缩放比例中。如果所有设备都需要该资源,请使用 Universal 搭配任意缩放比例。
如果自定义框架(.framework)作为 XCFramework(包含多个架构)编译,它们也会参与 Slicing。App Store 仅将框架中与目标设备匹配的架构包含在切片中。静态库(.a)不经过 Slicing——它们完整嵌入到二进制文件中。
Xcode Organizer 显示 estimated size——未考虑 Apple 服务器上实际切割的估计大小。App Store Connect 显示 Slicing 后的实际大小,可能比估计值小 10-15%,因为服务器应用了本地不可用的额外优化(LZFSE、Zstandard 压缩算法)。
是的,Slicing 与 SwiftUI 完全兼容。Asset Catalogs 通过 Image、Color、SymbolImage 类型被 SwiftUI 使用。无论使用 SwiftUI 还是 UIKit 构建界面,Slicing 都适用于矢量图像、光栅图像、SF Symbols 符号和 Metal 着色器。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。