Swift 4.2 日本語化計画 : Swift 4.2
Swift ソースの互換性
ソースの互換性は、将来の Swift リリースの強力な目標です。この目標を達成するために、コミュニティが所有するソース互換性テストスイートは、Swift ソースコードの (徐々に増加する) 全体に対するコンパイラへの回帰テストの変更に役立ちます。このテストスイートに追加されたプロジェクトは、Swift の継続的統合システム の一部として Swift の最新開発バージョンに対して定期的にビルドされており、Swift のコンパイラ開発者が、それらの変更が現実の Swift プロジェクトに及ぼす互換性の影響を理解することができます。
プロジェクトの現在のリスト
- AMScrollingNavbar
- Alamofire
- AsyncNinja
- BeaconKit
- BlueSocket
- Chatto
- CleanroomLogger
- CoreStore
- cub
- DNS
- Deferred
- Dollar
- Dwifft
- exercism-swift
- exercism-xswift
- GRDB.swift
- Guitar
- IBAnimatable
- JSQCoreDataKit
- JSQDataSourcesKit
- KeychainAccess
- Kickstarter-Prelude
- Kickstarter-ReactiveExtensions
- Kingfisher
- Kitura
- Kronos
- Lark
- ModelAssistant
- Moya
- NetService
- NonEmpty
- ObjectMapper
- Overture
- Perfect
- PinkyPromise
- Plank
- ProcedureKit
- PromiseKit
- R.swift
- Re-Lax
- ReSwift
- ReactiveCocoa
- ReactiveSwift
- Result
- RxDataSources
- RxSwift
- SRP
- Serpent
- Sourcery
- Starscream
- Surge
- SwiftDate
- SwiftGraph
- SwiftLint
- SwifterSwift
- swift-nio
- SwiftyJSON
- SwiftyStoreKit
- Then
- URBNJSONDecodableSPM
- kommander
- launchscreensnapshot
- mapper
- panelkit
- siesta
- vapor_console
- vapor_core
- vapor_database-kit
- vapor_multipart
- vapor_routing
- vapor_service
- vapor_template-kit
- vapor_url-encoded-form
- vapor_validation
プロジェクトの追加
Swift ソースの互換性テストスイートはコミュニティ駆動型であるため、オープンソースの Swift プロジェクトオーナーは、テストスイートに含めるための合格基準を満たすプロジェクトを提出することを推奨します。このスイートに追加されたプロジェクトは、一般的なソース互換性テストとして機能し、将来の Swift リリースにおける意図しないソース破損に対するより大きな保護を提供します。
合格基準
Swift ソース互換性テストスイートに合格するためには、プロジェクトは以下の条件を満たさなければなりません。
- Linux、macOS、または iOS/tvOS/watchOS デバイスをターゲットにする
- Xcode または Swift Package Manager プロジェクト (Carthage と CocoaPod は現在サポートされていませんが、今後サポートされる予定です)
- Linux または macOS でのビルドのサポート
- 一般公開されている git リポジトリに含まれる
- Swift 3.0 互換モードをベースにしたプロジェクト分岐を維持し、ユニットテストをパスする
- タイムリーに問題を解決するコミットをする維持者がある
- Xcode と swiftpm の最新の GM/Beta バージョンと互換性がある
- スイートにまだ含まれていない値を追加する
- 以下の許可ライセンスのいずれか一つを使用してライセンスを取得してください。
- BSD
- MIT
- Apache License, version 2.0
- Eclipse Public License
- Mozilla Public License (MPL) 1.1
- MPL 2.0
- CDDL
注意:継続的な統合における Linux 互換性テストはまだ利用できませんが、Linux プロジェクトは現在受け入れ中です。
プロジェクトの追加
合格基準を満たすプロジェクトをスイートに追加するには、以下の手順を実行します。
- Swift 3.0 GM に対して選ばれたコミットでプロジェクトが正常にビルドされていることを確認する
- ソース互換性スイートリポジトリ に対してプルリクエストを作成し、projects.json に、テストスイートに追加されるプロジェクトへの参照を含めるように変更します。
プロジェクトインデックスは、Xcode および/または Swift Package Manager のターゲットアクションを含むリポジトリのリストを含む JSON ファイルです。
新しい 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 と互換性のある複数のコミットを指定できます。
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 に対して固定されたコミットで正常にビルドしたことを確認して下さい。これらの例では、Xcode 8.0 に含まれている Swift 3.0 とコミットは互換性があると指定されています。
# Select Xcode 8.0 GM sudo xcode-select -s /Applications/Xcode.app # Build project at pinned commit against selected Xcode ./check project-path-field
Linux では、Swift 3.0 リリースのツールチェーンに対してビルドすることができます。
curl -O https://swift.org/builds/swift-3.0-release/ubuntu1510/ swift-3.0-RELEASE/swift-3.0-RELEASE-ubuntu15.10.tar.gz tar xzvf swift-3.0-RELEASE-ubuntu15.10.tar.gz ./check project-path-field --swiftc swift-3.0-RELEASE-ubuntu15.10/ usr/bin/swiftc
プロジェクトの維持
Swift がプロジェクトとのソースの互換性を損なう変更 (つまり、コンパイラの不具合をコンパイラで修正した場合など) を導入した場合、プロジェクトの維持者はプロジェクトを更新し、通知されてから 2 週間以内に更新されたコミットハッシュで、新しいプルリクエストを提出します。そうでないと、維持されていないプロジェクトはプロジェクトのインデックスから削除されることがあるからです。
プルリクエストのテスト
@swift-ci Please test source compatibility と Swift プルリクエストでコメントすることで、Swift ソース互換性スイートに対するプルリクエストのテストを実行できます。
プロジェクトをビルドする
指定した Swift コンパイラに対してすべてのプロジェクトをローカルにビルドするには、以下に示すように runner.py ユーティリティを使用します。
./runner.py --swift-branch master --projects projects.json --swift-version 3 --include-actions 'action.startswith("Build")' --swiftc path/to/swiftc
特定のプロジェクトをビルドするには、--include-repos フラグを使用して下さい。
./runner.py --swift-branch master --projects projects.json --swift-version 3 --include-actions 'action.startswith("Build")' --include-repos 'path == "Alamofire"' --swiftc path/to/swiftc
デフォルトでは、ビルドの出力は現在の作業ディレクトリ内のアクションごとの .log ファイルにリダイレクトされます。ビルド結果を標準出力に出力するようにこの動作を変更するには、 -verbose フラグを使用して下さい。