近日,苹果公司在 Swift 官方网站上正式发布首批列入源代码兼容性开源项目的清单。源代码兼容性问题是未来 Swift 新版本的重要目标。为了实现这个目标,(苹果公司的 Swift 编译器团队)建立了一个开放社区公有的源代码测试套件,用于 Swift 自身编译器的源代码在逐渐开发过程中针对这些源代码保持回归测试兼容性。凡是列入到本测试套件的项目,均会针对 Swift 最新开发版本进行定期编译测试,以实现 Swift 持续系统集成,也为我们的 Swift 编译器程序员能够深刻理解 Swift 语言在现实应用中的兼容性要求。
首批项目清单:
- AMScrollingNavbar
- Alamofire
- AsyncNinja
- BlueSocket
- DNS
- Dollar
- GRDB.swift
- Guitar
- IBAnimatable
- Kickstarter-Prelude
- Kickstarter-ReactiveExtensions
- Kingfisher
- Kronos
- Kitura
- Lark
- mapper
- ObjectMapper
- Perfect
- PinkyPromise
- Plank
- PromiseKit
- Realm
- ReSwift
- ReactiveCocoa
- ReactiveSwift
- RxDataSources
- SRP
- Serpent
- Sourcery
- Starscream
- Surge
- SwiftDate
- SwiftGraph
- panelkit
- siesta
- swiftlint
- vapor
验收标准
被列编入本项目的基本条件包括:
- 项目编译目标位 Linux / macOS 或者 iOS / tvOS / watchOS设备
- 使用Xcode或者SPM软件包管理器
- 同时支持在Linux / macOS上编译
- 源代码开放,使用git方式在互联网上公开
- 产品分支使用Swift 3.0兼容性编译
- 有稳定的团队长期维护项目
- 能够兼容最新的Xcode / swiftpm 测试版编译
- 而且项目功能与在编项目没有重叠(换句话说即使符合条件但如果与我们Perfect功能雷同则不会被列编)
- 允许使用的开源协议:
- BSD
- MIT
- Apache License, version 2.0
- Eclipse Public License
- Mozilla Public License (MPL) 1.1
- MPL 2.0
- CDDL
添加项目
要将满足验收标准的项目添加到套件中,需要执行以下步骤:
- 确保项目在针对 Swift 3.0 GM 特定情况下成功构建;
- 根据开源兼容性套件存储库创建一个提取请求,修改 projects.json 以包含要添加到测试套件中的项目引用。
项目索引是一个 JSON 文件,其中包含包含 Xcode 或 Swift Package Manager 目标操作的存储库列表。
添加新的 Swift Package Manager 项目,案例如下:
{
"repository": "Git",
"url": "https://github.com/example/project.git",
"path": "project",
"branch": "master",
"maintainer": "email@example.com",
"compatibility": {
"3.0": {
"commit": "195cd8cde2bb717242b3081f9c367ccd0a2f0121"
}
},
"platforms": [
"Darwin"
],
"actions": [
{
"action": "BuildSwiftPackage",
"configuration": "release"
},
{
"action": "TestSwiftPackage"
}
]
}
commit
字段指定提交哈希值将存储库固定。它包含在一个compatibility
字段中,该字段指定了 Swift 的版本,该版本已知可以编译。可以指定与 Swift 的不同版本兼容的多个 commit
。
platforms
字段指定可用于构建项目的平台。目前可以指定 Linux 和 Darwin。
如果不支持测试,请删除测试操作条目。
添加新的 Swift Xcode 工作区,可使用如下模板:
{
"repository": "Git",
"url": "https://github.com/example/project.git",
"path": "project",
"branch": "master",
"maintainer": "email@example.com",
"compatibility": {
"3.0": {
"commit": "195cd8cde2bb717242b3081f9c367ccd0a2f0121"
}
},
"platforms": [
"Darwin"
],
"actions": [
{
"action": "BuildXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project OSX",
"destination": "platform=macOS",
"configuration": "Release"
},
{
"action": "BuildXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project iOS",
"destination": "generic/platform=iOS",
"configuration": "Release"
},
{
"action": "BuildXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project tvOS",
"destination": "generic/platform=tvOS",
"configuration": "Release"
},
{
"action": "BuildXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project watchOS",
"destination": "generic/platform=watchOS",
"configuration": "Release"
},
{
"action": "TestXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project OSX",
"destination": "platform=macOS"
},
{
"action": "TestXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project iOS",
"destination": "platform=iOS Simulator,name=iPhone 7"
},
{
"action": "TestXcodeWorkspaceScheme",
"workspace": "project.xcworkspace",
"scheme": "project tvOS",
"destination": "platform=tvOS Simulator,name=Apple TV 1080p"
}
]
}
添加新的 Swift Xcode 项目,模板如下:
{
"repository": "Git",
"url": "https://github.com/example/project.git",
"path": "project",
"branch": "master",
"maintainer": "email@example.com",
"compatibility": {
"3.0": {
"commit": "195cd8cde2bb717242b3081f9c367ccd0a2f0121"
}
},
"platforms": [
"Darwin"
],
"actions": [
{
"action": "BuildXcodeProjectTarget",
"project": "project.xcodeproj",
"target": "project",
"destination": "generic/platform=iOS",
"configuration": "Release"
}
]
}
更多精彩内容,详见 Swift 官方网站:https://swift.org/source-compatibility/#current-list-of-projects