Swiftの自作ライブラリの公開方法（iOS）

# はじめに
いくつか自作のライブラリをgithubにあげていたのですが、いまいちフォルダ構成とかREADMEの書き方とか定まっていなかったのでそこらへんまとめようと思います。

とりあえずいつもお世話になっている[SVProgressHUD](https://github.com/SVProgressHUD/SVProgressHUD)を主に参考にしました。

# CocoaPodsとCarthage, SwiftPM対応
CocoaPodsの対応とCarthage、SwiftPMは手前味噌ですが下記参考にどうぞ

* [自作ライブラリのCocoaPods対応](https://qiita.com/am10/items/9097dd87c4eaa6ec5350)
* [自作ライブラリのCarthage（カルタゴ）対応](https://qiita.com/am10/items/c5e07ac5cad12276d43a)
* [自作ライブラリのSwift Package Manager(SwiftPM)対応](https://qiita.com/am10/items/72dbc511efc512fc065a)

# フォルダ構成(2019/10/15 SwiftPM用に修正)
フォルダ構成は下記のような感じです。

参考：[Swiftでライブラリを公開する](https://qiita.com/morizotter/items/2e45f8f94c1010ebd69f#_reference-a49d6180f7efda206a63)

[AMClockView](https://github.com/adventam10/AMClockView)を例にします。

```
.
├── .gitignore
├── SampleAMClock
│   ├── SampleAMClock
│   │   ├── Assets.xcassets
│   │   ├── Base.lproj
│   │   ├── Info
│   │   └── Classes
│   │       ├── AppDelegate.swift
│   │       └── ...
│   └── SampleAMClock.xcodeproj
├── AMClockView
│   ├── Info.plist
│   └── AMClockView.h
├── AMClockView.xcodeproj
├── Source
│   └── AMClockView.swift
├── AMClockView.podspec
├── Package.swift
├── .swiftpm
├── LICENSE
├── README.md
└── logo
```
* .gitignore  
とりあえずgitignore
* SampleAMClockView  
ライブラリを利用したサンプルプロジェクトのフォルダです。
* AMClockView.xcodeproj  
Carthage用のプロジェクトです。
* AMClockView  
Carthage用のフォルダです。
* Source  
ライブラリの中身のフォルダです。ここにソースやリソースを置きます。
* AMClockView.podspec 
* Package.swift
* .swiftpm
* LICENSE  
* README.md 
* logo  
READMEに使いたいロゴとかのリソース用フォルダです。

# READMEの書き方
READMEのテンプレは下記。

参考：[わかりやすいREADME.mdを書く](https://deeeet.com/writing/2014/07/31/readme/)

```
# Name
shields.io

Overview

## Description

## Demo

## Usage

## Installation

## Licence
```
## Name  
ライブラリ名を記載。ロゴなどあればここに表示。
## shields.io  
よくみるこういうやつ
![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)

参考：[shields.io経由でだいたいなんでも自由にバッジ表示する](https://qiita.com/ymtszw/items/77d1d6bbe0687848470b)

基本的には下記の形式でかけるみたいです。

```
https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg
```
* SUBJECT:左側の文字
* STATUS:右側の文字
* COLOR:右側の背景色

他にもいろいろ書き方があるみたいでCocoaPodsに対応しているなら下記のような記載もできるみたいです。[Shields.IO](https://shields.io/category/version)

```
![Pod Platform](https://img.shields.io/cocoapods/p/AMClockView.svg?style=flat)
```
![Pod Platform](https://img.shields.io/cocoapods/p/AMClockView.svg?style=flat)

AMClockView.svgのところをライブラリ名にすれば表示できるようです。（おそらくpodspecの記載の表示に変わるはず）

CocoaPods、Carthage、SwiftPMに対応していれば下記の記述でよさそうです。

```
![Pod Platform](https://img.shields.io/cocoapods/p/AMClockView.svg?style=flat)
![Pod License](https://img.shields.io/cocoapods/l/AMClockView.svg?style=flat)
[![Pod Version](https://img.shields.io/cocoapods/v/AMClockView.svg?style=flat)](http://cocoapods.org/pods/AMClockView)
[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)
```

![Pod Platform](https://img.shields.io/cocoapods/p/AMClockView.svg?style=flat) ![Pod License](https://img.shields.io/cocoapods/l/AMClockView.svg?style=flat) [![Pod Version](https://img.shields.io/cocoapods/v/AMClockView.svg?style=flat)](http://cocoapods.org/pods/AMClockView) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)


`AMClockView` の部分を自作のライブラリ名に変更して使ってください。

## Overview
概要を書く。なるべく短く簡潔に。
## Description
概要の補足など、丁寧に説明を書く。（なければ省略）
## Demo
UI系のやつならGIFや画像を貼り付ける。（なければ省略）
## Usage
簡単に使い方を書く。(コードなど記載する。)
## Installation
CocoaPods、Carthageでの利用方法を書く。
## Licence
ライセンスを書く。

# tagの付け方（2019/10/15 追記）
リリースするたびにタグをつけますがとりあえず下記の形式で良さそう。

1.0.0

適当に1.0とか付けてましたがこれだとSwiftPMで認識されないみたいです。とりあえず上記のx.x.xの形式であればCocoapods, Carthage, SwiftPMで問題なく動作しました。

# 作った後の宣伝
自作ライブラリを作ったらとりあえず宣伝しましょう。

CocoaPodsに対応するだけでも宣伝になりますが私は下記を使っています。

1. [Cocoa Controls](https://www.cocoacontrols.com/)  
簡単に登録できます。ここに登録するだけでわりとスター数が増えます。  
[この記事](https://qiita.com/noppefoxwolf/items/5010425a84250f2c55ce)がわかりやすかったです。

iOS Cookiesも使ってたんですが閉鎖したんですかね...

# おわりに
なんとなくふわっとやってたので自作ライブラリの方針を定めてみました。
他にもタグのつけ方とかリリースノートの書き方とか定まってない部分も多いです...

どなたかもっとこうした方がいいとかあればアドバイスください:bow::bow::bow:

# 参考
* [shields.io経由でだいたいなんでも自由にバッジ表示する](https://qiita.com/ymtszw/items/77d1d6bbe0687848470b)
* [Swiftでライブラリを公開する](https://qiita.com/morizotter/items/2e45f8f94c1010ebd69f#_reference-a49d6180f7efda206a63)
* [わかりやすいREADME.mdを書く](https://deeeet.com/writing/2014/07/31/readme/)
* [CocoaControlsへの投稿まとめ](https://qiita.com/noppefoxwolf/items/5010425a84250f2c55ce)