try! Swift の宿題: ライブラリを公開する

Avatar tnantoka 2016-03-23

こんにちは。iOSで活躍していないエンジニア@tnantokaです。これから活躍できるように頑張ります!
さて、前回に引き続き、try! Swift関連記事も3つめ。

カンファレンスで刺激を受けたので、AppBoardの一部をライブラリ化してみたいと思います。

作るもの

AppBoardはまだまだ未熟なアプリで、いろいろ修正したいところがありますが、1つ、すぐに改善したい問題が有ります。

それがこの日付の表記です。

多言語対応しつつ、いい感じの日付表記にしようとすると面倒が多いですが、これにはNSDateFormatterのdateFormatFromTemplateという便利な機能があります。

ただ、ボイラープレート的なコードが数行必要なので、これをWrapするライブラリを作ってみます。

クロスプラットフォーム

ところでこの機能、Linuxでも動くでしょうか?

apple/swift-corelibs-foundationを見ると、実装されているようです。
IBM Swift Sandboxで以下のコードを試してみました。

import Foundation

let locale = NSLocale(localeIdentifier: "ja_JP")
let format = NSDateFormatter.dateFormatFromTemplate("yyyyMMMd", options: 0, locale: locale)
let formatter = NSDateFormatter()
formatter.dateFormat = format
let string = formatter.stringFromDate(NSDate())
print(string) // 2016年3月23日

日本語も動いており、大丈夫そうです。

というわけで、Linuxにも対応させましょう。

公開

ライブラリの開発のスライドとそのサンプルコードであるSnorlaxの通りにやればできました。
プラットフォームはiOSとLinuxのみにしています。

完成したのがこちらです。
https://github.com/tnantoka/Symday

Symday().format(date) // Jul 17, 2010
Symday().format(date, template: "MdEEE") // Sat, 7/17
Symday(locale: NSLocale(localeIdentifier: "ja_JP")).format(date) // 2010年7月17日

こんな感じで使えます。

ライブラリを作る時、僕はよくstructとかをpublicにするのを忘れます。(今回もやりました…)皆さんもご注意ください。
テストの時@testableせずに公開APIだけ見るのがいいのかもしれません。

QuickResponse

思ったより手軽にできたので、QRコードの作成部分もライブラリ化しました。
https://github.com/tnantoka/QuickResponse

こちらはiOSのみ対応しています。

QRってQuickResponseのことだったんですね!

さて、次回でtry! Swift関連の記事は一旦終わりの予定。一番好きだったアニメーション系のセッションを復習します。

ソースコード

https://github.com/tnantoka/AppBoard/releases/tag/v1.0.2
QRコードの生成処理が減ったので、少しすっきりしました。

関連セッション

参考情報

https://robots.thoughtbot.com/creating-your-first-ios-framework
Swiftでライブラリ作るときはいつもこれ見てます。

https://github.com/qutheory/vapor
手軽に使えるWebフレームワーク。Linux版のテストの書き方をよく参考にしています。