Skip to content

Instantly share code, notes, and snippets.

@morizotter
Last active August 29, 2015 13:55
Show Gist options
  • Save morizotter/8764917 to your computer and use it in GitHub Desktop.
Save morizotter/8764917 to your computer and use it in GitHub Desktop.
ConferenceWithDevelopers2 自分用メモ

ConferenceWithDevelopers2

2014/2/1
六本木ヒルズ森タワー 14F

[1] Githu活動を通して個人のキャリアを積みつつ仕事の成果を出す方法

NJKWebViewProgress(WebviewのProgressを取得する)

  • document.readyStateをみるとローディングの状態がわかる。loading => 未表示、interactive => 表示済み、DOMアクセス可、complete => 完了
  • UIWebViewデリゲートをフックして、それをViewControllerに渡す。

NJKScrollFullScreen

  • NJKScrolllFullScreen
    • デリゲートをフックする
  • UIViewController+NJKFullScreenSuppot
    • UINavaigationBar, UIToolbarなどUIに関係する部分

どんなものを公開するとよいか?

  • 決定版NSDatFormatter、Web連携系、他の言語にあるがiOSにはない

表現を工夫する

  • GIFを作成するために**Gyazo gif**がよさそう!

[2] 公開用Objective-Cの書き方

  • LINEで働いている
  • GHFeed - Githubのフィードが読めるアプリ
  • ISRefreshControlの人
  • Github - ishkawa

衝突

  • シンボルの衝突

    • クラス名
    • カテゴリ名
    • 定数
  • リソースの衝突

    • mainBundleのリソースがぶつかる

衝突の解消

  • クラス名の命名規則

    • クラスの命名規則3文字の大文字のprefixを付ける
  • カテゴリメソッドの命名規則

    • 小文字のprefixを付ける ish_メソッド名 ことで衝突を避ける
    • 同じシグネチャがあると動作が不定になる。
  • 定数の命名規則

    • 関連するクラス名を頭につける
  • シンボルの衝突

    • 開発者でできることはあまりない
    • READMEに明記する
    • CocoaPods利用を推奨する

リソースの衝突

  • ライブラリ用にbundleを分けて管理する

良い@interface

  • よいインターフェース

    • わかりやすい
    • 実装を推測できる
    • 誤用をさせない
  • よいproperty

    • 変更の可否を明確にする
    • ライブラリの利用に必要な情報は与える
    • ライブラリの利用に不要な情報を与えない
  • readwrite

    • どんなタイミングで変更されても整合性が維持できる

    readwriteのプロパティの変更があった場合は、クラスの性質を維持する必要がある。例)limit(readonly)とcacheサイズ(readwrite)、chacheサイズを変更した際に、limitも変更する必要がある。

  • よい通知パターン

    • 適材適所で利用してゆく
    • それぞれに向いているものと利用作法
      • blocks
        • 通知が特定のメソッドに結びつく
        • 通知の種類が少ない
        • エラーが想定される場合にはNSErrorも引数に渡す
      • delegate
        • 通知が特定のオブジェクトに結びつく
        • 通知の種類が多い
        • 通知の受け手が1つしかいない
      • NSNotification
        • 通知の受け手が多い
        • 通知の送信元と受け手が遠い時
      • KVO
        • (省略されてしまったー><)

ユニットテスト

  • テストを書く理由
    • テストを書いたほうが開発が速くなる箇所がある(デモアプリ上でデバッグするよりが速い)
    • デモアプリ上では毎回デバッグするのは大変だが、ユニットテストは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にあるバッジ)

[3] デザインのわかるプログラマになる

  • 深津貴之(fladdict)
  • THE GUILDEという会社でデザインとエンジニアリンの両方をやっている

デザインとは

  • デザインはスタイリッシュにすることではない
  • デザインは設計
  • 目的を提案・解決する(デザイン)
    • 満足を与える => UXデザイン
      • 使いやすくする => UIデザイン
    • わかりやすくする => 情報デザイン
  • この階層の下に、スタイリッシュにするなどの手段がある。
  • 複雑な問題を整理して解決すること = デザイン
  • デザイナー = ユーザに直接影響を与える&コンセプトを伝えるエンジニア
  • UIデザインの本質は明示的に宣言すること

iOS7のフラットデザインを理解する

  • レイヤー構造
    • 視覚的にはフラット、構造的には多層化
    • ジャイロを用いたパララックス
      • オブジェクトAがオブジェクトBの後ろにあるということを表現するため
      • コンテンツとナビゲーションを分離するための手がかりになる。
    • 曇りガラス上のブラー
      • 「一時的なステートであること」を明示的に宣言
      • 「前のステートに戻れることへの保障」
      • 完全に別画面にしてしまうと現在位置を喪失してしまう。
  • ズームアニメーション
    • どのオブジェクトが選択されているかをユーザに伝える
    • ナビゲーション中心でなく、コンテンツ中心
  • カラー
    • 10色のテーマカラーから選択されている
    • 「どこをおせるのか」問題への対策
  • 手触りも全て意味がある

視覚言語

  • 視覚言語 = 文字と同じようにメッセージを伝える
  • アニメーション
    • 特定の場所に注目が集められる
    • 状態の変化の通知
    • 一瞬の変化は知覚できない
    • 一瞬の変化は信用されない
    • わざと時間をかけたほうが良いこともある
      • 操作ができない時間に対する待ちを意識させない
  • 効果音/振動
    • 画面を見ていないユーザに通知できる
    • 長い処理等でユーザは他のことに注意を向けられる(音に気づける)

まとめ

  • デザインはセンスではなくエンジニアリング
  • しっかりしたデザインは位置、色、動き、音、あらゆることに意味と目的がある

[4] JavaScriptCore.frameworkでできること

  • 岸川克己

JavaScriptCore.framework

  • ドキュメントがない、サンプルもない?、現状イマイチわかりにくい
  • 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
    • オブジェクトのラッパー

追加居所 ObjectiveC -> JavaScript

  • 一部のロジックをJavaScriptでき術
  • WebやAndroidなど別のプラットフォームと共通化する等 = GOOD
  • JavaScriptで書かれたライブラリを使う
      • はてな記法 Parser - text-hatena.js
      • Texile Parser - textile.js
      • JSONの圧縮 - JSONH

JavaScript -> Objective-C

  • JSExport
    1. JavaScriptに公開するObjective-Cのオブジェクトを作成する(JSWindow)
    2. Objective-Cのオブジェクトを作成する(UIWindow->JSWindow)
    3. JS側からはそれを見て処理を実行する
  • 既存のクラスをJSExportに適用させる

LT

backgrounddのバグ

  • springboardはspringboard, backgrounddにわかれたiOS7で

HBFavのこだわり

  • HBFavとは
    • はてなブックマークをツイッターみたいに見れるアプリ
    • Githubにソースがある
    • RubyMotionで書いている
  • リモートのリソースは非同期で取得
  • DrawInRectで直接書き込んでしまう。
  • AFNetworkingをとりあえず使う

IRKitの紹介

  • モールス信号でWifi情報を送信してIRKitにつたえる
ロック画面をハック
  • @tamotamago
  • バックグラウンド状態を続けるために
    • 無音音楽を流す
    • AVAudioSessionで必要な手続きをする
    • そういうい実装が必要なときは資料が参考になるかも
    • MPNowPlayingInfoCenterでアートワークをいじることができる

歩きスマホ

  • YSViewer
    • Tweetbotぽい見た目
  • Stop-Walking-iPhone
    • 歩きスマホするときに警告出る

自分メモ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment