はじめに
[Android版]
(https://qiita.com/takaaki7/items/92af58c55dca39a4faed)のオープンソースアプリ集はあるがiOS版が存在しなかったので投稿しました。
選定基準は以下の通りです。
- 使用者数が百万人レベルを超えている?
- コードのほとんどがSwiftあるいはObjective-Cで実装されている(ハイブリットアプリや非UI部分がC/C++で実装されたアプリ(VLC、Chrome等)は除く)。
- アプリではなくても主要なUIが公開されている(TwitterKit)。
Wikipedia (GitHub) (AppStore)
- 典型的なMVC+iOSのマナーに沿ったクラス構成。
- 普通な開発組織が目指すべき実装?
- Swiftに移行中でほぼ完了している。
- 行動分析系の処理の設計は参考になる(〜Funnelクラス)。
- カテゴリークラスの設計方法は参考になる。
- モデルにはほとんどテストを入れている。UIは一部はSnapshotをとってテストを入れている。
WordPress (GitHub) (AppStore)
- Swiftに移行中
- AppDelegateが肥大化していたり、UIとModelが混じっているところあったりして、クラス設計の健全度はWikipediaより劣る。
Kickstarter GitHub (AppStore)
- 有名な実装。MVVM+ReactiveCocoaを使用
- Swiftで実装
- テストを含めてこの実装は精鋭で固めないと無理?
- ViewModelまでがっつりテストを書いている。一部のViewはスナップショットを撮っている。
FireFox (GitHub) (AppStore)
- オブジェクト指向的なクラス分割はあまりしてない?
- UI系のユニットテストには力を入れていて、KIF+Earl Grayをフルに活用しており、その面では非常に参考になる。
TwitterKit (GitHub)
- アプリではないが主要部分が公開されている?のでここに載せる。
- 典型的なMVC
- MVCにかかわらずモデルからView、ViewControllerまでテストコードがある。プロダクト、テストコードともObjective-Cなのが残念なところ。
- View、ViewController系のテストはメソッドを叩いてDelegateが呼ばれるか否かを確認するようなクラス設計の健全性を担保するのみのテスト。
- これも普通な開発組織が目指すべき実装なので、Swiftで作り直して欲しい。。。
CotEditor (GitHub) (AppStore)
- Mac アプリだがコードが綺麗なのでここに載せる。
- 典型的なMVCでNSViewControllerを活用した構成。
- 直感的な非常にわかりやすい構成。
- モデル層のみテストを入れている。
VLC (GitHub) (AppStore)
- 動画プレーヤーのiOS版
ProtonMail (GitHub) (AppStore)
- メールアプリ