我用Xcode6 Beta 2编写了一个Swift应用程序,使用CFNetwork类(如NSURLRequest
和NSHTTPURLResponse
)进行一些联网。
该应用程序在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类会导致应用程序在启动时崩溃。
这是iOS 8 SDK的一个已知bug。作为一种解决方案,在项目设置中链接到的框架列表中,将Foundation.framework 移动到 CFNetwork.framework之前。
对我来说,在CFNetwork.framework之前移动Foundation.framework是行不通的。我需要关闭并重新打开该项目的工作。
我能够通过创建一个新项目并复制我所有的类和资产来解决这个问题。不幸的是,我找不到问题的真正根源是什么。
任何替代解决方案都非常感谢!
Moving Foundation.framework没有帮助,所以经过进一步的调查,进一步的方法帮助了我。
我可以通过添加main来解决这个问题。m文件在构建阶段->编译源代码
显然它找不到主。m文件。