Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS应用程序二进制文件在Xcode 5中的大小增加了一倍_Ios_Objective C_Xcode_Llvm Clang - Fatal编程技术网

iOS应用程序二进制文件在Xcode 5中的大小增加了一倍

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

我的iOS应用程序需要非常小,才能在低手机接收和无wi-fi的活动中下载。我的应用程序在应用商店中的容量是1.8MB,我花了很长时间才把它弄到这么小。二进制文件本身(在.ipa文件中)未压缩1.6MB

我用Xcode 5构建了我的应用程序的最新版本,突然二进制文件本身就大了很多。应用商店中的应用程序容量为3.9 MB。二进制文件本身是3.4 MB未压缩的

我没有更改构建设置,也没有更改目标(仅限armv7和armv7)。代码主要是C++,但也有Obj-C.<
为什么会发生这种情况?

尝试仅为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。感谢您的建议,但我已在原始问题中阐述了您的两个想法。