我正在努力创建一个我希望销售的iOS静态库。我已经完成了初始构建的步骤,并生成了.a / .h输出。
当我在单独的项目中包含这些文件时,我看不到任何方法来浏览.a文件中的内容。
然而,当我的库中的一行代码崩溃应用程序时(就像我说的那样,它仍在开发中),调试器向我显示整个类(.m)文件。怎么了?
我真的不明白静态库的内容是什么,我不确定我是否为模拟器和设备编译了该版本。这可能与它有关吗?如果是这样,有人可以解释原因吗?
感谢!!!
答案 0 :(得分:18)
别担心,您的源代码不包含在存档(.a)文件中。
Xcode非常智能,可以根据文件中嵌入的调试信息在您的计算机上查找源代码文件。如果使用“Release”配置构建库(或以其他方式修改构建设置以便剥离调试符号)并且在计算机上的任何位置都没有源,则开发人员将不得不求助于他们对x86或ARM的了解汇编以确定代码的工作方式。
顺便说一下:
由于在运行时处理了很多Objective-C,因此库中会显示很多类名和选择器名。这就是它的工作原理。您可以尝试对其进行模糊处理,但我认为您花时间编写更有用的代码来进行销售。
如果你想为人们提供一个用于iOS开发的静态库,你需要为iOS模拟器(x86)和iOS设备(arm)构建版本,然后使用lipo
来组合他们进入一个胖胖的静态库。以不同的方式搜索“lipo xcode fat static library”。有些解决方案比其他解决方案更复杂。
答案 1 :(得分:4)
我有同样的问题。 @benzado对他提到的内容是正确的。但我不得不剥离调试符号来解决问题。为此,我必须在构建之前更改项目库的构建设置,如下所述。
选择目标并转到构建设置。设置
要查看这些内容,请参阅Apple Build Setting Reference
使用" Release"构建库。组态。这对我有用。
答案 2 :(得分:0)
如果你的计算机上有一个带有所有.m文件的静态库项目,那么在xCode中进行调试时,该库的每个副本(.a文件)都将用.m文件进行符号化。
xCode不会通过您的所有磁盘搜索相应的.m文件。它知道原始项目的地方。因此,如果您只分发库,它会完全隐藏您的初始代码。
要确保您可以在某个新项目中复制您的库,然后清除库项目中的.m文件。 从这时起,任何调试库方法的尝试都会在屏幕上显示空文件。