基于swift的应用程序能在OS X 10.9 (Mavericks)/iOS 7及更低版本上运行吗?

例如,我有一台运行OS X 10.8 (Mountain Lion)的机器,我想知道我用Swift写的应用程序是否能在它上面运行。

或者我应该有什么创建一个Swift应用程序使用Mac OS?


当前回答

Swift代码可以部署在OS X 10.9和iOS 7.0上。在较旧的操作系统版本上,它通常会在启动时崩溃。

其他回答

这是我从apple Swift博客上读到的一篇文章,可能会有帮助:

应用程序兼容性:

如果你写了一个Swift应用程序,你可以相信你的应用程序将来会工作得很好。事实上,你可以用同样的应用程序回到OS X Mavericks或iOS 7。这是可能的,因为Xcode在你的应用程序包中嵌入了一个小的Swift运行时库。因为这个库是嵌入式的,所以你的应用程序使用了一个一致的Swift版本,可以在过去、现在和未来的操作系统版本上运行。

二进制兼容性和框架:

在确保应用程序的运行时兼容性的同时,Swift语言本身将继续发展,二进制接口也将发生变化。为了安全起见,应用程序的所有组件都应该使用相同版本的Xcode和Swift编译器来构建,以确保它们能够协同工作。

This means that frameworks need to be managed carefully. For instance, if your project uses frameworks to share code with an embedded extension, you will want to build the frameworks, app, and extensions together. It would be dangerous to rely upon binary frameworks that use Swift — especially from third parties. As Swift changes, those frameworks will be incompatible with the rest of your app. When the binary interface stabilizes in a year or two, the Swift runtime will become part of the host OS and this limitation will no longer exist.

正如Beta 4发布说明所述,Swift应用程序支持iOS 7及以上版本。iOS 6.0, 6.1, 7.0, 7.1, 8.0在Xcode 6 Beta

Swift应用程序支持OS X 10.9及以上平台。“部署目标”中的OS X 10.4 ~ 10.10。我已经在目标10.5到10.10上进行了测试,并在10.9.3上运行

Swift使用与Objective-C相同的运行时,甚至可以在同一个应用程序中与Objective-C共存(根据WWDC 2014的主题)。

这将需要使用Xcode 6和新的SDK进行检查/验证,以找到最终答案。

我刚刚为你测试了一下,Swift应用程序编译成标准二进制文件,可以在OS X 10.9和iOS 7上运行。


简单的Swift应用程序用于测试:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var controller = UIViewController()
    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.redColor()
    controller.view = view

    var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "I'am a test label"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}

说到Swift框架。 截至目前,在Xcode 6.1.1 (6A2008a)版本中,如果Swift框架针对iOS 7.1,链接器报告警告

ld: warning: embedded dylibs/frameworks only run on iOS 8 or later.

并且应用程序无法提交到AppStore。检查这个问题:Lint阻止动态库和框架在iOS 7中传递