隐藏静态库中的代码(iOS Obj-C)

mbm*_*414 10 xcode static objective-c ios

我正在努力创建一个我希望销售的iOS静态库.我已经完成了初始构建的步骤并生成了.a/.h输出.

当我将这些文件包含在一个单独的项目中时,我看不到任何方法来浏览.a文件中的内容.

但是,当我的库中的一行代码崩溃应用程序时(就像我说的那样,它仍处于开发阶段),调试器向我显示整个类(.m)文件.怎么了?

我真的不明白静态库的内容是什么,我不确定我是否为模拟器和设备编译了该版本.这可能与它有关吗?如果是这样,有人可以解释原因吗?

谢谢!!!

ben*_*ado 18

别担心,您的源代码不包含在存档(.a)文件中.

Xcode非常智能,可以根据文件中嵌入的调试信息在您的计算机上查找源代码文件.如果使用"Release"配置构建库(或以其他方式修改构建设置以便剥离调试符号)并且在计算机上的任何位置都没有源,则开发人员将不得不求助于他们对x86或ARM的了解汇编以确定代码的工作方式.

顺便说说:

  • 由于在运行时处理了大量的Objective-C,因此在库中可以看到许多类名和选择器名.这就是它的工作原理.您可以尝试对其进行模糊处理,但我认为您花时间编写更有用的代码来进行销售.

  • 如果你想为人们提供一个用于iOS开发的静态库,你需要为iOS模拟器(x86)和iOS设备(arm)构建版本,然后使用lipo它们将它们组合成一个胖的静态库.以不同的方式搜索"lipo xcode fat static library".有些解决方案比其他解决方案更复杂.


Om *_*tel 5

我遇到过同样的问题。@benzado 关于他提到的内容是正确的。但我不得不剥离调试符号来解决这个问题。为此,我必须在构建之前更改项目库的构建设置,如下所述。

选择您的目标并转到Build Settings。放

  1. '在复制期间去除调试符号'为YES
  2. '调试信息格式'到'带有dSYM文件DWARF '
  3. '生成调试符号'到''
  4. '默认隐藏符号'到''

要了解它们的用途,请参阅Apple 构建设置参考

并使用“发布”配置构建库。这对我有用。