dyld: 符号未找到:_OBJC_CLASS_$_NSHTTPURLResponse

5
我用Xcode6 Beta 2写了一个Swift应用程序,使用CFNetwork类进行一些网络操作,例如NSURLRequestNSHTTPURLResponse
该应用程序在iOS 8上运行良好,但是当我尝试在运行iOS 7的设备或模拟器上运行它时,启动应用程序时会出现以下错误:
dyld: Symbol not found: _OBJC_CLASS_$_NSHTTPURLResponse
  Referenced from: /Users/patrick/Library/Developer/CoreSimulator/Devices/B0A61F43-A67C-4803-8F5D-77C3972107BE/data/Applications/E0C7C89F-9EEE-4893-BE5B-FCC224F2855D/CheckYourWeather.app/CheckYourWeather
  Expected in: /Applications/Xcode6-Beta2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/Frameworks/CFNetwork.framework/CFNetwork
 in /Users/patrick/Library/Developer/CoreSimulator/Devices/B0A61F43-A67C-4803-8F5D-77C3972107BE/data/Applications/E0C7C89F-9EEE-4893-BE5B-FCC224F2855D/CheckYourWeather.app/CheckYourWeather

我已经进行了一些研究,发现它是一个链接问题。尽管如此,我知道我使用的类在iOS 7中已经可用。
我还尝试将CFNetwork.framework添加到项目设置中的框架,并将其设置为可选项,但这只会导致应用程序在运行时崩溃。
对我来说令人困惑的是:我编写了一个测试应用程序,只需将主应用程序中使用的代码粘贴进去,就可以正常工作。因此,代码可能不是问题所在。
从模拟器/设备中删除应用程序,对项目进行清理,以及删除Xcode的派生数据都没有解决问题。
更新:
以下是导致崩溃的代码:
extension NSURLRequest {
    class func plainPostRequest(url: NSURL, httpBody: String) -> NSURLRequest {
        let urlRequest = NSMutableURLRequest(URL: url)
        urlRequest.HTTPMethod = "POST"
        urlRequest.HTTPBody = httpBody.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
        urlRequest.setValue("text/plain", forHTTPHeaderField: "Content-Type")

        return urlRequest
    }
}

但这只是一个例子。任何使用CFNetwork类的操作都会导致应用程序在启动时崩溃。

展示导致此错误的代码。 - Joride
尝试在目标 > 通用 > 嵌入式二进制文件中添加CFNetwork.framework。 - vladof81
我添加了它 - 没有改变任何东西。 - Patrick
你能发更多的崩溃日志吗?另外,你尝试过符号化崩溃吗?可能会在那里得到一些信息。 - vladof81
应用在iOS 8模拟器上崩溃了吗?(另外,我不会将框架设置为可选的,这不是一个解决方案) - vladof81
显示剩余3条评论
4个回答

12

这是iOS 8 SDK已知的一个bug。作为解决方法,在项目设置中将Foundation.framework 放在CFNetwork.framework之前,以链接到框架列表中。


没有帮助。也许还有其他建议? - iOS Dev

2

对我来说,仅仅将 Foundation.framework 移动到 CFNetwork.framework 之前是不起作用的。我需要关闭并重新打开项目才能使其生效。


0

我通过创建一个新项目并将所有类和资产复制到那里来解决了问题。不幸的是,我无法找出问题的实际来源。

非常感谢任何替代解决方案!


我会将其归咎于beta软件(Xcode)结合beta语言(Swift) :) 。 - Joride

0

移动Foundation.framework并不能解决问题,经过进一步调查,我找到了更好的方法。

我通过在“Build Phases -> Compile Sources”中添加main.m文件来解决了这个问题。

显然它找不到main.m文件。


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