2

我的 iOS 应用程序需要非常小才能在手机信号接收率低且没有 Wi-Fi 的活动中下载。我的应用在 App Store 上曾经是 1.8 MB,我花了很长时间才把它弄得这么小。二进制文件本身(在 .ipa 文件中)是 1.6 MB 未压缩。

我在 Xcode 5 中构建了我的应用程序的最新版本,突然之间,二进制文件本身变得更大了。该应用程序在 App Store 上为 3.9 MB。二进制文件本身是 3.4 MB 未压缩。

我没有更改我的构建设置,也没有更改我的目标(仅限 armv7 和 armv7s)。代码主要是 C++,但也有 Obj-C。

为什么会发生这种情况?

4

4 回答 4

2

尝试仅为 armv7 架构构建它。我参与了一个优先考虑应用程序大小的项目,我们将应用程序降低到 50 MB 截止值以下的唯一方法是删除 armv7s。

于 2013-09-19T21:30:41.530 回答
2

我猜这个应用程序现在已经为 32 位和 64 位 (arm64) 构建了。您可以通过运行来验证这一点file /path/to/TheApp.app/TheApp。另请参阅 Apple 的“<a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Introduction/Introduction.html" rel="nofollow">64 位 Cocoa 转换指南触摸“以获取有关新架构的更多信息。

于 2013-09-19T21:46:04.350 回答
2

升级到 Xcode 5 后,我的游戏遇到了同样的问题。使用fileotool我得到以下结果:

Xcode 4 构建

> file Game.app/Game
Game.app/Game: Mach-O executable arm
> otool -h Game.app/Game
Game.app/Game:
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedface      12          9  0x00           2    29       3332 0x00218085

Xcode 5 构建

> file Game.app/Game
Game.app/Game: Mach-O universal binary with 2 architectures
Game.app/Game (for architecture armv7): Mach-O executable arm
Game.app/Game (for architecture cputype (12) cpusubtype (11)):  Mach-O executable arm
> otool -h Game.app/Game
Game.app/Game (architecture armv7):
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedface      12          9  0x00           2    32       3588 0x00218085
Game.app/Game (architecture armv7s):
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedface      12         11  0x00           2    32       3588 0x00218085

要防止 Xcode 5 构建胖(armv7armv7s)二进制文件,请转到目标的 Build Settings 并将 Architectures 条目明确设置为 only armv7(默认值为$(ARCHS_STANDARD))。

于 2013-10-01T08:43:13.147 回答
0

也可以准确地查看里面的内容并比较 2 个 ipa 文件(旧的与新的),只需将后缀更改为 .zip,解压缩它们以列出内容,或许还可以在可执行二进制文件上运行 lipo 命令以查看包含了多少架构.

于 2013-09-21T07:18:10.510 回答