Swift Package Managerでライブラリを自作して使うまでの最初の一歩

## 今回作るもの
![スクリーンショット 2021-10-16 11.07.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/c3f8e30c-a338-fb60-5fb2-27199c44c19e.jpeg)
今回はSwift Package Manager(以下SPM)の作成にチャレンジしてみましたので、作成方法から使用方法を体験的に学べるようご紹介したいと思います。

そもそもSPMってなに？と言う方はこちらを一読される事をおすすめします！

https://swift.org/package-manager/

https://zenn.dev/jollyjoester/articles/08b42792553169

https://qiita.com/hironytic/items/09a4c16857b409c17d2c

記事見る時間が無い。
と言う方には"SPMは、Swiftコードの配布を管理するためのツールで、手軽に自作したライブラリを公開したり、使用したりできるAppleの純正ツール"ぐらいでOKかと。

では
・SPM作成
・SPM公開
・SPM使用
のたった3工程でSPMを作って使う!!方法をご紹介していきます。

## 環境
・ macOS Monterey : 12.0
・ Xcode : 13.0

## SPM作成
まずXcodeを起動します。
続いてFile→New→Packageを選択します。
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/f040b11d-bebb-c99b-19e7-e475c256a933.jpeg)

初期画面が表示されるのでSave Asにてファイル名を指定します。(今回は初期設定のまま使用しています。)

![スクリーンショット 2021-10-16 11.50.17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/98fab2cb-1606-bf5e-c914-44c553664263.jpeg)
今回はこのままプロジェクトに入れずPackageを作りますが、Add toにプロジェクトを指定すると直接Packageに入れる事ができます。
(直接入れるとPackageがプロジェクトに下記のように追加されます。)
![スクリーンショット 2021-10-16 18.30.02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/a27e0b6f-f5ec-3354-bbc9-67856e235699.jpeg)
たったこれだけでPackageの作成ができます。
![スクリーンショット 2021-10-16 18.40.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/b7667a42-1dac-4e39-95d3-ede2a4b3d80d.jpeg)
Xcode13.0ではMyLibrary.swiftに以下のようなコードがデフォルトであります。

```swift
public struct MyLibrary {
    public private(set) var text = "Hello, World!"
    public init() {
    }
}

```

今回は上記を以下のように変更します。

```swift
import SwiftUI

@available(iOS 13.0, *)
public struct MyLibrary: View {
    public init() {
        
    }
    public var body: some View {
        HStack {
           Image(systemName: "star.fill")
            Text("初めてのSPM")
        }
    }
}

```
上記のコードは星のImageとTextを横一列に表示させるコードです。
またここではpublic init()でイニシャライザを指定しておかないと下記のエラーが出てきます。
'MyLibrary' initializer is inaccessible due to 'internal' protection level

これでSPMは完成です。

## SPM公開
続いて公開していきます。
公開はシンプルにGitHubにタグをつけて公開するだけです。
commitとpushで行えます。(commit、pushがわからない人は[コチラ](https://qiita.com/yuujioka/items/31d3df566aca5ce7bed9)をどうぞ!!)
タグ付けはターミナルで

```
git tag 1.0.0
```

を行うか、GtiHub上で追加できます。
![スクリーンショット 2021-10-17 22.08.16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/713f2a15-32f8-ae03-f6b2-bdd9802d88ce.jpeg)

以上で公開の手順は終了です。
(以下Tips)
### Tips
Source Control→Create Git Repositoriesにてローカルリポジトリを作成し
project→New "プロジェクト名" RemoteからGitHubとXcodeを連携させる事ができます。
これでXcode内でcommit、pushを行うことができます。
(非常に参考になる記事がありますのでご紹介させて頂きます)

https://zenn.dev/kueharx/articles/ebd14c46f02211

## SPM使用
最後に先ほど作成してGitHubに公開したSPMを使用していきます。
File→Add Packages...を選択します。
![スクリーンショット 2021-10-17 22.15.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/ad275136-7b6c-2a29-26b3-e15377ffc110.png)

作成したリポジトリのURLもしくはSSHを入力してAdd PackageでPackageの追加を行います。

![スクリーンショット 2021-10-17 22.51.18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/cd5f03f0-72eb-53f7-b740-0c6b038491e4.jpeg)

無事追加できれば以下のようにNavigator Areaに追加されます。
![スクリーンショット 2021-10-17 22.57.49.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/94c61fba-20a3-8adf-94ab-bb0a8f711832.jpeg)
後は以下のようにimportして使用します。

```swift
import SwiftUI
import MyLibrary

struct SwiftPakageManagerSampler: View {
    var body: some View {
        MyLibrary()
    }
}

struct SwiftPakageManagerSampler_Previews: PreviewProvider {
    static var previews: some View {
        SwiftPakageManagerSampler()
    }
}
```

これで無事表示されれば成功です☆
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517666/5b72649c-b36f-6410-f411-bb6bab4fa2f1.jpeg)

## まとめ
いかがでしたでしょうか？たった3工程で簡単にSPMの作成、公開、使用と一通りできるのは非常に良いと思います^^
また標準機能で使用できるので作成から使用までシームレスにできる点も非常に良いと思いましたので今後ガシガシ使用していきたいなと思います!!