iOS应用程序二进制文件在Xcode 5中的大小增加了一倍
我的iOS应用程序需要非常小,才能在低手机接收和无wi-fi的活动中下载。我的应用程序在应用商店中的容量是1.8MB,我花了很长时间才把它弄到这么小。二进制文件本身(在.ipa文件中)未压缩1.6MB 我用Xcode 5构建了我的应用程序的最新版本,突然二进制文件本身就大了很多。应用商店中的应用程序容量为3.9 MB。二进制文件本身是3.4 MB未压缩的 我没有更改构建设置,也没有更改目标(仅限armv7和armv7)。代码主要是C++,但也有Obj-C.<iOS应用程序二进制文件在Xcode 5中的大小增加了一倍,ios,objective-c,xcode,llvm-clang,Ios,Objective C,Xcode,Llvm Clang,我的iOS应用程序需要非常小,才能在低手机接收和无wi-fi的活动中下载。我的应用程序在应用商店中的容量是1.8MB,我花了很长时间才把它弄到这么小。二进制文件本身(在.ipa文件中)未压缩1.6MB 我用Xcode 5构建了我的应用程序的最新版本,突然二进制文件本身就大了很多。应用商店中的应用程序容量为3.9 MB。二进制文件本身是3.4 MB未压缩的 我没有更改构建设置,也没有更改目标(仅限armv7和armv7)。代码主要是C++,但也有Obj-C.< 为什么会发生这种情况?尝试仅为arm
为什么会发生这种情况?尝试仅为armv7体系结构构建它。我在一个项目中工作,应用程序大小是一个优先事项,我们将应用程序降低到50 MB截止值以下的唯一方法是删除ARMV7。我猜应用程序现在已经为32位和64位(arm64)构建。您可以验证这一点
通过运行
file/path/to/TheApp.app/TheApp
。有关新架构的更多信息,请参见苹果的“”。也请查看内部内容,并比较两个ipa文件(旧文件和新文件),只需将后缀更改为.zip,将其解压以列出内容,也许在可执行二进制文件上运行lipo命令,看看包含了多少架构。升级到Xcode 5后,我的游戏也遇到了同样的问题。使用file
和otool
我得到以下结果:
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
> 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构建
> 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
> 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构建fat(既有
armv7
又有armv7s
)二进制文件,请转到目标的构建设置,并将架构条目显式设置为仅armv7
(默认值为$(ARCHS_标准)
).我首先对.app捆绑包进行逐文件比较,看看添加了什么或增加了什么。@BergQuester感谢您的建议–是二进制文件本身增加了。我正在尝试各种方法来区分这两个二进制文件(hex-diff、strings-diff),但没有什么能让我感到惊讶。苹果的文档中说,“未来版本的Xcode将允许您创建一个应用程序,支持iOS 6及更高版本上的32位运行时,并支持iOS 7上的64位运行时。”也许这会对我有所帮助,现在限制已提高到100 MB。仅供参考,该限制仅适用于蜂窝网络,在wifi网络上没有大小限制。不幸的是,没有,正如我在问题中提到的,它仍然是armv7和armv7s。感谢您的建议,但我已在原始问题中阐述了您的两个想法。