<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>包瘦身 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%8C%85%E7%98%A6%E8%BA%AB/</link><description>Recent content in 包瘦身 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 22:32:27 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%8C%85%E7%98%A6%E8%BA%AB/index.xml" rel="self" type="application/rss+xml"/><item><title>包瘦身-App Thinning</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-appthinning/</link><pubDate>Sat, 02 May 2026 22:32:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-appthinning/</guid><description>&lt;p&gt;App Thinning是Apple提供的包体积优化技术，让用户只下载适合其设备的内容。本文详细介绍App Thinning的三个组成部分及其原理。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="整体架构"&gt;整体架构&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;开发者上传：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌─────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ Universal IPA │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── arm64 代码 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── @1x/@2x/@3x 图片 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── iPhone/iPad 资源 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── Metal GPU资源（OpenGL ES已弃用） │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└─────────────────────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; App Store处理
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌───────────┐ ┌──────────┐ ┌──────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ iPhone 12 │ │ iPhone 8 │ │ iPad Pro │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ 变体 │ │ 变体 │ │ 变体 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ @3x图片 │ │ @2x图片 │ │ @2x图片 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ arm64 │ │ arm64 │ │ arm64 │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ A14 GPU │ │ A11 GPU │ │ M1 GPU │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└───────────┘ └──────────┘ └──────────┘
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;App Thinning包含三个部分：&lt;/p&gt;</description></item><item><title>包瘦身-分析工具</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7/</link><pubDate>Sat, 02 May 2026 22:32:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7/</guid><description>&lt;p&gt;在进行包体积优化之前，首先需要了解如何分析包体积。本文介绍常用的分析工具和Mach-O文件结构。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="查看ipa构成"&gt;查看IPA构成&lt;/h2&gt;
&lt;p&gt;解压IPA文件分析各部分大小：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 解压IPA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;unzip -q YourApp.ipa -d ./ipa_content
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 查看各文件大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;find ./ipa_content -type f -exec ls -lh &lt;span style="color:#f92672"&gt;{}&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\;&lt;/span&gt; | sort -k5 -h -r | head -20
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="linkmap分析"&gt;LinkMap分析&lt;/h2&gt;
&lt;p&gt;LinkMap文件记录了链接器生成可执行文件的详细信息，可以精确分析二进制大小：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Build Settings中设置
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Write Link Map File = YES
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Path to Link Map File = $(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="linkmap文件结构"&gt;LinkMap文件结构&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Path: /path/to/YourApp
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Arch: arm64
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Object files:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[ 0] linker synthesized
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[ 1] /path/to/ViewController.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[ 2] /path/to/Model.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Sections:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Address Size Segment Section
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0x100001000 0x00012345 __TEXT __text
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0x100013345 0x00001234 __TEXT __stubs
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Symbols:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Address Size File Name
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0x100001000 0x00000100 [ 1] -[ViewController viewDidLoad]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0x100001100 0x00000050 [ 2] -[Model init]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="解析脚本"&gt;解析脚本&lt;/h3&gt;
&lt;p&gt;可以使用脚本解析LinkMap统计各模块大小：&lt;/p&gt;</description></item><item><title>包瘦身-可执行文件优化</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E4%BC%98%E5%8C%96/</link><pubDate>Sat, 02 May 2026 22:32:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E4%BC%98%E5%8C%96/</guid><description>&lt;p&gt;可执行文件通常占iOS应用包体积的30-50%，是优化的重点。本文介绍各种可执行文件优化手段及其原理。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="编译器优化选项"&gt;编译器优化选项&lt;/h2&gt;
&lt;h3 id="优化级别原理"&gt;优化级别原理&lt;/h3&gt;
&lt;p&gt;编译器优化级别控制了LLVM在编译时应用的优化Pass数量和类型。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;什么是优化Pass？&lt;/strong&gt; Pass是指编译器对代码进行的一次特定优化处理过程。LLVM将优化工作分解为多个独立的Pass，每个Pass负责一种特定类型的优化：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;源代码 → 前端解析 → IR（中间表示）→ Pass1 → Pass2 → Pass3 → ... → 优化后的代码 → 机器码
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;常见的优化Pass包括：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pass名称&lt;/th&gt;
&lt;th&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dead Code Elimination&lt;/td&gt;
&lt;td&gt;删除永远不会执行的代码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constant Folding&lt;/td&gt;
&lt;td&gt;编译时计算常量表达式，如&lt;code&gt;3+5&lt;/code&gt;直接变成&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function Inlining&lt;/td&gt;
&lt;td&gt;将函数调用替换为函数体本身&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Loop Unrolling&lt;/td&gt;
&lt;td&gt;展开循环，减少循环控制开销&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Common Subexpression Elimination&lt;/td&gt;
&lt;td&gt;消除重复计算的表达式&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;不同的优化级别启用不同数量和类型的Pass：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Build Settings
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Optimization Level = -Os # 级别：-Os 优化大小（推荐用于Release）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;-O0（无优化）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不应用任何优化Pass，编译速度最快。代码按原样生成，保留所有变量和控制流，便于调试。适用于Debug构建。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-O1（基础优化）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;应用不显著增加编译时间的基础优化，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基本的死代码消除&lt;/li&gt;
&lt;li&gt;简单的常量折叠&lt;/li&gt;
&lt;li&gt;基本块合并&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;死代码消除：&lt;/strong&gt; 死代码消除（Dead Code Elimination）是指编译器自动移除永远不会被执行或执行结果不会被使用的代码。注意：这里的死代码消除是编译阶段的优化，作用于函数内部；而后文提到的Dead Code Stripping是链接阶段的优化，用于移除未被引用的整个函数或类。&lt;/p&gt;
&lt;p&gt;-O1 适合需要一定优化但对编译速度敏感的场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-O2（标准优化）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;应用大多数优化Pass，是性能和体积的平衡点。包括：&lt;/p&gt;</description></item><item><title>包瘦身-资源优化</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E8%B5%84%E6%BA%90%E4%BC%98%E5%8C%96/</link><pubDate>Sat, 02 May 2026 22:32:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E8%B5%84%E6%BA%90%E4%BC%98%E5%8C%96/</guid><description>&lt;p&gt;资源文件通常占iOS应用包体积的40-60%，是优化的重要方向。本文介绍各种资源优化手段及其原理。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="图片优化"&gt;图片优化&lt;/h2&gt;
&lt;h3 id="asset-catalog原理"&gt;Asset Catalog原理&lt;/h3&gt;
&lt;p&gt;Asset Catalog（&lt;code&gt;.xcassets&lt;/code&gt;）编译后生成&lt;code&gt;Assets.car&lt;/code&gt;文件，这是一个优化过的资源容器：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;编译前：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Images.xcassets/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── AppIcon.appiconset/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── icon-60@2x.png
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── icon-60@3x.png
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Logo.imageset/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── logo@2x.png
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── logo@3x.png
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── Contents.json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;编译后：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Assets.car ← 单一文件，包含所有资源
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Assets.car的优化&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图片被重新编码，使用更高效的压缩&lt;/li&gt;
&lt;li&gt;支持App Thinning，按设备分发&lt;/li&gt;
&lt;li&gt;运行时高效加载（内存映射）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以使用&lt;code&gt;assetutil&lt;/code&gt;查看Assets.car内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assetutil --info Assets.car
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="图片压缩原理"&gt;图片压缩原理&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;PNG压缩原理&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;PNG使用DEFLATE无损压缩，但可以通过以下方式减小体积：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;原始PNG结构：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;┌────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ PNG Header │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ IHDR (图像信息) │
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ IDAT (图像数据) │ ← 压缩的像素数据
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├────────────────┤
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ 辅助chunks │ ← 可以移除
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;优化方向：
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1. 移除不必要的chunks（如tEXt、iTXt）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2. 优化DEFLATE压缩参数
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;3. 减少颜色数量（有损）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;4. 使用更高效的滤波器
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;有损压缩原理（pngquant）&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>包瘦身</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E5%8C%85%E7%98%A6%E8%BA%AB/</link><pubDate>Sat, 02 May 2026 22:32:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/size-%E5%8C%85%E7%98%A6%E8%BA%AB/</guid><description>&lt;p&gt;包体积（IPA大小）是iOS应用的重要质量指标。App Store对蜂窝网络下载有200MB的提示阈值，超过这个大小会弹窗询问用户是否使用流量下载（iOS 13之前是强制要求Wi-Fi）。这个弹窗会增加用户的决策成本，影响下载转化率。因此，包体积优化对于用户获取和留存都有重要影响。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="包格式介绍"&gt;包格式介绍&lt;/h2&gt;
&lt;p&gt;iOS开发中常见的包格式有三种：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;格式&lt;/th&gt;
&lt;th&gt;扩展名&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;.app&lt;/td&gt;
&lt;td&gt;目录&lt;/td&gt;
&lt;td&gt;应用程序包，是一个包含可执行文件和资源的目录结构&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.xcarchive&lt;/td&gt;
&lt;td&gt;目录&lt;/td&gt;
&lt;td&gt;Xcode归档包，包含.app、dSYM符号文件、构建信息等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.ipa&lt;/td&gt;
&lt;td&gt;文件&lt;/td&gt;
&lt;td&gt;安装包，本质是ZIP压缩的.app，用于分发和安装&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;日常使用场景&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;开发调试&lt;/strong&gt;：Xcode直接将&lt;code&gt;.app&lt;/code&gt;安装到模拟器或真机&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;测试分发&lt;/strong&gt;：使用&lt;code&gt;.ipa&lt;/code&gt;通过TestFlight、蒲公英、fir.im等平台分发给测试人员&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;App Store上架&lt;/strong&gt;：通过Xcode或Transporter将&lt;code&gt;.xcarchive&lt;/code&gt;导出并上传到App Store Connect（实际上传的是从xcarchive导出的IPA或直接上传xcarchive中的内容）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="appapplication-bundle"&gt;.app（Application Bundle）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.app&lt;/code&gt;是macOS/iOS应用的标准格式，实际上是一个目录（Finder中显示为单个文件）。包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可执行文件（Mach-O格式）&lt;/li&gt;
&lt;li&gt;Info.plist配置文件&lt;/li&gt;
&lt;li&gt;资源文件（图片、音频、本地化文件等）&lt;/li&gt;
&lt;li&gt;Frameworks目录（动态库）&lt;/li&gt;
&lt;li&gt;PlugIns目录（App Extension）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="xcarchivexcode-archive"&gt;.xcarchive（Xcode Archive）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.xcarchive&lt;/code&gt;是Xcode的归档格式，用于保存完整的构建产物。目录结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;YourApp.xcarchive/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Products/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── Applications/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── YourApp.app # 应用程序包
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── dSYMs/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── YourApp.app.dSYM # 符号文件（用于崩溃解析）
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Info.plist
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── SCMBlueprint/ # 源码管理信息
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;主要用途：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;保存dSYM符号文件，用于线上崩溃日志符号化&lt;/li&gt;
&lt;li&gt;导出不同分发渠道的IPA（App Store、Ad Hoc、Enterprise）&lt;/li&gt;
&lt;li&gt;上传到App Store Connect&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ipaios-app-store-package"&gt;.ipa（iOS App Store Package）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.ipa&lt;/code&gt;是iOS应用的安装包格式，本质是一个ZIP压缩文件。结构：&lt;/p&gt;</description></item></channel></rss>