swiftを勉強したのでアプリ開発したいメモ


## 今更ながら
この記事を書いた年にちゃんとリリースまでこぎつけていたけど
その後に参画したお仕事の事情でまったく記事更新できなかった...。

https://stlwolf.github.io/ZenDo/

**開発しつつ、細かいメモ記事的なのをアップしていく予定。** とは一体... :thinking: 

一人開発だけどCI構築して、fastlaneとかBitriseとかfabricとか使ったり
問い合わせをslackに通知するとかもやってあるけど、リリース以降アップデート出来てないので
あまり有効活用できてない...orz

時が立つのもあっという間でswiftも2から4になってるから
コードをアップデートして通知用の音源とかも追加したいけど、いつ着手できるやら。。。
(リリース1年以上経過しているけど、割とユーザさんに使ってもらってるようなのでアップデートしたい感)


# まえがき
初めてのiOSアプリリリースを目標に頑張ることを決めた今ココ。
ので、あとで振り返られるように、進捗や調べて利用したものを
積み上げていこうと思った次第。

**開発しつつ、細かいメモ記事的なのをアップしていく予定。**

ちなみに、ここ数年は仕事でサーバーサイド(python)をちょこちょこ触ってた。
ちゃんとしたネイティブアプリ開発は初。
swiftについては主に[詳解-Swift-改訂版]を読んで仕様等を勉強した。


# 開発アプリや実装について
いくつか作ってみたいアプリを妄想してるが、とりあえず最近マイブームになった
マインドフルネスや坐禅のためのサポートアプリ(初期版はタイマーやリマインダー機能ぐらい)の
リリースを目指す感じ。

今までMVC的な実装しか経験がないので、MVVMを学びつつ採用したい。

あと本実装前に自分テンプレートプロジェクトを作って残しておいた。
https://github.com/stlwolf/iosAppBase

また下記の記事をみて、なるほど！と思ったので取り入れてます。
こういう風に自分で拡張していけたらいいなー。

- [使うと手放せなくなるSwift Extension集](http://qiita.com/tattn/items/647e094936287a6bd2d3)
- [アニメーション処理が楽になるSwift拡張メソッド 〜フェードイン・フェードアウト〜](http://qiita.com/mono0926/items/c53b2e46e51a0b0bbf06)



# (現時点の)開発環境

- Xcode 7.3.1
- Swift 2.2

ついでにアプリと直接関係ないけど、タスク管理には Wunderlist 使ってる。
前からちょこちょこリマインダーに使ってたけど、改めて実装項目の管理に利用してみてる。

- [Wunderlist](https://www.wunderlist.com/ja/)
- [マイクロソフトのタスク管理アプリ「Wunderlist」世界1,900万ダウンロードでわかった「日本特有のタスク文化」と「賛否両論あった機能」](http://appmarketinglabo.net/wunderlist/)

さらに今自宅作業の為、「どうしてもモチベーション的なのが出なくて、開発に取り掛からない」
なんてこともあるんだけど、それを出来るだけ少なくするためにポモドーロ・テクニックというものを使ってる。

- [今日から始める生産性アップ術。ポモドーロ・テクニック再入門ガイド](http://www.lifehacker.jp/2014/07/140714pomodoro.html)
- [Pomodoro Time Pro　(有料)](http://xwavesoft.com/pomodoro-timer-pro-for-iphone-ipad-mac-os-x.html)

タイマーアプリは上記のを使ってるけど、単純なタイマーでも実践可能。
これでタスクを実行する癖が付いてくると1日全く作業しないって状態がなくなってきた。

# 使用予定ライブラリ(随時)

SwiftBond
-

https://github.com/SwiftBond/Bond

データバインディング用のライブラリ。

リアクティブプログラミング(厳密にはこれは違うのかな？)＆イベント実装が楽になるとのことだったので、
とにかく使ってみることに。まだ自分がMVCから脱却してないので、
まずはほぼベタ書き対応でコーディングしてるところ。

__参考__

- [Swift Bond 入門（Bond v4, Swift v2) サンプルあり](http://qiita.com/osamu1203/items/fef97a0bec5d863f48f6)
- [Swift Bondの魅力 〜概念・仕組み編〜] (http://qiita.com/hachinobu/items/2026f157038cae0b9ae6)
- [Swift Bondの魅力 〜実用サンプル編〜](http://qiita.com/hachinobu/items/27a92d480db24511559a)
- [それ、Swift Bondでくっつけちゃおう](https://moneyforward.com/engineers_blog/2016/03/08/swift-bond/)


SwiftDate
-

https://github.com/malcommac/SwiftDate

NSDateを使いやすく拡張してくれるライブラリ。
タイマーとかリマインダーとか時間を扱う系のアプリなので、あると便利かもと思っていれてみた。
が、現時点での実装ではまだ使う箇所が出てきてないので、使い始めたら追記しようかと思います。


Chameleon
-

https://github.com/ViccAlexander/Chameleon

UIColorを拡張したりしてフラットカラーとかをよしなに追加できるライブラリ。
まだデザインいじる部分にまで行ってないので、細かくは後々に調べようかと。

Eureka
-

https://github.com/xmartlabs/Eureka

tableViewを使ったformなんかを簡単に作成できるライブラリ。
リファレンス見て試しに実装してみたけど、1点思ってたのと違う所があり、
変更して使うには結構コード読まなきゃいけなさそうだったので、
ちょっと設定画面で使うのは見送りで（涙。あとで簡単な使い方を記事にします。

SwiftyUserDefaults
-

https://github.com/radex/SwiftyUserDefaults

swiftでのNSUserDefaultsの扱いを楽にしてくれるライブラリ。
ユーザ設定ぐらいのデータはNSUserDefaultsに突っ込んで見ようと思ったので、これ使ってみます。
Realm使うほどでもなさそうなので。

# 今後の予定
開発を進めつつこの記事に進捗を追記して、細かいトピックスは分けて投稿して生きたい。

- とりあえず現状のバージョン

![160705ver.gif](https://qiita-image-store.s3.amazonaws.com/0/59057/a17cbaeb-3785-366d-f69b-0e02a5c81d00.gif)

一通りの機能ができたらリファクタする。
（そんなにコード量も多くならないとは思うのでイケるはず）