はじめてライブラリを作ってCocoa Podsで公開してみた
はじめに
今までライブラリを作ってCocoa Podsに公開したことがなかったのでやってみました!
開発環境
以下の環境でライブラリを作りました。
Category | Version |
---|---|
Swift | 4.1 |
Xcode | 9.3 (9E145) |
作ったライブラリについて
LSSLoggerというLoggerライブラリを作ってみました。https://github.com/stv-yokudera/LSSLogger
最近開発していたアプリでログをファイル出力する要件があったので、
業務アプリであれば他の開発案件でも使いそうだなーと思ってライブラリ化してみました。
Cocoa PodsまたはCarthageでプロジェクトに導入できます
GitHubで押していただけると嬉しいです
LSSLoggerでできること
LSSLoggerは、ログ出力を簡単にできるライブラリです。
ログをコンソールへ出力したり、ファイルへ出力したり、またコンソール・ファイル両方への出力が簡単にできます。
ログレベル
LSSLoggerは、デフォルトでは以下のようにログ出力可否が設定されています。
DEBUGログは、コンソールのみ出力可能で
それ以外のログは、コンソールにもファイルにも出力可能になっています。
ログレベル | DEBUG | INFO | WARNING | ERROR | FATAL |
---|---|---|---|---|---|
コンソール出力 | ◯ | ◯ | ◯ | ◯ | ◯ |
ファイル出力 | × | ◯ | ◯ | ◯ | ◯ |
サンプルコードです。
import LSSLogger
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// コンソールにDEBUGログを出力(メッセージ無し)
LSSLogger.console.debug()
// コンソールにDEBUGログを出力(メッセージ有り)
LSSLogger.console.debug(message: "foo")
// コンソールにINFOログを出力
LSSLogger.console.info(message: "bar")
// ログファイルにWARNINGログを出力
LSSLogger.file.warning(message: "foobar")
// ログファイルにERRORログを出力
LSSLogger.file.error(message: "xxAPIエラー発生")
// コンソール・ログファイル両方にFATALログを出力
LSSLogger.consoleAndFile.fatal(message: "xxで異常終了")
}
}
サンプルコードを実行すると、コンソールには以下のように
LSSLogger.console
またはLSSLogger.consoleAndFile
で指定したログが出力されます。
ログレベル毎に絵文字がつきます。
背景が白の場合は以下のように見えます。
また、LSSLogger.file
またはLSSLogger.consoleAndFile
の場合は
日次ログファイルが生成されて、指定したログが出力されます。
ログファイルに出力するログには、ログレベル毎の絵文字は含みません。
ログ設定
ログローテーション
ログをファイル出力するとき、当日分のログファイルが存在しなければ新しく生成されます。
デフォルトでは、10日分ログファイルを保持する設定になっており、
当日分のログファイル生成時に10日分以上存在した場合は古いものから削除されます。
ログファイルのローテーションを変更する場合は、
LSSLogger.configureLogRotationCount(count: )
でローテーションカウントを設定します。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// ログファイルのローテーションをデフォルトの10日分から5日分に変更
LSSLogger.configureLogRotationCount(count: 5)
return true
}
Releaseビルドでログを出力させない
Release時にはログを出力したくない、という場合は
以下のように#if RELEASE ~ #endif
内で、ログ出力設定を変更します。
コンソール出力・ログファイル出力それぞれを不可に設定することができます。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// リリースビルドの場合
#if RELEASE
// ログをコンソールに出力させない
LSSLogger.outputToConsoleEnabled(isEnabled: false)
// ログをファイルに出力させない
LSSLogger.outputToFileEnabled(isEnabled: false)
#endif
return true
}
#if RELEASE ~ #endif
を使用する場合は、
プロジェクトファイルのActive Compilation ConditionsのReleaseの項目に
「RELEASE」が設定されていることを確認してください。
作成する中で躓いたところ
ライブラリを作成する中で躓いたところとしてアクセス修飾子があります。
普段、プロジェクトを作って開発を進める際には
privateを設定したりして可能な限りアクセスを狭くするよう心掛けていますが、
ライブラリを作成する場合は外部モジュールからアクセスできるようpublicにしてあげなければいけませんでした。
メソッドはpublicにしていましたが、クラス自体をpublicにするのを忘れていて
気付くまでに時間を要しました。。
参考
今回、ライブラリを公開するにあたって以下を参考にしました。
Cocoa Pods
Getting setup with Trunk
Cocoa Podsでライブラリを公開するときにpodspec設定で躓いたところ
Carthage
Supporting Carthage for your framework
さいごに
今回は、ライブラリを公開することを勉強したかったのでミニマムなライブラリを公開しましたが、
今後ちゃんと計画してもう1つライブラリを作ってみたいと思います。
Author And Source
この問題について(はじめてライブラリを作ってCocoa Podsで公開してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/y-okudera/items/75f11230746eea59c695著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .