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

3
我看到了一个错误,出现在已经通过 ad hoc 部署(通过 HTTP 下载)安装到 iOS 4.3.5 手机上的应用程序中:
动态链接器错误信息:
  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归档是通过xcode 4中的Product-> Archive构建的,然后我使用'Distribute'按钮创建Ad-Hoc部署.ipa文件。
应用程序几乎立即崩溃,让我认为也许根本没有调用我的任何代码,而是我的Archive构建设置可能不正确?非常感谢您提前花费的任何时间帮助!

1
可能是重复的问题,参考链接:https://dev59.com/7F3Va4cB1Zd3GeqPENVs - rishi
主项目和静态项目的部署目标均为4.3。此外,在iOS 4.3设备上未调用/使用iOS 5库。 - John Dunne
1
@RIP - 这实际上是一个比那里描述的更微妙的问题。正如我在回答中所描述的,基于类的弱链接在使用静态库并构建归档或分发时会失败。 - Brad Larson
@BradLarson - 是的,最初看起来似乎是一样的。谢谢。 - rishi
1个回答

11

这个问题看起来和我在这个答案中遇到的问题完全一样。在处理静态库的构建和归档时,弱链接的处理方式似乎与直接通过Xcode安装有些不同。后者似乎能正确处理类和函数级别的弱链接(自Xcode 4.3以来)。但是,在归档包含静态库的项目时,该弱链接没有被正确使用。

在我的情况下,我需要手动为使用我的静态库的应用程序中的有问题的iOS框架进行弱链接,以便在构建用于Ad Hoc或App Store分发时它能够正常工作。要做到这一点,请转到您项目的构建设置,进入“Build Phases”选项卡,并展开“Link Binary With Libraries”分组。找到有问题的框架(在我的情况下是CoreVideo.framework,但听起来您可能需要对Foundation.framework执行此操作),并将其从Required更改为Optional。

这应该解决您的弱链接问题。我正在进一步调查,看看是否有我的构建设置或这是一个链接器错误。


非常准确,Brad。我使用了弱链接Foundation.framework,它完美地解决了问题。非常感谢你的帮助! - John Dunne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接