【第20回】potatotips(iOS/Android開発Tips共有会) まとめ

* [【第20回】potatotips(iOS/Android開発Tips共有会)](http://connpass.com/event/17624/)に「ブログまとめ枠」で参加しました
* まとめはQiitaでもOKとのことなので投稿します
* 発表を聞きながらメモったことをふんわりまとめてあります
* 発表者の発言そのものではない点、ご注意ください
* お気づきの点がありましたらお気軽にコメントおねがいします!

## 発表一覧
https://github.com/potatotips/potatotips/wiki/potatotips-20

## 会場
* 会場は　[株式会社VOYAGE GROUP](http://voyagegroup.com/)　さんです。
* 海賊船ぽいオフィス!(撮影許可頂いてます)

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">お邪魔してます！会場はほぼ一本道の一番奥です！ <a href="https://twitter.com/hashtag/potatotips?src=hash">#potatotips</a> <a href="http://t.co/DixlOm1zZz">pic.twitter.com/DixlOm1zZz</a></p>&mdash; ohkawa (@ohkawa_m) <a href="https://twitter.com/ohkawa_m/status/631042102227439616">2015, 8月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">受付近くのスペースからgolangについて熱く語る声が聞こえてくるポテチ会場 <a href="https://twitter.com/hashtag/potatotips?src=hash">#potatotips</a> <a href="http://t.co/sWr0f3Ez1v">pic.twitter.com/sWr0f3Ez1v</a></p>&mdash; ohkawa (@ohkawa_m) <a href="https://twitter.com/ohkawa_m/status/631044339217465345">2015, 8月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

* 開始前からsushi!(ごちそうさまでした!)
<blockquote class="twitter-tweet" lang="ja"><p lang="tl" dir="ltr">sushi!!!!! <a href="https://twitter.com/hashtag/potatotips?src=hash">#potatotips</a> <a href="http://t.co/JsCUut40d6">pic.twitter.com/JsCUut40d6</a></p>&mdash; ohkawa (@ohkawa_m) <a href="https://twitter.com/ohkawa_m/status/631046808358158336">2015, 8月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


# ここから本題

## 1.@sakmtech	『Core Spotlight Optimization』	iOS
* 作ってます → [時短美人〜ダイエットや美容・健康情報ぎっしりの女子力UPアプリ！〜](https://itunes.apple.com/jp/app/shi-duan-mei-ren-daiettoya/id805532295?mt=8)
* Voyage Groupの新人エンジニア
* Core Spotlight iOS9 beta5時点の動作です
* どうすれば検索結果の上位に表示されるかまとめてみた
* あとに登録したものが優先
* 同じ文字列を大量に含んでいても最初にマッチした位置で判定
* ひらがな⇔カタカナはもちろん、ひらがな→漢字も一部対応
* タップされたものはトップヒット
* 先にインストールしたアプリが優先。item登録タイミングは関係なし／(^o^)＼
* CoreSpotlightは先にインストールさせたもの勝ち?／(^o^)＼

## 2.@mo_to_44	『watchOS1のアプリをwatchOS2移行する』	iOS
<iframe src="//www.slideshare.net/slideshow/embed_code/key/7TQS5QLPkFFk3E" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/motokinarita7/watch-os1-towatchos2" title="watchOS1 to watchOS2" target="_blank">watchOS1 to watchOS2</a> </strong> from <strong><a href="//www.slideshare.net/motokinarita7" target="_blank">Motoki Narita</a></strong> </div>

* 今回の発表はデータ管理の部分がメイン
* WatchOS2 
* Appleオフィシャル資料あんまない?
* WatchKit Development Tips は2015/08/10朝時点ではwatch1の情報なので気をつけてください(´・ω・｀)

## 3.@kgmyshin	『just in line』	Android
<iframe src="//www.slideshare.net/slideshow/embed_code/key/gAuXyuvQtY9j7d" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/shinnosukekugimiya/just-one-line" title="just one line" target="_blank">just one line</a> </strong> from <strong><a href="//www.slideshare.net/shinnosukekugimiya" target="_blank">shinnosuke kugimiya</a></strong> </div>

* つくったよ → [Goreinu](http://motida-japan.hatenablog.com/entry/2015/06/18/204030)
* disる時はやさしくお願いします
* 厳粛な雰囲気過ぎて吐きそう
* **Leak Canaryえげつねェ…**
* 僕の思う良いライブラリ
* 1.メンテされてる
* 2.目的が明確
* 3.直感的
* 4.使っても侵食されにくい(取り替えやすい)
* 5.コンパクト
* Leak Canaryの上手いところ
* ライブラリだけど専用の画面を用意した
* デバッグcompileとリリースcompileに分けた。リリースcompile小さい
* Goreinuつくったよ
* AndroidでDBとかキャッシュを取り出したいときに使えるライブラリ
* **1行だけのライブラリはやっぱりカッコイイ**

## 4.@yimajo	『とにかく明るいCore Spotlight』	iOS
<iframe src="//www.slideshare.net/slideshow/embed_code/key/uk4QQEMHKu1Jtl" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/YoshinoriImajo/core-spotlight" title="とにかく明るいCore Spotlight" target="_blank">とにかく明るいCore Spotlight</a> </strong> from <strong><a href="//www.slideshare.net/YoshinoriImajo" target="_blank">今城 善矩</a></strong> </div>

* つくってます → [エンジニアアウトプットランキング - Stargazer](https://stargzr.net/)
* ハッシュタグでつぶやくと、発表中のスライド上部に流れるという遊び心
* **みんな弾幕に夢中で発表に身が入らない**
* **そのスライドの作り方知りたい**
* 🍣#potatotips
* NDA関連についておさらい→今回の発表はWWDCにあったものなのでOKです
* Core Spotlightどんなときに便利?→電子書籍の検索とか!
* **iBooksとKindleどっちで保存したか分からない...→ Spotlightで横断検索できるといいね!**
* iOS9-day-by-dayのサンプルコードが参考になる
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">発表に使ったTweet表示はこのアプリです <a href="https://t.co/gF7jWYWpUx">https://t.co/gF7jWYWpUx</a> <a href="https://twitter.com/hashtag/potatotips?src=hash">#potatotips</a></p>&mdash; y.imajo (@yimajo) <a href="https://twitter.com/yimajo/status/631058837865246720">2015, 8月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">TweetRain表示するには画面のミラーリング（Cmd+F1）して発表のディスプレイと同じにする必要があります <a href="https://twitter.com/hashtag/potatotips?src=hash">#potatotips</a></p>&mdash; y.imajo (@yimajo) <a href="https://twitter.com/yimajo/status/631077935839969281">2015, 8月 11</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
* 結構バギーです。再起動が必要になったり
* 設定画面のラインスタイル>「メニューバーの上」を選択すると、Keynote発表中でも流れます
* 🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣🍣#potatotips

## 5.@tarotaro4	『How to test GPS on Emulator』 Android
<iframe src="//www.slideshare.net/slideshow/embed_code/key/GAE27Xw9pJHUYQ" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/tkawashita/20150811-potatotips-20" title="20150811 potatotips 20" target="_blank">20150811 potatotips 20</a> </strong> from <strong><a href="//www.slideshare.net/tkawashita" target="_blank">tkawashita </a></strong> </div>

* **みなさんMacばっかりですね…(´・ω・｀)**
* Genymotion(Androidエミュレータ)について
* Androidのエミュレータ、良くなってきてはいるけどイマイチですよね
* Genymotionはいろいろできる。Macでも使える
* GPSやバッテリーのステータスも変えられるよ
* ただし無料版でも登録必須(´・ω・｀)
* ビジネスは有料→年間にするとなかなか高い(´・ω・｀)

## 6.@horimislime	　『国際化tips』	iOS
<script async class="speakerdeck-embed" data-id="88cd8f17a7d043868a339f4a3e38c77e" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
* 作ってます → [トレタ](https://itunes.apple.com/jp/app/toreta/id749460884?mt=8)
* 絶賛英語版つくってます
* 言語リソース分けてるし大丈夫だろ・・
* なんてことはない
* 「姓」「名」の順で表示→英語版では「名」「性」の順に表示せな!
* 地味に「~様」「Mr.~」もあるぞ!
* NSPersonNameComponentsをつかえばOK
* ただしiOS9.0以降
* **NSPersonNameComponentsを将来的に使うことを見越して、今から移行しやすいクラスを作っておくのはアリ**
* stringsdistで複数形単数形の対応が楽になる
* NSDateInterverFormatterも便利(iOS8以上)
* **リリースしたけどリリース毎の翻訳作業が重荷に…(´・ω・｀)**
* 翻訳支援サービスを検討中。目をつけてるのはCrowdin。翻訳の漏れを可視化できる
* 他言語化より無言語化
* 言葉を減らしていくの最強(｀・ω・´)

## 7.@aki_sh_7	Android Mのruntime-permissionに潜む罠	Android
<iframe src="//www.slideshare.net/slideshow/embed_code/key/2jKR18FHZeC12R" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/ak_shio_555/android-mruntimepermission" title="Android Mのruntime-permissionに潜む罠" target="_blank">Android Mのruntime-permissionに潜む罠</a> </strong> from <strong><a href="//www.slideshare.net/ak_shio_555" target="_blank">ak_shio_555</a></strong> </div>

* メインの仕事はセキュリティ。Android開発のセキュリティガイドライン作ったりとか
* **アプリ開発者に小言を言う役割です(｀・ω・´)**
* 新パーミッションモデル。iOSに近くなった
* インストール時ではなく、利用時に許可を求めるようになった
* 変更可能(ただし、一部のパーミッションのみのみ)
* アプリの動作に対するユーザの決定権が大きくなった
* 変更可能なパーミッションはグループ単位で設定されます
* 1つの変更でグループ全体に影響が及びます
* **問題点:許可済みパーミッションとユーザの認識のズレ**。
* 「要求された箇所の機能使うためにパーミッションが必要」という説明だけではなく、「パーミッショングループを許可することによる影響」についても説明するのが親切
* 「今後は確認しない」も同じパーミッショングループすべてに適応される(´・ω・｀)
* 軽減策
* 表示しないとしたときのメッセージで説明する。復活させるための手順をヘルプで表示。きちんと誘導しましょう。

## 8.@tomzoh	『PUSH通知証明書作成ツールを作った』	iOS
<iframe src="//www.slideshare.net/slideshow/embed_code/key/rC1FgKQoAF4XLb" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/hasegawatomoki/push-51491174" title="PUSH通知証明書作成ツールを作った" target="_blank">PUSH通知証明書作成ツールを作った</a> </strong> from <strong><a href="//www.slideshare.net/hasegawatomoki" target="_blank">Tomoki Hasegawa</a></strong> </div>

* つくりました → [monotty](https://www.monotty.com/)
* 団長!
* **iOSの証明書作成つらい**
* 自社アプリだと1年に1回の更新で良いが、受託開発だと3ヶ月に1回くらいやってる
* お客様「Macないです」
* お客様「コマンドラインってなんですか?」
* (´・ω・｀)
* **Web GUIから証明書作るツール作りました**
* PUSH通知のテスト送信もできます
* 実機デモ

## 9.@izumin5210	Why 『don't you use enum ?』	Android
<script async class="speakerdeck-embed" data-id="05e811c995c247e9a553592cbd77a60b" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
* 学生です。Wantedlyさんでアルバイトしてます
* 普段はRubyメイン
* **＼enum／**
* type safe!! type safe!! type safe!!
* Event Handlingにenumを使うと良い(｀・ω・´)
* テストもしやすい

## 10.@kitasuke	『Swiftでコマンドラインツールを作る』	iOS
<iframe src="//www.slideshare.net/slideshow/embed_code/key/zDe0Y7bJF1b97Y" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/kitasuke/command-line-tool-in-swift" title="Command Line Tool in swift" target="_blank">Command Line Tool in swift</a> </strong> from <strong><a href="//www.slideshare.net/kitasuke" target="_blank">Yusuke Kita</a></strong> </div>

* **Because ... First step to use Swift in your project!**
* Carthage見ればだれでもコマンドラインツール作れるよ
* Carthageは最初の方のコミットがすごく丁寧で、これ見るのが最強
* 設定に罠が
* **罠1.コマンドライン作るんだから『Command Line Toole』を選びますよね。→罠**
* 罠2.Embedded Content Contains Swift CodeがデフォルトNOなのでYESへ
* とりあえずCarthage見ればなんとかなる
* 発表用のデモ

## 11.@rejasupotaro	『温かみのないコードレビュー』	Android
* つくってます　→　海外向けcookpad
* コードレビュー前の静的解析
* PMD & Checkstyle → Use formatter
* FindBugs　→　誤検出
* Infer →　まだまだ開発途中
* 誤検出はモチベーション下がる(´・ω・｀)
* クックパッドでは、Pull Request→dokumi(毒味)という社内チェックツールが走る
* **温かみのないコードレビューは機械に任せて、人間のコードレビューでは本質的な議論しようぜ(そんで褒め合おうぜ!!)**
* ソースレビューでは褒めたほうが開発者のモチベーション上がるよね

## 12.satoshi0212	『2時間の暗号化済み動画データはどうやって再生するのか』	iOS
* つくりました →　動画再生アプリ
* スライド映らないけどがんばる(｀・ω・´)→写った
* 要件1.2時間再生できるようにしてほしい
* 要件2.データは必ず暗号化してくれ
* 要件3.オフライン再生したい
* HLS (Http Live Streaming)つかいました
* STEP1.データ分割
* STEP2.暗号化キーファイルを暗号化
* STEP3.iPhone内にhttpサーバ建てる
* **iPhone内にcocoaHttpServer建てるという離れ業**
* STEP4:復号化
* STEP5:再生
* 独自プレイヤー作らずとも2時間超えの暗号化済み動画データ再生可能ですよ

## 13.@wasabeef_jp	『Naming Rule in res/layout』	Android
<script async class="speakerdeck-embed" data-id="5ba27cdf41b2418e99c4b34a19c6c5c2" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>

* スライド映らないけどがんばる(｀・ω・´)→写った
* layout.xmlの命名規則は?
* layoutディレクトリ配下にサブディレクトリ切れない。つらみ
* Pluginでいい感じに整理できるといいな
* 1年以上ずっと作ろう作ろうと思っていた
* **そしてついに...**
* 見つけました
* folding-plugin
* 素敵

## 14.@huin	『SFSafariViewControllerとOAuth』	iOS
<script async class="speakerdeck-embed" data-id="0291b484cc0c41c59b22531501410870" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>

* つくってます → [ファッションフリマアプリ フリル](https://play.google.com/store/apps/details?id=jp.co.fablic.fril&hl=ja)
* Androidエンジニアですけど今日はiPhoneの発表
* OAuth認証どうやって実装してますか?
* よくある実装:アプリ内WebViewをモーダル→ユーザが入力→アクセストークン拾って終了
* **表示しているページが本物かどうかは開発者を信用するしかない(悪意のある開発者なら偽ページ表示できる)**
* セキュリティに厳しい人からはマサカリが飛んでくる実装
* **SFSafariViewControllerをOAuthに使えば安全**
* 実機デモ(OAuth2)
* 単純にSafariでいいのでは…?→SafariによるOAuthでリジェクトされたという噂も。
* ほかにも遷移が楽などSFSafariViewControllerのが良さそう

## 15.@satoshun_xyz	『Android Support Annotationsについて』	Android
* kotlinかわいいよkotlin
* Annotationsを使うと、enumよりも安全
* **適切にAnnotationをつけると、ドキュメントの代わりにもなる。**オススメ。

## 16.Fringe81	『』	Android
* スライド映らないけどがんばる(｀・ω・´)→最後の最後で写った
* 代理で来たら発表者枠でした
* 発表します
* アドテクの会社なので、cookieが超大事です
* SFSafariViewControllerを使ってアプリ間でcookie共有できる→面白いことができそう
* Safariとの共有は試したけどできなかった?
* **続きは懇親会で**

# 感想
* つくったよ系発表が多く熱かった
* 本来のTips共有もあってとても良かったです。国際化tipsとかAnnotationsとか。
* 🍣
* **スライドが映らなくても折れない心が重要**