LoginSignup
3
3

More than 5 years have passed since last update.

Swift Package Manager 邦訳と使い方

Last updated at Posted at 2018-02-09

Package Manager 邦訳

Package Manager

Swiftコードを配布するための管理ツールである。
関連ソースファイルのダウンロード、コンパイル、リンクを自動化するためのSwiftビルドシステムが統一化される。

swift3.0以上で使える。

Modules

Swiftはモジュールとしてコードを構成する。
それぞれのモジュールは名前空間を特定し、コードがモジュールの外側で使用される際は、アクセスコントロールを強制する。

プログラムは、最低限一つのモジュールに全てのコードを持つ。
またもしくは、dependencies としてその他のモジュールをインポートしている。
システムが提供するモジュール(macOSのDarwin, LinuxのGlibc)を除いて、dependencies を使用するためには、それらがダウンロードとビルドされる必要がある。

特定のプログラムを解決するコードをモジュールとして分離して使用すると、それらのコードは他でも再利用することが可能となる。
例として、ネットワークリクエストをする機能を提供するモジュールは、写真共有アプリやお天気アプリで共有できる。
モジュールを使用すると、自分自身で同様の機能を再実装するのではなく、他の開発者のコードをベースに構築することが出来る。

Package

パッケージは、ソースファイルとマニフェストからなる。
マニフェストは Package.swift と呼ばれ、PackageDescription モジュールを用いて、パッケージ名とでその中身を定義している。

パッケージは一つもしくはそれ以上の target を持つ。
それぞれの target は 成果物(product) を指定する。
また一つ以上の dependencies を宣言ことが可能である。

Products

target は その成果物(product)として、 library もしくは executable のどちらかをビルド出来る。
library は他のSwiftコードにインポートする事が可能なモジュールを含む。
executable はOSで実行することが出来るプログラムである。

Dependencies

targetの dependencies はそのパッケージのコードによって必要とされるモジュールである。
一つの dependency は、そのパッケージのソースへのURLと使用することができるパッケージのバージョンのセットからなる。
パッケージマネージャーの役割は、プロジェクトの全ての dependencies のダウンロードとビルドプロセスを自動化することによって「coordination コスト」を減らすことである。
これらは再帰的な処理である。(一つの depencency はそれ自身の dependencies を持ち、またそれぞれ dependencies を持つ事ができ、dependency graph を構成する。)
Package Managerは全ての dependency graph を満たすために、全てをダウンロードしてからビルドする。


パッケージ関連コマンド

パッケージの初期化

$ swift package init
  • オプション
    • --type
      • library ライブラリーパッケージの作成、デフォルト
      • executable 実行可能パッケージの作成

ex: 実行可能パッケージの作成例

$ mkdir battle_ship
$ cd battle_ship
$ swift package init --type executable
$ swift run # 実行

NOTE:

  • main.swiftファイルが作られる
  • Sources ディレクトリ配下に、その他の必要なソースファイルを追加していく
  • swift run で実行できる

パッケージのビルド

$ swift build

パッケージのテスト

$ swift test

実行可能パッケージの実行

$ swift run

モジュールの追加 (依存関係の追加)

以下マニフェストファイル(Package.swift)に追記する

  • dependenciesへのパッケージの追加
  • 使用するtargetのdependenciesに追加

ex: SwiftStreamの追加

dependenciesに追記

Package.swift
...
    dependencies: [
        // 依存するモジュールを追加
         .package(url: "https://github.com/ysn551/SwiftStream.git", from: "1.0.0"),
    ],

targetのdependenciesに追記

Package.swift
...
    targets: [
        .target(
            name: "PackageSample",
            // targetが使用する場合は、追加する
            dependencies: ["SwiftStream"]),
        .testTarget(
            name: "PackageSampleTests",
            dependencies: ["PackageSample", "SwiftStream"]),
    ]

モジュールの更新

$ swift package update
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3