読者です 読者をやめる 読者になる 読者になる

iOSのフレームワークNimbus(version1.0.0)をざっくり調べた日本語メモ

深津さんの記事で取り上げられていて、Google Mapsアプリで使われているという、iOSのNimbusフレームワークをざっくり調べた。ソースコードを眺めて、何やってるのかなぁ?!使えるのかなぁ?!という日本語メモを書いています。ソースコードとオフィシャルドキュメントの構造に対応しています。

文章の中身は個人的なものなので適当ですいません。

テーブル生成を簡単にしてくれたり、外部アプリ連携コードを楽できたり、画像ビューワー機能の下地を提供してくれたりします。特定ユースケースに依存してる感があって、若干クセがありますが、うまくハマったら良いと思います。

Attributed Label

  • 【特徴】 UILabelのサブクラス
  • 【何に使うと美味しいの?】 自動リンク対応のリッチテキストViewが実現できる
  • 【評価ポイント、雑感】 英語向けかもしれないので日本語で役に立つか

Badge

  • 【特徴】 通知バッジみたいなViewを簡単に実現できる。
  • 【何に使うと美味しいの?】 アプリ内での新着表示等メッセージ
  • 【評価ポイント、雑感】 これは使えると思う。

CSS

NIChameleonObserver(CSS)

  • 【特徴】 サーバー上のCSSファイルが差し替わったら通知をあげるファイルを読み込んでCSSを適用するクラス
  • 【何に使うと美味しいの?】 だいぶリッチなクラス。この機能を作ったきっかけの機能なのだろう。サーバサイドにあるCSSを使って動的に画面表示を変更したい時に使う。
  • 【評価ポイント、雑感】 そういうユースケースにぶちあたったら要チェック!そうでなければ無視して良い。サーバサイドサンプルはnode.js

NICSSParser(CSS)

  • 【特徴】 CSS Parser 直接使わず、NIStyleSheetから使うことを推奨とのこと。ベーシックな機能のみを提供するらしい。 スレッドセーフではなく、NIStyleSheet内でsynchronizedされている。

    NICSSRuleset(CSS)

  • 【特徴】 CSSのルールセットを変換して保持するクラス NIStyleSheetによってキャッシュされる。 メモリ不足になった場合は、削除されます。

    NIDOM (CSS)

  • 【特徴】 viewをDOMのように扱うシンプルなクラス NIStyleSheetで読み込んだCSSをviewに割り当てる時に使う。
  • 【何に使うと美味しいの?】 Viewのバックグラウンドカラー(イメージではない)やUILabelなどのスタイルを外部CSSからコントロールできる。
  • 【評価ポイント、雑感】 これはとても強力。

NIStyleableプロトコル (CSS)

  • 【特徴】 viewのパーツ毎に何のスタイルが適用されるか?を設定するために必要な拡張記述
  • 【何に使うと美味しいの?】 styleのルールセットを適用するのに必要
  • 【評価ポイント、雑感】 普通に使う。既に多数の標準コントロールの拡張は定義されてるので必要に応じて変更することになる。

NIStyleSheet (CSS)

  • 【特徴】 本機能の総本山クラス。 CSSをファイルから読み込むメソッドで起動。あとからスタイルをマージ(追加)することもできる。 あんまりグニャグニャ足したり引いたりはできない感じか?!(不可能ではなさげ)

NIStylesheetCache(CSS)

  • 【特徴】 インメモリキャッシュにCSSをキャッシュする。NIStyleSheetのサブクラス
  • 【何に使うと美味しいの?】 カメレオンサーバーと使えと書いてある。アプリ全体で一箇所に保存するCSSを管理するキャッシュクラスとのこと。 document objectにスタイルobjectを出しいれするためだけのクラス。
  • 【評価ポイント、雑感】 カメレオンサーバーを使わないなら無視。

Core

Nimbus libraryの必須クラスで、便利な機能を提供している。

Common Metrics (Core)

  • 【特徴】 ツールバーやステータスバーのサイズを画面の縦横やデバイスにあわせて調整するクラス
  • 【何に使うと美味しいの?】 ツールバーのサイズやアニメーションで画面外のサイズを考慮しなくても良い
  • 【評価ポイント、雑感】 定数の塊みたいなものなので、読めるようにしておく。

Data Structures (Core)

  • 【特徴】 LinkedListを提供している。インメモリキャッシュを実現するのに最適だとのこと。NSArrayは一定期間によるremoveがしづらく、NSSetやNSDictionaryでは順番がない。
  • 【何に使うと美味しいの?】 片方向リンクリスト。オブジェクトの一定時間での削除と挿入を提供している。 NIMemoryCacheの中で利用されていおり、効率的なコレクションを提供する。インメモリキャッシュは数千ものオブジェクトを持つことができるが高速なenumerationを提供する。NSArrayでは指数関数的に遅くなってしまう可能性がある。
  • 【評価ポイント、雑感】 普通に使いましょ。

Debugging Tools (Core)

  • 【特徴】 デバッグコードを埋め込むマクロが主体
  • 【何に使うと美味しいの?】 デバッグ用の記述が簡単になる
  • 【評価ポイント、雑感】 ログレベルに応じて、必要な時だけにログ出力するなどができる。使えるようになると楽。

Device Orientation (Core)

  • 【特徴】 デバイス回転に対するちょっとした便利機能を提供
  • 【何に使うと美味しいの?】 中で使われているので要チェック。自分で使うのはどうだろう。
  • 【評価ポイント、雑感】 回転情報を返す、回転のアフィン変換を生成、回転定義をの分岐を自動化するの巻。

Errors (Core)

  • 【特徴】 nimbus用のエラー定義。

Foundation Methods (Core)

よく使うクラスのちょっとしたコードを共通化

CGRect Methods (Core)

あんまり使えなくね? - 右端と下端を小さする(大きくする)RectMake - viewの中心に配置するRectMake - UILabelに書いてある文字列のサイズを返す

General Purpose Methods (Core)

  • 最大、最小のリミット範囲を超えたらリミットを返すメソッド。CGFloat版およびNSInteger版。

NSData Methods (Core)

CommonCryptoをクラス化 https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/CC_SHA.3cc.html - MD5のハッシュデータを返す。 - SHA1のハッシュデータを返す

NSRange Methods (Core)

同じ値を持つNSRangeを生成するメソッド。入力値によっては予期しない動作をすることもあるので注意とのこと。

NSString Methods (Core)

空白と改行だけの文字列かどうかを調べる

・・・このクラスは特定用途のローカルメソッドの集合体のようです。スルーするかコピーするかしてもいいんじゃないかな。

In- Memory Caches (Core)

  • 【特徴】 通常のキャッシュは時間でexpireするメモリキャッシュ、画像対応の場合はトータルのピクセル数に抑えるキャッシュを提供する。
  • 【何に使うと美味しいの?】 大量のデータを格納する場合に、expireの考慮がされているのと、高速なイテレータを使うことができる(らしい)

Network Activity (Core)

  • 【特徴】 複数の通信タスクが存在する時にNetwork Activity Indicatorの制御をイイ感じに行う。
  • 【何に使うと美味しいの?】 複数スレッドの通信が存在する時に、読み込み表示を良い感じにやってくれる。
  • 【評価ポイント、雑感】 なるほど!必要だね。スレッドセーフに処理をしてくれる。 テスト用メソッドもあるそうです。テスト用メソッドはDEBUGマクロが設定されている時のみ動作

Non- Empty Collection Testing (Core)

  • 【特徴】 以下の多種のチェック機能をNSArrayなどに拡張してくれる ・このオブジェクトは配列かつデータがemptyではないか? ・このオブジェクトは、NSSetでかつデータがemptyではないか? ・このオブジェクトは、NSStringかつデータがemtpyではないか?

Non- Retaining Collections (Core)

  • 【特徴】 retainされてないコレクションを生成する。
  • 【何に使うと美味しいの?】 単一のdelegateを生成する時にリファレンスのないコレクションを生成すると美味しいらしい。
  • 【評価ポイント、雑感】 参照をさせないコレクションとdelegateとの関係性、有用性が理解できないので深堀するなら調べること。 この辺参照 http://stackoverflow.com/questions/4692161/non-retaining-array-for-delegates

Operations (Core)

  • 【特徴】 NSOperationにdelegateとblockを拡張実装している。
  • 【何に使うと美味しいの?】 operationの実行情報をdelegate先に渡す。
  • 【評価ポイント、雑感】 他の実装をよく見る。

Paths (Core)

  • 【特徴】 内部リソースを呼び出すパス周りの処理 Bundle,document,library,cacheリソースのパスを簡単生成

Preprocessor Macros (Core)

  • 【特徴】 プリプロセッサーマクロ 色のRGBを簡単に設定できますマクロ、retain,weak周りのヘルパーマクロ、カテゴリーのバグを修正するマクロ
  • 【何に使うと美味しいの?】 includeするだけで設定oKとか。
  • 【評価ポイント、雑感】 利用例から把握すること

Runtime Class Modifications (Core)

  • 【特徴】 2つのクラス間のインスタンスメソッド、クラスメソッドを入れ替える。
  • 【何に使うと美味しいの?】 わからん
  • 【評価ポイント、雑感】 利用例から把握すること

SDK Availability (Core)

  • 【特徴】 各種判別処理 iPad ? Retina ? PopoverContollerが使える?(何度も実行しないで調べる)、画面のscale取得、OSバージョン
  • 【何に使うと美味しいの?】 こういうのよく使う。
  • 【評価ポイント、雑感】 利用例から把握すること

Snapshot Rotation (Core)

  • 【特徴】 snapshotベースの回転を実装するためのクラス
  • 【何に使うと美味しいの?】 イマイチよくわからないが、カッコイイ回転方法に関する機能らしい。
  • 【評価ポイント、雑感】 WWDC2012のセッション240にてプレゼンされていたものだそうです。

State (Core)

  • 【特徴】 データ管理。メモリキャッシュを二度目に保存されても上書きしない、とか、そういう類のもの。 おそらくライブラリで使われているものなので。

  • 【何に使うと美味しいの?】 わからん

  • 【評価ポイント、雑感】 利用例から把握すること

View Recyling (Core)

  • 【特徴】 UIScrollViewが絡むもので、Viewのリサイクルをする。
  • 【何に使うと美味しいの?】 スクロール画面外に行ったものでリサイクルできるViewがあれば、それを使い、そうでなければ新たに生成するという処理を書くことでメモリ保護に繋がる。
  • 【評価ポイント、雑感】 利用例を確認したい。

Interapp

  • 【特徴】 ファイルをtwitter,facebook,instagramのアプリに送る。アプリがない場合はAppStoreへ案内する。
  • 【何に使うと美味しいの?】 簡単に外部連携ができる。ファイルが対応していればUIDocumentInteractionControllerに渡すと対応アプリが表示される。
  • 【評価ポイント、雑感】 シンプルに外部アプリ連携ができるところがポイント。OAuthなどを実装せず連携化。

Launcher

  • 【特徴】 iOSのホームスクリーンのようなアイコンとスクロールビューの画面が作れる
  • 【何に使うと美味しいの?】 そういうユースケースの場合に使おう。
  • 【評価ポイント、雑感】 こういう機能が不要でも、各クラスの実装が参考になるケースがある。^ またviewの再利用が使われているので、参考になる。

Models

  • 【特徴】 テーブル生成に関するデータソースロジックを自動化してくれる。
  • 【何に使うと美味しいの?】 わかりやすい。OOPのは、バラバラでわかりにくかった。

Model Tools (Models)

  • 【特徴】 Radioボタン型のTable Viewをハンドリングする、Table Viewがクリックされた時のアクションとをひもづける、など共通機能

Table Cell Backgrounds (Models)

  • 【特徴】 テーブルのセル背景の調整をするクラス。
  • 【何に使うと美味しいの?】 よくわからん。何故か画像キャプチャして返すメソッドがある。イマイチ謎。どこかで使われてると思う。

Table Cell Catalog (Models)

  • 【特徴】 NICellObjectを元に、さまざまな形のTable Cellに拡張したもの。
  • 【何に使うと美味しいの?】 いろんなViewが実現できます。必須

Table Cell Factory (Models)

  • 【特徴】 本機能の基本機能。FactoryメソッドによるCell生成機能。NICellObjectを継承したクラスを生成する処理で活躍中。

Table View Models (Models)

  • 【特徴】 Table処理のメインクラス。重要。

Network Controllers

  • 【特徴】 ローディングの表示を行うコントローラ
  • 【何に使うと美味しいの?】 どこかで活用しているんでしょう。UITableを新規生成している。
  • 【評価ポイント、雑感】 必要なところにaddSubViewすればいいのか。

Network Image

  • 【特徴】 ネットワーク対応のImageView。クロッピング、サイズ変更を自動してくれて適切なメモリ管理をする。
  • 【何に使うと美味しいの?】 ・キャッシュ管理(自動解放) ・非同期リクエスト ・リサイズ、クロッピング
  • 【評価ポイント、雑感】 概ね問題なさそう。

Overview

Overviewはアプリの現在状態を知るためのデバッギングツール

Logger

Log Entries (Logger)

  • 【特徴】メモリ使用量、バッテリーレベルなどデバイス情報をログしたり、今のタイムスタンプを取ったり。NIDeviceInfoと連携してます。
  • 【何に使うと美味しいの?】 デバッグツールの内部クラス。

Overview (Logger)

  • 【特徴】 本機能のメインクラス。アプリ起動時にメインWindowに寄生させてよしなにやってくれるらしい。

Pages (Logger)

  • 【特徴】Graph等を描画するクラス

Sensors (Logger)

  • 【特徴】システム情報を取得するクラス
  • 【何に使うと美味しいの?】 LowMemoryWarningを出すメソッドもある。
  • 【評価ポイント、雑感】 システム情報を取得するコードは、参考になる。

Paging Scroll View

  • 【特徴】 横スクロール型のスクロール&ページング機能のView。ページ表示のオブジェクトをリサイクルしてくれる。
  • 【何に使うと美味しいの?】 上記UIが生きる場合。
  • 【評価ポイント、雑感】 多数のページを管理することができるので、こういうViewのニーズはなくとも、メモリ管理は参考になると思う。

Photos

  • 【特徴】 PhotoViewerクラス。NIPaginScrollViewに依存している。
  • 【何に使うと美味しいの?】 画像アルバムタイプのUIを作るなら是非参考にしたい。
  • 【評価ポイント、雑感】 若干リッチすぎるので全然違うものへの改造は大変かも。

Web Controller

  • 【特徴】 WebViewを少しリッチにしたような感じ。
  • 【何に使うと美味しいの?】 簡単にこういう機能が組み込めるってことだと思う。
  • 【評価ポイント、雑感】 さくっと戻る進むのI/FがついたWebブラウザが追加できる。