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

时间:2011-07-13 01:48:35

标签: objective-c ios xcode static

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

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

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

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

感谢!!!

3 个答案:

答案 0 :(得分:18)

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

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

顺便说一下:

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

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

答案 1 :(得分:4)

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

选择目标并转到构建设置。设置

  1. '复制期间 剥离调试符号 '到
  2. ' 调试信息格式 '使用dSYM文件'
  3. 使用 DWARF
  4. ' 生成调试符号 '到' '
  5. ' 默认隐藏的符号 '到' '
  6. 要查看这些内容,请参阅Apple Build Setting Reference

    使用" Release"构建库。组态。这对我有用。

答案 2 :(得分:0)

如果你的计算机上有一个带有所有.m文件的静态库项目,那么在xCode中进行调试时,该库的每个副本(.a文件)都将用.m文件进行符号化。

xCode不会通过您的所有磁盘搜索相应的.m文件。它知道原始项目的地方。因此,如果您只分发库,它会完全隐藏您的初始代码。

要确保您可以在某个新项目中复制您的库,然后清除库项目中的.m文件。 从这时起,任何调试库方法的尝试都会在屏幕上显示空文件。

enter image description here