我们可以在部署目标小于 iOS 7 的应用程序中集成 swift 的代码吗?

Posted

技术标签:

【中文标题】我们可以在部署目标小于 iOS 7 的应用程序中集成 swift 的代码吗?【英文标题】:Can we integrate the code of swift in applications having deployment target less than iOS 7? 【发布时间】:2014-06-04 12:48:04 【问题描述】:

由于 Swift 支持与目标 c 的混合匹配,那么我们是否可以使用它来构建部署目标小于 ios 7 的应用程序。

来自Swift Prerelease Documentation 在基本设置部分我读到的是:

Swift is designed to provide seamless compatibility with Cocoa and Objective-C. You can use Objective-C APIs
(ranging from system frameworksto your own custom code) in Swift, and you can use Swift APIsin Objective-C.
This compatibility makes Swift an easy, convenient, and powerful tool to integrate into your Cocoa app
development workflow.
This guide covers three important aspects of this compatibility that you can use to your advantage when
developing Cocoa apps:

 ● Interoperability lets you interface between Swift and Objective-C code, allowing you to use Swift classes
in Objective-C and to take advantage of familiar Cocoa classes, patterns, and practices when writing Swift
code.

 ● Mix and match allows you to create mixed-language apps containing both Swift and Objective-C files that
can communicate with each other.
 ● Migration from existing Objective-C code to Swift is made easy with interoperability and mix and match,
making it possible to replace parts of your Objective-C apps with the latest Swift features.

所以读完这篇文章后,我想到的问题是

    我们可以在我们当前工作的应用程序中使用 swift 在。 如果答案是否定的,那么它将与上述矛盾 解释。

【问题讨论】:

【参考方案1】:

更新 - 根据 Xcode 6 Beta 4

iOS 7 和 OS X 10.9 最低部署目标

Swift 编译器和 Xcode 现在强制实施 iOS 7 或 OS X 的最低部署目标 小牛队。设置较早的部署目标会导致构建失败。

From Xcode 6 release note

所以我之前的回答(如下所示)将不适用于任何进一步的快速开发。 Swift 将不再适用于 iOS6 及更低版本


可以。我已经在我的iOS6 device 中测试了一个完全用Swift 编写的简单应用程序,它运行良好。正如苹果所说,Swift 代码与 ObjectiveC 代码是二进制兼容的。它使用相同的编译器和运行时来创建二进制文件。

因此,如果您不使用作为 iOS8 SDK 的一部分添加的任何新 API 或某些 swift 特定的 api(相应的 api 不适用于 ObjectiveC),您的应用程序将在 iOS6+ 上无缝运行(经过测试并正常运行) 甚至 iOS5(未测试)。 swift 中的大多数 API 只是现有 ObjectiveC api 的替换。实际上它们在二进制中是相同的。


【讨论】:

我可以确认 iOS 6 确实可以作为部署目标(目前),但 iOS 5 失败并出现有关 Swift 库的错误。【参考方案2】:

我不确定,但是 YES 如果您要签入 Project-->Target-->General-->Deplyment Info 以选择部署目标,请迅速支持低版本的 ios 到 Xcode Beta 6.0,6.1,7.0,7.1 和 8.0

所以我认为是的 swift 支持较低版本。

我只是测试了在 Xcode6 中使用 swift 语言选择创建的演示。然后我用部署目标 6 将这个项目打开到 Xcode5 并运行它意味着也可以使用较低版本。

这是 swift 项目在 xcode5 中使用 ios6.1 模拟器运行的屏幕截图:

这里也有演示http://www.filedropper.com/demo_5

【讨论】:

其实it doesn't。仅仅因为存在该选项并不意味着它会编译。 我只是测试了在 Xcode6 中使用 swift 语言选择创建的演示。然后我用部署目标 6 将这个项目打开到 Xcode5,运行它意味着它可以工作。 您是否尝试过以 6.0 的部署目标运行它? @NitinGohel 那么这是否意味着我们应该使用 xcode 6 并且我们将能够为部署目标小于 ios 7 或 8 的应用程序编写代码? 我刚刚在 xcode6 中获得了选项,该选项在 ios6 部署下拉列表中出现。如果 swift 不允许少于 ios7 那么为什么会出现该下拉菜单。【参考方案3】:

是的,你可以。我已经在我的 iOS6 设备上测试了一个完全用 Swift 编写的简单应用程序,它运行良好。正如苹果所说,Swift 代码与 ObjectiveC 代码是二进制兼容的。它使用相同的编译器和运行时来创建二进制文件。

因此,如果您没有使用作为 iOS8 SDK 的一部分添加的任何新 API 或某些 swift 特定的 api(相应的 api 不适用于 ObjectiveC),您的应用程序将在 iOS6+(已测试并正常工作)甚至 iOS5(未测试)上无缝运行)。 swift 中的大多数 API 只是现有 ObjectiveC api 的替换。实际上它们在二进制中是相同的。

【讨论】:

【参考方案4】:

不,只有 iOS 7+ 和 OS X 10.9+。

【讨论】:

不是:你可能可以在较低的操作系统上使用 swot 代码,就像你可以在 iOS 4 上使用 ARC 一样,当苹果说 min 为 5 但它不受办公室支持时 能否提供官方参考?我的客户要求提供官方参考:(【参考方案5】:

您可以像这样从 Objective-C 导入和运行 swift 代码:

#import “ProductModuleName-Swift.h”

MySwiftClass *swiftObject = [[MySwiftClass alloc] init];
[swiftObject swiftMethod];

您可以使用this gist 查看 iOS 版本号,并且仅在版本 >= 7.0 时才运行 swift 代码。

【讨论】:

【参考方案6】:

是的,使用 Swift 语言的 Xcode 6 的最低部署目标是 iOS 6.0

【讨论】:

你有什么证据证明这一点,因为 Apple 指定 swift 适用于 iOS 7 及更高版本。【参考方案7】:

是的,你可以。您使用哪种语言编写代码并不重要。最后重要的是编译器和架构。因此,您绝对应该能够将它们部署到低于 7.0 的操作系统版本

【讨论】:

以上是关于我们可以在部署目标小于 iOS 7 的应用程序中集成 swift 的代码吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6 + iOS 8 SDK 但部署在 iOS 7 (UIWebKit & WKWebKit)

我们可以在企业级 iOS 应用程序中集成 AFNetworking

在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架

Xcode 5部署目标仅限于iOS 7

iOS 6 vs 7 外观构建设置

Apple Healthkit 和 iOS 7 部署目标