Xcode缩小ipa包大小及symbols设置等

其实被这个问题困扰了好久,不过秉承着三分钟热度的新年新气象,还是要多弄懂一点(⊙_⊙)ゞ

Symbols是什么东西呢?虽然我对它没有深入的了解,但是大概知道它的作用。摘抄《深入理解计算机系统》里的一些描述:

一个典型的ELF可重定位目标文件包含下面几个节:
... ...
.symtab:一个符号表,它存放在程序中定义和引用的函数和全局变量信息。一些程序员错误地认为必须通过-g选项来编译程序才能得到符号表信息。实际上,每个可重定位目标文件在.symtab中都有一张符号表。然而,和编译器中的符号表不同,.symtab符号表不包含局部变量的条目。
... ...
.debug:一个调试符号表,其条目是程序中定义的局部变量和类型定义,程序中定义和引用的全局变量,以及原始的C源文件。只有以-g选项调用编译驱动程序时才会得到这张表。
... ...

为了构造可执行文件,链接器必须完成两个主要任务:

  • 符号解析(symbol resolution)。目标文件定义和引用符号。符号解析的目的是将每个符号引用刚好和一个符号定义联系起来。
  • 重定位(relocation)。编译器和汇编器生成从地址0开始的代码和数据节。链接器通过把每个符号定义与一个存储器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节。

Objective-C有一些自己的生成符号的规则,比如文档中有提到:

The dynamic nature of Objective-C complicates things slightly. Because the code that implements a method is not determined until the method is actually called, Objective-C does not define linker symbols for methods. Linker symbols are only defined for classes.

Objective-C不会为方法定义链接符号,只会为类定义链接符号。

可以在终端中用nm命令查看一个可重定位文件或可执行文件的符号表,其中加上-a参数可以显示包括调试符号在内的所有符号。

合理的选择与symbols有关的设置选项,可以缩减app的大小,一定程度上能阻碍与源代码有关的信息被攻击者获得。Xcode的build setting中,有不少与symbols有关,现在我来依次试验这几个设置选项,了解一下它们的具体作用。

刚开始的时候,我使用Xcode7.2.1新建了一个工程,以下试验均在run和DEBUG模式下进行。


Generate Debug Symbols [GCC_GENERATE_DEBUGGING_SYMBOLS]


在Xcode7.2.1中,Generate Debug Symbols这个设置在DEBUG和RELEASE下均默认为YES

官方文档对这个设置的说明:

Enables or disables generation of debug symbols. When debug symbols are enabled, the level of detail can be controlled by the build 'Level of Debug Symbols' setting. 

调试符号是在编译时生成的。在Xcode中查看构建过程,可以发现,当Generate Debug Symbols选项设置为YES时,每个源文件在编译成.o文件时,编译参数多了-g-gmodules两项。但链接等其他的过程没有变化。

Clang文档对-g的描述是:

Generate complete debug info.

Generate Debug Symbols设置为YES时,编译产生的.o文件会大一些,当然最终生成的可执行文件也大一些。

Generate Debug Symbols设置为NO的时候,在Xcode中设置的断点不会中断。但是在程序中打印[NSThread callStackSymbols],依然可以看到类名和方法名,比如:

** 0   XSQSymbolsDemo                      0x00000001000667f4 -[ViewController viewDidLoad] + 100**

在程序崩溃时,也可以得到带有类名和方法名的函数调用栈


现在把

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xcode 是苹果公司开发的集成开发环境(IDE),用于开发iOS、macOS和watchOS等操作系统的应用程序。上传IPA文件是指将已经完成的应用程序打IPA文件,并通过Xcode上传到App Store上。 首先,我们需要确保应用程序的开发者账号和相关证书已经配置好,并且应用程序的Bundle Identifier与配置文件中的一致。接下来,我们可以按照以下步骤来上传IPA文件: 1. 打开Xcode,选择菜单栏中的“Product”(产品)选项,然后选择“Archive”(归档)。 2. Xcode将会对项目进行构建和打,并且显示Archive Manager(归档管理器)界面。 3. 在Archive Manager界面中,选择你想要上传的归档文件,然后点击右侧的“Upload to App Store”(上传到App Store)按钮。 4. Xcode将会启动Application Loader(应用程序加载器),并弹出一个对话框,要求你提供App Store Connect(应用商店连接)的凭据信息。 5. 输入你的苹果开发者账号的用户名和密码,并选择相关的Team和Bundle Identifier。 6. 上传过程可能需要一些时间,具体时间根据你的网络连接速度和IPA文件的大小而定。 7. 上传完成后,Xcode会显示上传成功的信息,并在App Store Connect中创建新的应用版本。 总结起来,通过Xcode上传IPA文件是一个相对简单的过程,只需确保开发者账号的配置正确,并按照指引逐步操作即可完成上传。这样就可以将已经完成的应用程序上传到App Store上供用户下载和使用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值