Skip to content

Instantly share code, notes, and snippets.

Embed
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
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.