2014/2/1
六本木ヒルズ森タワー 14F
- ninjinkun
- Github - ninjinkun
- ブログ
- Feedbackなど作っている
- document.readyStateをみるとローディングの状態がわかる。loading => 未表示、interactive => 表示済み、DOMアクセス可、complete => 完了
- UIWebViewデリゲートをフックして、それをViewControllerに渡す。
- NJKScrolllFullScreen
- デリゲートをフックする
- UIViewController+NJKFullScreenSuppot
- UINavaigationBar, UIToolbarなどUIに関係する部分
- 決定版NSDatFormatter、Web連携系、他の言語にあるがiOSにはない
- GIFを作成するために**Gyazo gif**がよさそう!
- LINEで働いている
- GHFeed - Githubのフィードが読めるアプリ
- ISRefreshControlの人
- Github - ishkawa
-
シンボルの衝突
- クラス名
- カテゴリ名
- 定数
-
リソースの衝突
- mainBundleのリソースがぶつかる
-
クラス名の命名規則
- クラスの命名規則3文字の大文字のprefixを付ける
-
カテゴリメソッドの命名規則
- 小文字のprefixを付ける ish_メソッド名 ことで衝突を避ける
- 同じシグネチャがあると動作が不定になる。
-
定数の命名規則
- 関連するクラス名を頭につける
-
シンボルの衝突
- 開発者でできることはあまりない
- READMEに明記する
- CocoaPods利用を推奨する
- ライブラリ用にbundleを分けて管理する
-
よいインターフェース
- わかりやすい
- 実装を推測できる
- 誤用をさせない
-
よいproperty
- 変更の可否を明確にする
- ライブラリの利用に必要な情報は与える
- ライブラリの利用に不要な情報を与えない
-
readwrite
- どんなタイミングで変更されても整合性が維持できる
readwriteのプロパティの変更があった場合は、クラスの性質を維持する必要がある。例)limit(readonly)とcacheサイズ(readwrite)、chacheサイズを変更した際に、limitも変更する必要がある。
-
よい通知パターン
- 適材適所で利用してゆく
- それぞれに向いているものと利用作法
- blocks
- 通知が特定のメソッドに結びつく
- 通知の種類が少ない
- エラーが想定される場合にはNSErrorも引数に渡す
- delegate
- 通知が特定のオブジェクトに結びつく
- 通知の種類が多い
- 通知の受け手が1つしかいない
- NSNotification
- 通知の受け手が多い
- 通知の送信元と受け手が遠い時
- KVO
- (省略されてしまったー><)
- blocks
- テストを書く理由
- テストを書いたほうが開発が速くなる箇所がある(デモアプリ上でデバッグするよりが速い)
- デモアプリ上では毎回デバッグするのは大変だが、ユニットテストは1度書けば終わり
- Xcode上で
⌘+U
でテストが実行できる - コードが壊れていることをすぐに発見できる
- ライブラリのテストのメリットはコストに見合うことが多い
- CI
- コミット毎にテストを実行する!!!
- ターミナルからビルドを実行できるようにするのが重要。
xcode build
でビルドが実行できる xcodebuild clean text
とオプションを色々指定する- ターミナルからビルドができるようになればそのコマンドをCIサーバに渡すだけ
- CIのサービス
- Travis CI(CIサーバ)
- public repositoryは無料
- Github連携
- status badge (Githubにあるバッジ)
- Coveralls(カバレッジサーバ)
- コードカバレッジがわかる(実行された行と実行されていない行)
- public repositoryは無料
- Github連携
- status badge (Githubにあるバッジ)
- Travis CI(CIサーバ)
- 深津貴之(fladdict)
- THE GUILDEという会社でデザインとエンジニアリンの両方をやっている
- デザインはスタイリッシュにすることではない
- デザインは設計
- 目的を提案・解決する(デザイン)
- 満足を与える => UXデザイン
- 使いやすくする => UIデザイン
- わかりやすくする => 情報デザイン
- 満足を与える => UXデザイン
- この階層の下に、スタイリッシュにするなどの手段がある。
- 複雑な問題を整理して解決すること = デザイン
- デザイナー = ユーザに直接影響を与える&コンセプトを伝えるエンジニア
- UIデザインの本質は明示的に宣言すること
- レイヤー構造
- 視覚的にはフラット、構造的には多層化
- ジャイロを用いたパララックス
- オブジェクトAがオブジェクトBの後ろにあるということを表現するため
- コンテンツとナビゲーションを分離するための手がかりになる。
- 曇りガラス上のブラー
- 「一時的なステートであること」を明示的に宣言
- 「前のステートに戻れることへの保障」
- 完全に別画面にしてしまうと現在位置を喪失してしまう。
- ズームアニメーション
- どのオブジェクトが選択されているかをユーザに伝える
- ナビゲーション中心でなく、コンテンツ中心
- カラー
- 10色のテーマカラーから選択されている
- 「どこをおせるのか」問題への対策
- 手触りも全て意味がある
- 視覚言語 = 文字と同じようにメッセージを伝える
- アニメーション
- 特定の場所に注目が集められる
- 状態の変化の通知
- 一瞬の変化は知覚できない
- 一瞬の変化は信用されない
- わざと時間をかけたほうが良いこともある
- 操作ができない時間に対する待ちを意識させない
- 効果音/振動
- 画面を見ていないユーザに通知できる
- 長い処理等でユーザは他のことに注意を向けられる(音に気づける)
- デザインはセンスではなくエンジニアリング
- しっかりしたデザインは位置、色、動き、音、あらゆることに意味と目的がある
- 岸川克己
- ドキュメントがない、サンプルもない?、現状イマイチわかりにくい
- Objective-C <-> JavaScriptのブリッジ
- Objective-CからJavaScriptを実行する。その逆も可能。Objective-CとJavaScriptのオブジェクトの相互変換
- サンプルコード
- downloadable-ios-apps
- JavaScriptBridge
JSContext *context = [[JSContext alloc] init];
JSValue *result = [context evaluateScript:@"2 + 8"];
NSLog(@"%d",result.toInt32);
- JSVirtualMachine
- シングルスレッドのJS仮想マシン
- JSは基本シングルスレッド。実行時はJSVirtualMachineが作成される。
- 複数スレッドを利用したいときは、JSVirtualMachinwを複数作成する。
- JSContext
- JSの実行コンテキスト
- JSValue
- オブジェクトのラッパー
- 一部のロジックをJavaScriptでき術
- WebやAndroidなど別のプラットフォームと共通化する等 = GOOD
- JavaScriptで書かれたライブラリを使う
- 例
- はてな記法 Parser - text-hatena.js
- Texile Parser - textile.js
- JSONの圧縮 - JSONH
- 例
- JSExport
- JavaScriptに公開するObjective-Cのオブジェクトを作成する(JSWindow)
- Objective-Cのオブジェクトを作成する(UIWindow->JSWindow)
- JS側からはそれを見て処理を実行する
- 既存のクラスをJSExportに適用させる
- springboardはspringboard, backgrounddにわかれたiOS7で
- HBFavとは
- はてなブックマークをツイッターみたいに見れるアプリ
- Githubにソースがある
- RubyMotionで書いている
- リモートのリソースは非同期で取得
- DrawInRectで直接書き込んでしまう。
- AFNetworkingをとりあえず使う
- モールス信号でWifi情報を送信してIRKitにつたえる
- @tamotamago
- バックグラウンド状態を続けるために
- 無音音楽を流す
- AVAudioSessionで必要な手続きをする
- そういうい実装が必要なときは資料が参考になるかも
- MPNowPlayingInfoCenterでアートワークをいじることができる
- YSViewer
- Tweetbotぽい見た目
- Stop-Walking-iPhone
- 歩きスマホするときに警告出る
- Gyazoを利用してREADMEを更新する
- cocoapodsのfeed/twitterアカウントをフォローする。
- fuckingblocksyntax.com
- UnitTestについて調べる
- TravisCIとCoverallsは使う!!!!!
- Stores.jp調べてみる。