Swift ソースの互換性


ソースの互換性は、将来の Swift リリースの強力な目標です。この目標を達成するために、コミュニティが所有するソース互換性テストスイートは、Swift ソースコードの (徐々に増加する) 全体に対するコンパイラへの回帰テストの変更に役立ちます。このテストスイートに追加されたプロジェクトは、Swift の継続的統合システム の一部として Swift の最新開発バージョンに対して定期的にビルドされており、Swift のコンパイラ開発者が、それらの変更が現実の Swift プロジェクトに及ぼす影響を理解することができます。


プロジェクトの現在のリスト


プロジェクトの追加


Swift ソースの互換性テストスイートはコミュニティ駆動型であるため、オープンソースの Swift プロジェクトオーナーは、テストスイートに含めるための合格基準を満たすプロジェクトを提出することを推奨します。このスイートに追加されたプロジェクトは、一般的なソース互換性テストとして機能し、将来の Swift リリースにおける意図しないソース破損に対するより大きな保護を提供します。


合格基準


Swift ソース互換性テストスイートに合格するためには、プロジェクトは以下の条件を満たさなければなりません。


  1. Linux、macOS、または iOS/tvOS/watchOS デバイスをターゲットにする
  2. Xcode または Swift Package Manager プロジェクト (Carthage と CocoaPod は現在サポートされていませんが、今後サポートされる予定です)
  3. Linux または macOS でのビルドのサポート
  4. 一般公開されている git リポジトリに含まれる
  5. Swift 3.0 互換モードをベースにしたプロジェクト分岐を維持し、ユニットテストをパスする
  6. タイムリーに問題を解決するコミットをする維持者がある
  7. Xcodeswiftpm の最新の GM/Beta バージョンと互換性がある
  8. スイートにまだ含まれていない値を追加する
  9. 以下の許可ライセンスのいずれか一つを使用してライセンスを取得してください。

注意:継続的な統合における Linux 互換性テストはまだ利用できませんが、Linux プロジェクトは現在受け入れ中です。


プロジェクトの追加


合格基準を満たすプロジェクトをスイートに追加するには、以下の手順を実行します。


  1. Swift 3.0 GM に対して選ばれたコミットでプロジェクトが正常にビルドされていることを確認する
  2. ソース互換性スイートリポジトリ に対してリクエストを作成し、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 でコメントすることで、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 フラグを使用して下さい。





目次
Xcode 9 の新機能

SwiftLogo
  • Swift について
  • 特徴
    安全
    Swift.org とオープンソース
    プロジェクト
    プラットフォームサポート
    アップルのプラットフォーム
    Linux
  • ブログ:Swift 4.0 リリース!
  • 言語の更新
    文字列
    コレクション
    アーカイブとシリアル化
    その他の言語の更新
    新しい互換モード
    Package Manager の更新
    文書化
  • プラットフォーム
  • Linux
    Apple(Xcode)
    ソース
  • Swift のローカルリファクタリング
  • リファクタリングの種類
    カーソルベースのリファクタリング
    レンジベースのリファクタリング
    診断
    テスト
    文脈上のリファクタリングテスト
    コード変換テスト
    Xcode との統合
    潜在的なローカルリファクタリングの考え方
  • Swift のダウンロード
  • リリース
    Swift 4.0
    Swift 3.1.1
    Swift 3.1
    Swift 3.0.2
    Swift 3.0.1
    Swift 3.0
    Swift 2.2.1
    Swift 2.2
    スナップショット
    基幹となる開発(マスター)
    古いスナップショット
    Swift 4.0 の開発
    古いスナップショット
    Swift 3.1 の開発
    古いスナップショット
    古いリリースの分岐
    ダウンロードを使用して
    インストール
    MacOS でのコード署名
    Linux
    必要
    サポートしているターゲットプラットフォーム
    インストール
    アクティブな署名鍵
  • Swift 4.0 入門
  • Swift のインストール
    Linux の場合
    REPL の使用
    パッケージマネージャの使用
    パッケージの作成
    実行可能ファイルの作成
    複数のソースファイルの操作
    LLDB デバッガの使用
  • 文書化
  • Swift プログラミング言語
    翻訳
    API 設計ガイドライン
  • API 設計ガイドライン
  • 目次
    基礎
    ネーミング
    明確な使用の促進
    流暢な使用を目指す
    用語をよく使う
    規約
    一般的規約
    パラメータ
    引数ラベル
    特別な命令
  • Swift 4 への移行
  • 移行前の準備
    Swift 移行アシスタント
    Swift 4 移行の変更の概要
    SDK の変更点
    注目すべき特別なケース
    新しい String
    デフォルトのパラメータ値は public です
    移行の後
    移行に関する既知の問題
    Carthage/CocoaPods プロジェクトの使用
    その他
  • Swift 3 への移行
  • 移行前の準備
    Swift 移行アシスタント
    Swift 3 移行変更の概要
    API 設計ガイドライン
    SDK
    Swift 標準ライブラリ
    言語
    移行後
    Carthage/CocoaPods プロジェクトの使用 既知の移行の問題
    Swift 標準ライブラリ
    SDK
    Swift 3 言語
    その他
  • ソースコード
  • コンパイラと標準ライブラリ
    Core Library
    パッケージマネージャ
    Xcode の Playground サポート
    クローンされたリポジトリ
  • コミュニティガイドライン
  • コミュニケーション
    コミュニティの構造
    プロジェクトリーダー
    コアチーム
    コードオーナー
    ライセンス
    Runtime Library Exception (実行時ライブラリ例外)
    ソースコードの著作権とライセンス
    投稿
    入門
    コードの貢献 (投稿)
    新しい機能の提案
    行動規範
    投稿者行動規範 v1.3
    報告
    メーリングリスト
    General Interest
    Swift 開発
    Swift の発展
    通知
  • 投稿
  • 質問に答える
    バグを報告する
    バグのトリアージ
    コードの投稿
    段階的な開発
    メッセージをコミットする
    変更の帰属
    コードテンプレート
    コードのレビュー
    テスト
    品質
    コミットアクセス
    外部ライブラリ依存関係の追加
    Swift 発展プロセスへの参加
    LLVM と Swift
    LLVM の変更はどこで行われますか?
    Swift と LLVM 開発者ポリシー
  • Swift の継続的インテグレーション
  • 構成
    ジョブの組織
    ジョブの構成
    使用法
    リクエストのテスト
  • Swift ソースの互換性
  • プロジェクトの現在のリスト
    プロジェクトの追加
    合格基準
    プロジェクトの追加
    プロジェクトの維持
    リクエストのテスト
    プロジェクトをビルドする
    フォーカスエリア
  • ABI の安定性
  • データレイアウト
    メタデータ型
    切り分け
    呼び出し規約
    実行時
    標準ライブラリ
  • サーバーAPIプロジェクト
  • フォーカスエリア
    移植性
    外部ライブラリの使用
    ワークグループ
    舵取りチーム
    ステークホルダー
    開発プロセス
    API の提案
    プロトタイプ化と開発
    リリースプロセス
    メーリングリスト
  • コンパイラと標準ライブラリ
  • コンパイラのアーキテクチャ
    標準ライブラリの設計
  • パッケージマネージャ
  • 概念の概要
    モジュール
    パッケージ
    製品
    依存関係
    例の使用法
    ライブラリパッケージの作成
    ビルド構成文の使用
    依存関係のインポート
    副依存関係の解決
    コミュニティの提案
  • Swift コアライブラリ
  • プロジェクトの状態
    Foundation
    libdispatch
    XCTest
  • REPL とデバッガ、プレイグラウンド
  • なぜ REPL とデバッガを組み合わせるのか?
    Xcode プレイグラウンドサポート












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)












    トップへ(Swift 4.0)