iOS 4.3.5上静态库中未找到符号错误

时间:2012-04-23 13:33:07

标签: objective-c ios

我在通过临时部署(通过HTTP下载)安装了我的应用的iOS 4.3.5手机上看到此错误:

Dyld错误消息:

  Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
  Expected in: /System/Library/Frameworks/Foundation.framework/Foundation

我在应用中的代码并不会调用iOS 5库,除非已经显示存在类(即if(NSClassFromString(@"NSJSONSerialization")!=nil),因此问题不在于调用iOS 4设备上的iOS 5个库。

应用程序本身包含一个静态库,它是我自己的代码,是NSJSONSerialization引用存在的地方。

如果直接从xcode(即通过USB线连接到开发机器的iPhone)运行,该应用程序可在iOS 4.3设备上完美运行。但是,当通过adhoc部署在同一设备上运行时,我会看到崩溃。

adhoc存档是通过Product->Archive中的xcode 4构建的,然后我使用了' Distribute'按钮,用于创建Ad-Hoc部署.ipa文件。

应用程序几乎立即崩溃,让我觉得可能根本没有调用任何代码,而且我的存档构建设置可能不正确吗?

非常感谢您花时间帮助我们!

1 个答案:

答案 0 :(得分:11)

这听起来像我在this answer遇到的完全相同的问题。在构建和归档处理静态库与通过Xcode直接安装时处理弱链接的方式略有不同。后者似乎应该处理类和功能级弱链接(因为Xcode 4.3)。但是,在归档包含静态库的项目时,弱链接未正确使用。

在我的情况下,我需要使用我的静态库手动弱连接应用程序中有问题的iOS框架,以便在构建ad hoc或App Store分发时使用它。要执行此操作,请转到项目的构建设置,转到“构建阶段”选项卡,然后展开“使用库链接二进制”分组。找到有问题的框架(在我的例子中,它是CoreVideo.framework,但听起来你可能需要为Foundation.framework执行此操作)并将其从Required更改为Optional。

这应该可以解决你的弱连接问题。我正在进一步研究这个问题,看看是否存在我缺少的构建设置,或者这是否是链接器错误。