Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
iOctocatから学ぶiOSアプリ開発手法 (発表メモ)

iOctocatから学ぶiOSアプリ開発手法 (発表メモ)

全体像

  • Deployment Target: 6.0
  • ARC
  • Universal
  • xib (story boardは利用しない)
  • ターゲットが2つ存在 (iOctocat, iOctocat Beta)
  • CocoaPods
    • bootstrap.sh: bundler経由でインストール
  • HokeyAppをベータ版配布に利用

プロジェクト構成

Classes

  • Extensions
    • 標準APIのカテゴリ拡張
    • メソッド名に接頭辞を付加
  • External
    • 外部から取り込んだクラス (CocoaPodsで管理されていないクラス)
  • Domain
    • ドメインロジック (ビジネスロジック)
  • Services
  • Controller
  • View

Resources

  • Assets
    • シンタックスハイライト用ファイル一式
  • IBFiles
    • xibファイル (story board, autolayoutは使用しない)
  • Images
  • Sounds
    • 効果音

Other Sources

  • IOCApplication
    • UIApplicationの継承クラス
  • IOCAppConstants.h
    • 定数ファイル
  • JLog.h
    • ログ出力のマクロ

Unit Tests

  • Expectaを採用

フィード更新の処理手順

例: News (Events) の更新

関連クラス

  • GHEvents (→ GHCollection → GHResource)
  • GHEvent
  • IOCMyEventsController (→ IOCEventsController → UITableViewController)
  • IOCEventCell (→ IOCTextCell → UITableViewCell)

処理手順

  • IOCMenuController
    • 認証ユーザーに関連するフィードを管理
    • "News": /users/:user/received_events/public (ユーザーが受け取ったイベント)
    • "Activity": /users/:user/events/public (ユーザー自身のイベント)
    • feedsプロパティに2つのGHEventsを格納 (UISegmentedControlの状態でeventsプロパティの値が変化)
    • NSArrayでなくGHCollectionで、オブジェクト群を管理
    • setupPullToRefreshメソッドでデータの取得処理を追加
  • GHEvents (→ GHCollection → GHResource)
    • load*メソッドでデータ取得
    • onLoadSuccessブロックで取得したデータを格納 (setValuesメソッドを経由)
    • 継承先クラスGHEventsで、setValuesメソッドをオーバーライド (jsonデータからオブジェクトクラスへの変換)

Tips

疑問

  • 標準API拡張クラスの名前を "+" でなく、 "_" で表現
  • TableViewCell設計の妥当性
    • オブジェクトの保持
  • クラス接頭辞が複数存在する理由 (IOC, GH)
  • UIApplicationを継承する理由 (iOctocatクラスを分離する理由)
    • MainWindow.xibから初期構成を生成
  • ターゲットを2つに分割するメリット
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment