Categories: Androidobjective-c

AndroidとiOSのtipsを共有するpotatotips #9に参加してきたので発表内容まとめてみた!

恵比寿にある株式会社Fabricで開催されたpotatotips#9に参加してきたのでそのメモの殴り書きまとめです。

potatotipsは一人5分でtipsを発表していくという怒涛の発表会。

今回もたくさんのtipsが発表されました。

[iOS] App ExtensionでCocoaPods管理しているライブラリを使用する方法

  • 方法1
    target :Extension, :exclusive => true do
      pod 'AFNetworking'
    end
    
    • 複数含める場合はtargetを複数書けばいい
    • メリットはお手軽に出来る
    • デメリットはアプリの容量が増える
  • 方法2
    • Xcode6から使用可能で、Frameworkを作成する方法
    • メリットはアプリ容量が減る
    • デメリットはios8のみしか使えない
      • deploy targetが7以下でもコンパイルは通るが、ArchiveValidationで「The minimum value is 8.0」と怒られる
    • ios8のみサポートする場合は使わない理由はない

[Andriod] Square/Dagger @wasabeef

  • @wasabeef_jpさん
  • Dagger(ObjectGraph)
    • コンパイル時にコードを差し込む形で検証が行われる
    • メモリへの影響はごくわずか
    • ViewのInjectは出来ない -> バターナイフなどを使ってね
  • ObjectGraph : 依存関係管理とインジェクタ
  • @Singleton : ObjectGraph単位でシングルトンになります
  • ObjectGraph.createしたのちにinjectする
  • ObjectGraph.plusを使うと本当の意味のシングルトンになる

Google/Dagger

  • Squreare/Daggerとの違い
    • トレーサビリティ
    • 明確なAPI
    • パフォーマンス向上 : アノテーションプロセッサをもっと良くする
  • 現在開発中
    • Square/Dagger2が出次第にGoogle/Dagger2も出す

QA

  • なんでObjectGraph.plus?
    • モジュールをどんどん追加してみてくる感じなためだと思われ

[iOS] SioriでどのようにCustomTransitionを実装しているか

  • @ferasyasinさん
  • なぜウォンテッドリーはiOSアプリ『Siori』を100パーセントSwiftで開発したのか – エンジニアtype
  • CustomTransitionを形成する3つの要素
    • fromViewController, toViewController, animationController
  • animationControllerにcustomなanimationControllerを返す
  • CustomTransitionをInteractiveにする
    • ジェスチャー操作で0-100まで移動させる
  • 4つめの要素:InteractionController
    • UIPercentDrivenInteractiveTransitionをうまく使うのがコツ
  • Shioriでは複数のgesture recognizerが混在している
    • pop, push, scrolle, swipe,,
  • how to?
    • transitionがstartするかしないかはviewControllerで判断する
    • gestureをするかどうかの判断をUIGestureRecognizerDelegateを利用する
    • ViewController側でtransition中華どうかのフラグを立てて管理する
  • interactive transitionが複数になると複雑になるため、bugがどこのジェスチャーでおきてるのかがわかりにくい
  • けど実装したらきっと目立つ

QA

  • どうデバッグするか?
    • 各ジェスチャーでログを出していってデバッグしていった
  • shioriは最初はひとつのジェスチャーでやるようにしていたが、if文が多くなってしまったので、transitionごとに処理を書くようにした
  • transitionを実装するときに行き先の情報を知らないといけないときとかはどうしてるか?
    • transition用のpropertyをもたせたりしている
  • shioriのプロトタイプはどうやって作った?
    • デザインからはいって、軽くプロトタイプを作ってそのまま一気に作っていった

[iOS]iOSアプリ開発の現場で訊いてきたTips

[Android]どういうログを取るかということだけに集中したい

  • rejasupotaroさん
  • アプリをうまく成長させるには…リリースサイクルを早くする、限定的リリースする、リアルタイムにアナリティクスを行うというサイクルをまわす
  • ログを取るときにはバッファにとっておいてから送ったりしている
  • アプリで何度も作ってて大変なのでLogHouseというライブラリをつくった
  • プラグインを登録して複数の送信先に送れます
  • OutputPlugin : そのまま送る
  • BufferedOutputPlugin : バッファして、リトライして送ってくれたりしてくれる
  • 来週くらいにcookpadアプリに入れてみる

[Android] Andriod Bootstrapを使ったインターン研修

  • tsurutan623さん
  • よく使いそうなライブラリをまとめて新規プロジェクトとして作ってくれるお手軽プロジェクトツール
    • PiccasoとButterKnifeを使った
    • piccaso : 画像をいい感じにキャッシュしてくれる
    • ButterKnife : ViewInjectionを軽量に使える
    • hotchemiさんの記事が参考になりました
  • twitterクライアントをうまく作ることができるようになりました

QA

  • どうしてフリルにきたの?
    • jeekというサイトを使った
    • androiodができる
    • 女性がおおい!
    • 時給がいい
    • やりたいことがやれそう
    • 家から近い

[Android] Introduction to Gradle 2.0

  • Andriod Gradle Plugin 0.13.0が入りました
    • Depends on Gradle 2.1 and Groovy 2.3.6
  • Grade2.1
    • プラグイン機構が新しくなって良くなった
    • 規定のメタ情報をつけてjcenterにdeployするとpluginsブロックで参照できるようになる
    • commaとかcolonとかいらない!
  • java8をsupport
  • groovy 2.3.6
    • javaっぽく爆速になる
    • コンパイルチェックされるようになる
    • @CompileStaticでplugin実行が高速になる

[iOS]Interface BuilderでカスタムViewのレンダリング

  • hayashi311さん
  • Xcode6からcustom viewでInterface上でリアルタイムに変更できるようになった
  • IB_DESIGNABLE/IBInspectableが必須
  • sample
    pod try HRButton
  • How to Debug
    • ブレークポイントを設定するとそこでとまる
    • iPhoneSimulatorが動いている?
  • 非同期でsubviewを追加などはできない
  • Bitmapを生成して表示している模様

[Android]Typeface

  • いわゆる書体設定のお話
  • AndriodではRobotというフォントを標準で提供している
  • assetの注意:JeryBean4.3で治ったと思うが、assetは読みこめば読みこむほどleakする
    • 対策としては一回読んだらキャッシュに突っ込んで読み込むようにする
  • キャッシュなどの面倒を見てくれるTypefaceHelperというライブラリ公開してます
    • TypefaceHelperのインスタンスを作ってsetしていくだけ
  • TextViewの子クラスならたいていなんでも入れられます

QA

  • Calligraphyとの違いは?
    • TypefaceHelperはまるっとかえるが、Calligraphyは個別でかえる
  • コードからしか変えられない?
    • その後できるようになるかも?
    • Calligraphyはxmlから指定できる

[Android] ArrayFilter

  • yanzmさん
  • Filterしたアイテムだけを表示する機能がListViewにある
    • 後方一致は選んでくれない
    • ポップアップがでてくる
      • 実はキーボード入力で変更ができたりする
  • 直接AdapterからgetFilterでやればpopupがでない!
  • ArrayAdapter.ArrayFilterでフィルタリングやっている
  • filter()が完了するまではgetCount()の値が変わらないので、一番下まで読んだらネットワーク通信を10件とかとってくるときに、getCountのカウントが何度も行われてしまう
    • FilterListenerを使いましょう
  • 後方一致をしたかったらBaseAdapterを拡張すべし

[iOS] iOS8での画像処理+α

  • @_shingtさん
  • ios8からCIKernelに処理内容を記述することで画像のCIFilterの好きなフィルターを付けられるようになった
  • MotionBlur
    • CIKernelを使ってMotionBlurの効果をビューのアニメーションに適用
    • アニメーションがかっこいいかんじにできる!
  • 仕組みとしてぼかした画像をスナップショットとしてとって移動の際に表示しているらしい
  • UIViewにカテゴリとして実装されてるのですぐ使えます
  • でも処理が重いのでガリガリ使う感じではない

QA

  • 動作の重さはどんなもん?
    • 最初の画像処理が重い
    • 動き検知のためずっとrunloopが回っている

[Android] Androidのログ出力をいい感じにする

  • cutmailさん
  • ビルド環境に場合分けはいろいろ条件がある
  • AndriodのLogライブラリ
    • andriod-logging-log4j SLF4J , fugoといろいろあるがTimberがいい!

Timber

  • JakeWharton作
  • Treeクラスのインタンスを作ってTimberにplantする
  • Treeインタフェースを実装したクラスを使うと独自のTreeを作れる
  • Timber.d(“hoge”);で簡単に使える
  • ソースを見てみたらTreeを持ってる配列がforestっていうのがなんだか面白い

[iOS] iOSにおけるUIテスト

  • kitasukeさん
  • 大体以下のライブラリが使われることが多いが今回はKIFのお話
    • UIAutomation -> Javascript
    • KIF -> Objective-c
  • KIFでできること
    • viewのタップなどひと通り出来ます
  • やりかた
    • 1 AccessibilityLableとAccessibilityIdentifierとセットする
    • 2 アクション実行メソッドを叩く
  • KIF+Screenshot
    • スクショを全画面遷移分とっておけば保存可能
  • iPhoneシミュレータは起動していない状態でやりましょう
  • 理想は前回のテスト結果との差異を検知するようにすれば楽ができるはず
    • 全スクリーンショットを一枚の絵にしてcompositeコマンドでdiffをとればその部分だけ差異が簡単に見れる
  • 容易にUIの不具合が見つけられるが導入コストがすごいかかる

QA

  • メンテナンスコストが高いと感じるところは?
    • ロンチする前はUIが変わるので大変
    • tableview -> collectionview変わったりなど、テストを作るのが大変

Let’s build Custom Keyboard iOS

QA

  • キーボードextensionでネットワーク通信できる?
    • 許可すればできる
    • ネットワーク通信も電話帳のアクセスも出来る

レガシーコードと戦うためにRobolectricでもPowerMockを使う

  • sumio_tymさん
  • RobolectricでPowerMockを使う方法の紹介
  • 両方共@RunWith指定が必要なので難しい(1つしかできない)
    • PowerMockだけ特殊方法でできる
  • AndriodStudioに対応するために別途設定をします
  • PowerMockを使わざるを得ないレガシーコードに遭遇した時にお使い下さい
  • 初期設定が大変だが、終えれば快適

[Andriod] ScrollFullScreen

  • ninjinkunさん
  • iosでスクロールすると上のヘッダーを隠してフルスクリーンになるNJKFullScreenScrollを作ったがそれのandriod版を出しました -> ScrollFullScreen
  • listviewでもwebviewでも動きます
  • 実装としてはイベントだけ来るのでフルスクリーン時の動き自体は自分で実装します
  • 特徴としては、組み込みやすさ、コンポーネント分離を意識した
  • ViewTopHelper:webviewなどでheaderをアニメーションで表示するようにしている
  • andriodはスクロールの実装がViewごとにちがって大変や・・・

next potatotips…

まとめ

僕はiOSerなのでiOSばっかりに感想が偏ってしまいますが…

  • テストケースを書いててちょうどUIのテストを自動化するときにKIFなどを調べてたけど導入コストが大変そうだとおもった
  • 依存性注入なかんじのプログラミングは好きなのでGoogle/Daggerはちょっとやってみたい
  • IB_DESIGNABLEを今度試してみよう。便利そう
  • custom keyboardはiOSの仕様がまだ微妙なところがあるのでこれからに期待
  • 自分もpotatotipsに発表できるようなネタ探しをする!(1個あてはある))
mogmet

View Comments

  • I am a student of BAK College. The recent paper competition gave me a lot of headaches, and I checked a lot of information. Finally, after reading your article, it suddenly dawned on me that I can still have such an idea. grateful. But I still have some questions, hope you can help me.

  • I may need your help. I tried many ways but couldn't solve it, but after reading your article, I think you have a way to help me. I'm looking forward for your reply. Thanks.

  • Your point of view caught my eye and was very interesting. Thanks. I have a question for you.

Share
Published by
mogmet