5

我用 Xcode6 Beta 2 编写了一个 Swift 应用程序,它使用 CFNetwork 类(例如NSURLRequestNSHTTPURLResponse.

该应用程序在 iOS 8 上运行良好,但当我尝试在 iOS 7 设备或运行 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 的 DerivedData 并没有解决问题。

更新:

这是导致崩溃的代码:

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 类都会导致应用程序在启动期间崩溃。

4

4 回答 4

12

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

于 2014-07-02T22:21:28.147 回答
2

对我来说,在 CFNetwork.framework 之前移动 Foundation.framework 是行不通的。我需要关闭并重新打开该项目才能使其正常工作。

于 2014-10-29T23:15:45.980 回答
0

我能够通过创建一个新项目并在那里复制我所有的类和资产来解决这个问题。不幸的是,我无法找出问题的实际根源是什么。

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

于 2014-07-02T17:39:43.113 回答
0

移动 Foundation.framework 无济于事,因此在进一步调查后,进一步的方法对我有所帮助。

我能够通过在 Build Phases -> Compile Sources 添加 main.m 文件来解决问题

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

于 2015-07-21T07:17:49.670 回答