AndroidとiOSのtipsを共有するpotatotips #9に参加してきたので発表内容まとめてみた!
恵比寿にある株式会社Fabricで開催されたpotatotips#9に参加してきたのでそのメモの殴り書きまとめです。
potatotipsは一人5分でtipsを発表していくという怒涛の発表会。
今回もたくさんのtipsが発表されました。
[iOS] App ExtensionでCocoaPods管理しているライブラリを使用する方法
- @tomonobu_satoさん
- デスクトップの壁紙がかっこよかった
- 方法は2つ
- PodfileのtargetにAppExtensionを指定する
- Cocoa Touch Frameworkを使用する
- 方法1
1234<code>target :Extension, :exclusive => true dopod 'AFNetworking'end</code>- 複数含める場合は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
- @yimajoさん
- 記事には出ていないインタビューの中で話が出てきたtipsを紹介
- 1 OSXのカラーピッカーはsipが無料で多機能(ユビレジ)
- 選んだ色をコードにしてくれたりします
- MacのカラーピッカーアプリでおすすめなSipが無料中!今すぐダウンロードした方が良いですよ | MacとiPhone備忘録
- 2 Bundle IDはBuildConfigurationごとに指定できる(ユビレジ) – BUNDLE_IDENTIFIERというキーを付けて、それぞれのビルドごとに設定する
- 3 iOSアプリ開発のgit運用はgit-flowにする
-
- QAテストしてくれた人ヘはインセンティブを払うと楽しく仕事ができる
- クラッシュさせたらジュース1本などを用意しておくなど
- 5 WAテスト担当がいない場合はiOS/Androidアプリ開発者がお互いの端末を交換して行う
- 6 BlocksKitを使うとデメリットが多い
- iOSのメジャーバージョンアップに酔って動作しなくなる可能性がある
- iOS8では、BlocksKit2.2.5以上にしなければBlocksKitActionSheetが正常に動作しなくなる
- (7.) BlocksKitはSwiftと同じでdisったら面倒な感じになる
- あんまりいうとPHPみたいな面倒な展開に…
- BlocksKitいいよね!
- swiftも安定してていいよね!
[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
- gfxさん
- 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
1<code>pod try HRButton</code> - 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を拡張すべし
結論:ArrayFilterを直接使ってる場合、ArrayAdapterにデータを追加した後はもっかいfilter()を呼ばないと、表示データが更新されない
— Yuki Anzai (@yanzm) 2014, 9月 22
[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
- k_katsumiさん
- 親指シフトで日本語入力ができるカスタムキーボード「N+Keyboard」をリリースしました – 24/7 twenty-four seven
- 2000円
- キーボードの制限
- 提供されるキーボードのビューの中のみ
- Atokでレビューされてる通りインライン変換が出来ない
- 高さは意外に自由
- UIKeyInputというクラスにhasText, insertText, deleteBackwardなどしかない
- はじめのバージョンでしょうがないとアップルの人もわかっているとか。
- feature requestしましょう!
- Google日本語入力がAPI提供されているのでそれを使えば簡単に日本語変換できます
- 他にもandriodのOpenWnn、mozcが使えるかと
- mozcコンパイルできたので公開しようかと思います
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個あてはある))