swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(1) - 事前準備する

## はじめに

swiftはほとんど未経験ですが、SmartNews風ニュースアプリを作ってみて、その過程をさらしてみようと思います。
同じような境遇にいる方の参考になれば幸いです。

## 作成中のアプリ

現在の進捗はこんな感じです。投稿の方が追いつかなくなっていますが、随時追記します。。。

![20160111_23_35](https://cloud.githubusercontent.com/assets/901084/12236377/b2c84b28-b8bc-11e5-815f-863fdc4f687a.gif)

ソースコードはこちらに晒しています。:bow:

[tjnet/NewsAppSwiftMVVM](https://github.com/tjnet/NewsAppSwiftMVVM)

~~[tjnet/NewsAppWithSwift: News App like Smart News](https://github.com/tjnet/NewsAppWithSwift)~~


## 今後の予定

長くなるので、今後、何回かに分けて次のような記事を書いていこうと思います。

- プロトタイプ作成 [**公開しました!**]
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(2) - 横スクロールするメニューバーを実装](http://qiita.com/tjnet/items/e205c43c35a187f60ecc)  
- メニューバーの外観をSmartNewsライクなものに更新 [**公開しました!**]
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(3) - PageMenuライブラリを改造して外観をブラッシュアップ](http://qiita.com/tjnet/items/dc0ee7cb9ccfaa7111d8)
- Carthageを用いた通信用ライブラリの導入  [**公開しました!**]
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(4) - Carthageを用いてAlamofireとSwiftyJSONを導入する](http://qiita.com/tjnet/items/aa268821346583c8795d)
- App Transport Securityに対応　[**公開しました!**]
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(5) - ニュースアプリにおけるApp Transport Securityについて考える](http://qiita.com/tjnet/items/d2ea5dd425bc51f92996)
- 記事の一覧/詳細/サムネイルを表示
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(6) - Alamofire + Object Mapper + Realm + SDWebImageで最低限動くニュースアプリを作る] (http://qiita.com/tjnet/items/2a51c655cbc1d9b3000b) [**公開しました!**]
- 関心事を分離する
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(7)　- MVVMで関心事を分離する手法を学ぶ](http://qiita.com/tjnet/items/e26efd33b896434b0f66)[**公開しました!**]
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す(8)　- RxSwiftを用いてMVVMを実装する](http://qiita.com/tjnet/items/262a27363b52ddbec3eb)[**公開しました!**]
- テストを書く
 - [swift初心者がSmartNews風ニュースアプリを作ってみる過程を晒す\(9\)　\- DIとMockを使用したテストを書く ](http://qiita.com/tjnet/items/81b44a5d64f28a01b3cf)[**公開しました!**]



## 前提知識

事前に読んでおくと良さそうなリンクをまとめてみました。

### UI component

- [Build a Basic UI](https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson2.html)

簡単なサンプルアプリ'FoodTracker'を使用して、シンプルなUI elementsの作成/編集/配置方法や、ストーリーボードのpreview機能の使い方を学ぶことが出来ます。

### Auto Layout

- [Auto Layout Tutorial in iOS 9 Part 1: Getting Started](http://www.raywenderlich.com/115440/auto-layout-tutorial-in-ios-9-part-1-getting-started-2)
- [Auto Layout Tutorial in iOS 9 Part 2: Constraints](http://www.raywenderlich.com/115444/auto-layout-tutorial-in-ios-9-part-2-constraints)

Auto Layoutを用いて、複数のデバイスサイズに対応するアプリを作成する手法を学びます。アップデートされてiOS9, Xcode7, Swift2に対応しています。

### Page view controller

- [Page View Controllers](https://developer.apple.com/library/prerelease/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/PageViewControllers.html#//apple_ref/doc/uid/TP40011313-CH4-SW3) 

Page View Controllerはアプリの概要を説明する為の、ページングするチュートリアル等を作成する為に使用します。ここでは公式ドキュメントでPage View Controllerの中身について理解します。実際の実装については、ググればいくらでも出てくると思います。

### APIとの通信

- [[Swift] AlamofireでApiを叩いて、SwiftyJSONでレスポンスデータを展開する](http://qiita.com/tsumekoara/items/9bbb429f41e40c76882c)

APIを叩いて、JSONをパースする手法を学びます。

ちょっと古い記事ですが、こちらも参考になりそう。

- [Alamofire Tutorial Part 1: Getting Started](http://www.raywenderlich.com/85080/beginning-alamofire-tutorial)
- [Alamofire Tutorial Part 2: Progress and Caching](http://www.raywenderlich.com/87595/intermediate-alamofire-tutorial)


### デバッグ技法

- [Using Debugging and Performance Analysis Tools](https://developer.apple.com/support/debugging/)

Xcodeが提供するデバッグツール、パフォーマンス解析ツールを紹介しています。

- [View Debugging in Xcode 6](http://www.raywenderlich.com/98356/view-debugging-in-xcode-6)

重なり合うviewの状態やsizeを、Xcodeを用いて視覚的に把握する手法を学びます。
これを知っているだけで、開発中のアプリケーションの理解度やデバッグの効率がかなり変わってくると思います。

### Realm

- [Swift + Alamofire + ObjectMapper + Realm](http://qiita.com/SatoshiN21/items/d09f9e028c129ef567c1)

Realmの使用を検討しています。ネットワーク経由で取得したニュース記事をパースしてDBに保存し、DBに保存したデータをTableViewに表示、という流れで実装してみたいとと思います。

### UIViewControllerのライフサイクル

- [iOS Essentials: The UIViewController Lifecycle](http://roadfiresoftware.com/2015/01/ios-essentials-the-uiviewcontroller-lifecycle/)

UIViewControllerのライフサイクルに関与する主要なメソッドについて学びます。


### Applicationのライフサイクル

- [The App Life Cycle](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html)

iPhoneアプリのライフサイクル、エントリーポイント、Main Run Loop、スレッドなどについて学びます。

### SmartNews風のUI

- [【iOS】スクロール可能なメニューバーを持つViewControllerをオープンソースとして公開しました](http://tech.recruit-mp.co.jp/mobile/scrollable-menu-bar-view-controller/)
- [recruit-mp/RMPScrollingMenuBarController | GitHub](https://github.com/recruit-mp/RMPScrollingMenuBarController)

Objective-Cで実装されているライブラリです。リクルートの方が作成されているようです。

- [[iOS] SwiftでSmartNewsみたいな、横スワイプで画面を切り替えるライブラリを作りました ](http://hayatomo.com/1462)
UIPageViewControllerで実装されているライブラリです。swift製です。

- [【iOS】複数のtableviewとCoreDataを用いて、APIから取得した記事をカテゴリごとに分類する【SmartNews風】]
 (http://tjnet555.hatenablog.com/entry/2014/11/30/155914)

...


### ニュース記事のソース

このあたりを使っても面白そうです。

- [Menthas(メンタス)](http://qiita.com/ytanaka/items/a0144b623a8dd7fcdbbe)




## 参考

- [Webデザイナーだけど初めてのiPhoneアプリを7日間で開発した手順と利用ツール](http://websae.net/iphone-app-develop-20131105/)
- [Swiftの勉強をするために、Swiftでアプリを一から作ってみた話](http://qiita.com/k_kinukawa/items/767eb305d888e85c6b4e)
- [はじめてiOSアプリを開発してみる人のブートストラップ(swift2/2015夏編)](http://qiita.com/hiro93n/items/3936f9e5071e70180707)
- [iOS初心者がSwiftでグノシーみたいなタブ型RSSリーダーを作ってみた](http://x1.inkenkun.com/archives/909)
- [What skills would I need for a job as an iOS developer?](http://roadfiresoftware.com/2015/01/what-you-need-to-know-to-land-a-job-as-an-ios-developer/)
- [年末年始に読みたいSwift勉強のためのおすすめ本・書籍やサイトなど（追記あり）](http://himaratsu.hatenablog.com/entry/swift/books)