我用Xcode6 Beta 2编写了一个Swift应用程序,它使用NSURLRequest
和NSHTTPURLResponse
等CFNetwork类进行网络连接。
应用程序适用于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
添加到项目设置中的框架并将其设置为可选,这只会导致App在运行时崩溃。
对我来说令人困惑的部分是:我写了一个测试应用程序,只是将我在主应用程序中使用的代码粘贴到它中,它工作得很好。因此代码可能不是问题。
从模拟器/设备中删除应用程序,清理项目并删除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类都会导致应用程序在启动期间崩溃。
答案 0 :(得分:11)
这是iOS 8 SDK的一个已知错误。作为解决方法,在框架列表中的 CFNetwork.framework之前移动Foundation.framework 以链接到项目设置。
答案 1 :(得分:1)
对我来说,在CFNetwork.framework之前移动Foundation.framework是行不通的。我需要关闭并重新打开项目才能工作。
答案 2 :(得分:0)
我能够通过创建一个新项目并在那里复制我的所有类和资产来解决问题。不幸的是,我无法找出问题的实际来源。
非常感谢任何替代解决方案!
答案 3 :(得分:0)
移动Foundation.framework无济于事,经过进一步调查后,进一步的方法帮助了我。
我能够通过在Build Phases添加main.m文件来解决问题 - >编译来源
显然找不到main.m文件。