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

Joh*_*nne 3 objective-c ios

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

Dyld错误消息:

  Symbol not found: _OBJC_CLASS_$_NSJSONSerialization
  Expected in: /System/Library/Frameworks/Foundation.framework/Foundation
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

该应用程序几乎立即崩溃,让我觉得可能根本没有调用我的代码,这是我的存档构建设置可能在这里不正确?

非常感谢您提供帮助的任何时间!

Bra*_*son 11

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

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

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