[iOS Swift] ライブラリを作って公開してみた！

自作のライブラリを公開する手順を簡単にまとめてみました。
本記事の目次は以下になります

# 目次
 - [SwiftPackageManager(以下SPM)での公開方法](#spmでの公開方法)
     - [大まかな流れ](#大まかな流れ)
         - [Package.swiftとは](#packageswiftとは)
         - [Sourceとは](#source)
         - [公開](#公開)
         - [実際にインストールしてみる](#実際にインストールしてみる)
 - [cocoapodsでの公開方法](#cocoapodsでの公開方法)
     - [大まかな流れ](#大まかな流れ-1)
         - [podspecファイルの作成](#podspecファイルの作成)
         - [文法チェック](#文法チェック)
         - [ライブラリ登録公開](#ライブラリ登録公開)
         - [実際にインストールしてみる](#実際にインストールしてみる-1)
 - [参考文献](#参考文献)



## SPMでの公開方法

### 大まかな流れ
![スクリーンショット 2025-01-05 20.22.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/b521de9e-d0f5-6ba0-98c9-e0dbcd72fc12.png)

ざっくりいうとこんな感じです。
ではパッケージ作成からやっていきましょう

![スクリーンショット 2025-01-05 20.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/7ac19e87-746e-788d-271b-5cd4b70a0195.png)

上記のPackageからパッケージを作成します。
※外部に公開するため、Git管理されているパッケージを作成しましょう！

作成するとこんな感じになります
今回は、簡単な計算をするライブラリ「CalculationLibrary」とします。

![スクリーンショット 2025-01-05 21.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/e8853a57-439b-a8a9-6043-9002e951cd77.png)


### Package.swiftとは
簡単にいうと、「パッケージの依存関係とかを示したマニフェストファイル」です。
この中に依存関係やライブラリの基本情報を書きます。

必要なのは
- name
- products
- targets

の3つです


``` Package.swift
import PackageDescription

let package = Package(
    name: "CalculationLibrary",
    products: [
        // Products define the executables and libraries a package produces, making them visible to other packages.
        .library(
            name: "CalculationLibrary",
            targets: ["CalculationLibrary"]),
    ],
    targets: [
        // Targets are the basic building blocks of a package, defining a module or a test suite.
        // Targets can depend on other targets in this package and products from dependencies.
        .target(
            name: "CalculationLibrary"),
        .testTarget(
            name: "CalculationLibraryTests",
            dependencies: ["CalculationLibrary"]
        ),
    ]
)
```

特筆するところは、
「productの中のlibraryのtargetsにSourceの中の実際にソースが入っているディレクトリを指定する」
くらいです。

何を言ってるかわからないかもしれませんが、後ほど画像を貼るので一旦そういうものだと理解してください。

### Source
---
ここにはライブラリのソースコードが格納されます。
実際に書いてみましょう。今回は足し算と引き算のメソッドを記入してみました。

```CalculationLibrary.swift
import Foundation

public class CalculationLibrary {
    public init() {}
    
    public func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
    
    public func subtraction(_ a: Int, _ b: Int) -> Int {
        return a - b
    }
}
```

ソースコードが完成したら、先ほどのPackage.swiftのlibraryに```CalculationLibrary```ディレクトリを指定しておきましょう。

![スクリーンショット 2025-01-05 21.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/98f1d30a-9bc9-d726-3c00-eff6356b3ed0.png)

これでパッケージは完成です。
次に公開の手順に移ります。

### 公開

公開にあたって、ライセンスを発行する必要があります。
その発行手順について説明します。

Add file ⇨ LICENSE ⇨ Choose a license template 

![スクリーンショット 2025-01-05 21.24.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/e48da7de-9813-3ab1-27c0-4ba88cf5c6d7.png)

![スクリーンショット 2024-12-28 16.46.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/92bd8ccb-5c1a-206e-d5e6-6424ffd4696f.png)

ライセンスは練習であればMITでいいと思います。
選択するとこんな感じ

![スクリーンショット 2024-12-28 16.50.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/da2866cd-9de9-731f-eb6e-2ddef19b0731.png)

ライセンスをmainに反映して、タグをつけたら完成！

### 実際にインストールしてみる

新規でプロジェクトを作成
画像の赤枠からパッケージを追加


![スクリーンショット 2024-12-28 20.08.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/6b5eab08-ee33-cb5f-3f41-87879f2d4c64.png)

githubのurlを入れて、addするだけ
https://github.com/IshidaMichitaka/CalculationLibrary
今回はタグではなく、mainブランチをパッケージとして取り込むようにしました。

![スクリーンショット 2024-12-28 20.08.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/e015efc3-6e86-c44a-7729-767226044058.png)

成功するとこんな感じ
ちゃんと使えてひとまず安心:relaxed:

![スクリーンショット 2025-01-05 21.36.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/d3a287c6-9781-7501-e0a1-7a5393e522f5.png)


## cocoapodsでの公開方法

## 大まかな流れ
SPMで公開した前提で今回は進めていきます！

![スクリーンショット 2025-01-05 22.43.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/0bbd2c2c-333c-5207-5d49-13a17a0be5bb.png)

### podspecファイルの作成

1.まずはcocoapodsをインストールしましょう
```
sudo gem install cocoapods
```

2.podspecファイルを作成する

```
cd "your library path"
pod spec create "ライブラリの名前"
```

3.podspecファイルの中身を修正する

```
Pod::Spec.new do |spec|
  spec.name         = "CalculationLibrary"
  spec.version      = "1.0.0" #自作したライブラリのバージョン x.x.xの形で記載する
  spec.summary      = "CalculationLibrary in swift"
  spec.homepage     = "https://github.com/IshidaMichitaka/CalculationLibrary"
  spec.swift_versions = "5.0"	
  spec.description  = <<-DESC
		This is MyLib Description.
                   DESC

  spec.license      = "MIT" #先ほどgitで作成したライセンスに合わせる
  spec.author             = { "名前" => "メルアド" } #自分のものに変更する

  spec.platform = :ios, "12.0"
  spec.source       = { :git => "https://github.com/IshidaMichitaka/CalculationLibrary.git", :tag => "#{spec.version}" }

  spec.source_files  = "Sources/**/*.swift" #ソースコードのファイルを指定
  spec.exclude_files = "Sources/**/Info.plist" #info.plistがここに格納されている場合のみ記述する
  spec.requires_arc  = true

end
```

実際には自分のものとは違う可能性が高いので、随時修正してもらえると嬉しいです

### 文法チェック

.podspecが完了したら、下記を実行してcocoapodsに登録できるかを確認してみましょう！
```
pod lib lint
```

成功するとこんな感じになります
![スクリーンショット 2025-01-05 23.13.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/5f41a1eb-cebb-d36c-497d-81f7d33c6db1.png)

### ライブラリ登録、公開
最後に、ライブラリを登録し、公開する手順を紹介します。

1.開発者登録をしましょう

```
pod trunk register {メールアドレス} 'name'
```

指定したメールアドレスに認証のメールが届くので承認してください。

2.ライブラリを登録

```
pod trunk push {ライブラリ名}.podspec --allow-warnings
```
--allow-warningsで警告を無視してライブラリ登録をすることができます。
ライブラリのバージョンをあげ、更新するときもこのコマンドを使用するので覚えておきましょう。


成功した場合
![スクリーンショット 2025-01-05 23.18.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/dcd2d4de-61a6-cd56-60e4-25a35cc43a40.png)


3.タグ付
最後にgitのタグをつけて終わりです🎉🎉🎉🎉🎉

### 実際にインストールしてみる

1.新規でプロジェクトを作成
2.新規プロジェクトのディレクトリでpod init
```
pod init
```

3.作成されたpodfileに下記を入れる
```
target 'ImportMyLibraryFromCocoapod' do
  use_frameworks!
  pod 'CalculationLibrary', '~> 1.0.0'
end

```

4.ライブラリをインストール
```
pod install
```

成功したらこんな感じ！
![スクリーンショット 2025-01-05 23.23.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/681a7cd2-72ba-c900-6777-db2530b499ac.png)

実際にインストールしてみるとこんな感じ！
動いた！
![スクリーンショット 2025-01-05 23.31.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982100/ee4baa58-36a3-3e5d-7516-63b5f3110fb2.png)

## 参考文献
https://qiita.com/jjjkkkjjj/items/727517263292ae7a3a87

https://qiita.com/uhooi/items/2f36b85f5f41cbd35189

https://qiita.com/y_tt_y/items/cf673439ac7363247bb9

https://qiita.com/yusuga/items/d7c764c23e9ad9d6d5de

https://guides.cocoapods.org/making/specs-and-specs-repo.html

https://daisuke-t-jp.hatenablog.com/entry/2019/08/16/Register-to-CocoaPods