我在通过临时部署(通过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文件。
应用程序几乎立即崩溃,让我觉得可能根本没有调用任何代码,而且我的存档构建设置可能不正确吗?
非常感谢您花时间帮助我们!
答案 0 :(得分:11)
这听起来像我在this answer遇到的完全相同的问题。在构建和归档处理静态库与通过Xcode直接安装时处理弱链接的方式略有不同。后者似乎应该处理类和功能级弱链接(因为Xcode 4.3)。但是,在归档包含静态库的项目时,弱链接未正确使用。
在我的情况下,我需要使用我的静态库手动弱连接应用程序中有问题的iOS框架,以便在构建ad hoc或App Store分发时使用它。要执行此操作,请转到项目的构建设置,转到“构建阶段”选项卡,然后展开“使用库链接二进制”分组。找到有问题的框架(在我的例子中,它是CoreVideo.framework,但听起来你可能需要为Foundation.framework执行此操作)并将其从Required更改为Optional。
这应该可以解决你的弱连接问题。我正在进一步研究这个问题,看看是否存在我缺少的构建设置,或者这是否是链接器错误。