iOS開発の知識体系と情報ソース

## この記事は
iOSアプリ開発に必要な知識体系と、その知識を得るための情報ソースについてまとめています。
他によいソースなどあればコメントいただけますと幸いです。


## iOS開発の知識体系
五月雨に学んでいくことももちろん必要ですが、体系立てて学んでいくことも大事ですね。
iOS開発に必要な知識は、大きく以下のように分類できるかと思います。

- Swift
- Apple Frameworks
- 3rd party libraries
- Test / CI / CD
- Architecture / Design Patterns

<img src="https://qiita-image-store.s3.amazonaws.com/0/61274/2fc8b47d-740f-4470-b2a0-6515c56fe61d.png" width=400>

以下、各知識領域に対して、情報を得られるソースを紹介します。


## swift

### swift2
- [The Swift Programming Language](
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/)
    - iBooksにもある
    - 初めての人は [Swift Tour](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-ID1)から
    - 一回読めば、あとは[Revision Histtory](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/RevisionHistory.html#//apple_ref/doc/uid/TP40014097-CH40-ID459)を追えばよい
- [詳解 Swift](http://www.amazon.co.jp/Swift/dp/4797386258/ref=dp_ob_image_bk) 🇯🇵
    - swift2.0

###　swift3.0 以降
- [apple/swift CHANGELOG](https://github.com/apple/swift/blob/master/CHANGELOG.md)
    - 差分はこれが一番正確な気がしています。
- [swift evolution](https://github.com/apple/swift-evolution)
    - 言語仕様に関する議論が行われている場
    - 議論自体はML上で活発らしい
    - 3.0でどう変わるかなどが分かる
- [Swift Weekly Breif](https://swiftweekly.github.io/) by [@jesse_squires](https://twitter.com/jesse_squires)
    - OSSでどんな変化が起きているかのまとめ

- [Swift.org](https://swift.org/)
    - 本家
    - [**API Design Guidelines**](https://swift.org/documentation/api-design-guidelines/) 今後はこれが必見になるはず

OSS化で、流れを追うには英語が必須になった印象です。

## Apple Frameworks

- [iOS Developer Library](https://developer.apple.com/library/ios/navigation/)
    - 膨大な量の資料があります。
    - References
    - UI関連のガイド
        - [View Controller Programming Guide for iOS](https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/)
        - [View Programming Guide](https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Introduction/Introduction.html)
        - [TableView Programming Guide](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/AboutTableViewsiPhone/AboutTableViewsiPhone.html)
        - [CollectionView Programming Guide](https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CollectionViewBasics/CollectionViewBasics.html)
        - [ScrollView Programming Guide](https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/UIScrollView_pg/Introduction/Introduction.html)
- [日本語ドキュメント](https://developer.apple.com/jp/documentation/) 🇯🇵
- 種々の本・ブログ 🇯🇵

## 3rd party　libraries
- 最近使用しているもの
    - [Result](https://github.com/antitypical/Result)
    - [APIKit](https://github.com/ishkawa/APIKit)
    - [ReactiveCocoa ](https://github.com/ReactiveCocoa/ReactiveCocoa)
    - [Pop](https://github.com/facebook/pop)
    - [Alamofire](https://github.com/Alamofire/Alamofire)
- 書き方の参考になる
- Generics, Protocol, Enumなどを活用しているものが多い

## Test / CI /CD
- XCTest
    - Appleのテストフレームワーク
- [Quick](https://github.com/Quick/Quick)
    - Test Framework
    - 読みやすい
- [fastlane](https://github.com/fastlane/fastlane)
    - CD
- [circle ci](https://circleci.com/)

## Architecture / Design Patterns
- 種々Blog


## その他全般
- [This week in Swift](https://swiftnews.curated.co/) by [@NatashaTheRobot](https://twitter.com/NatashaTheRobot)
- [Realm news](https://realm.io/news/)
    日本語もありますが、英語の方が記事数が多いです。



## まとめ
- 英語の方が情報も速く、正確です。OSS化でますますその傾向が強くなりました。
- AppleのFrameworkは、swiftほど劇的には変化していないので、古い日本語の書籍などでも参考にできると思います。