2012-04-23 50 views
3

我看到在哪里我的应用程序已经通过一个特设的部署安装了iOS 4.3.5手机这个错误(通过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 5库做出了iOS 4的设备上。

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

如果直接从xcode中运行该应用程序的作品完美的iOS 4.3设备上(即,经由USB电缆连接到显影机的iPhone)。但是,当通过adhoc部署在同一台设备上运行时,我看到了崩溃。

adhoc归档文件是通过Product->Archivexcode 4中构建的,然后使用“分发”按钮创建Ad-Hoc部署.ipa文件。

的应用程序崩溃,几乎瞬间,让我觉得,也许没有我的代码被称为可言的,它是我的档案建立的设置,可能是不正确的吗?

非常感谢您提前帮助您!

+1

http://stackoverflow.com/questions/8342411/getting-dyld-symbol-not-found-objc-class-nsjsonserialization-on-ios4 – rishi 2012-04-23 13:37:24

+0

主项目和静态项目的部署目标是4.3。此外,iOS 5设备库不会被调用/使用。 – 2012-04-23 13:47:57

+1

@RIP - 这实际上是一个不同的,比这里描述的更微妙的问题。正如我在我的回答中所描述的那样,正常的基于类的弱连接在静态库和构建档案或分发中失败。 – 2012-04-23 16:40:04

回答

11

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

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

这应该清理你的弱链接的问题。我正在进一步调查,看看是否有我缺少的构建设置,或者这是否是链接器错误。

+0

布拉德现货。我弱化了基金会的框架,它工作得很好。非常感谢您的帮助! – 2012-04-23 21:13:26

+0

非常感谢。 :) – 2013-03-12 06:18:48