potatotips #28 (iOS/Android開発Tips共有会)に行ってきたメモ

# イベントページ
http://potatotips.connpass.com/event/28780/


# PlaygroundでカスタムUIのプロトタイピング

## 発表者
milkit/ミルキット
iOS枠
eureka/couples iOS
@Milk_t

## 発表内容
AppStoreのバナーと同様な挙動をするカスタムUI
フルビルドで３－５分、インクリメンタルで１分

空プロジェクト作って実験してた
-> Playgroundつかったら楽なんじゃね？

PlaygroundはSwiftのコーディング環境

XCode 7.3からタッチイベントも処理してくれるようになった

Q。アニメーションも見れる？
OK

Q. AutoLayoutも効く？
OK、たまに動かない

Q.ViewControllerの繊維もOK？
OK

まとめ
Xcode7.3から実用的になってきたので使ってみるのもアリ

eurekaでSwiftのスタイルガイド出してる

# API仕様書をいい感じに管理する
## 発表者
yuyakaido/ゆーやかいどー
Android枠
@yuyakaido
Androidチームリーダー
テストおじさん

## 発表内容
よくある例
- Github wiki
- Google Spreadsheet <- カップルズはこっち

仕様書のあるある問題を抱えてた

よくあるサービス
- Apiary
- Swagger

Apiary
- Markdownっぽい感じで書ける
 - API Blueprint
- モックサーバの作成可能

Swagger
- Yamlっぽい感じで書ける
 - OpenAPI
- モックサーバの作成可能

Swaggerのほうが少し高機能
クライアントコードの生成が可能、GoogleやMSがSwaggerベースでいろいろやってる

クライアントコードはレスポンスの入れ物クラスを自動的に作ってくれる

まとめ
- wikiとかSpreadsheet管理はつらみ
- ApiaryやSwagger使うと少し幸せになるかも
- Swaggerが今後のスタンダードになりそう？


# Debug Remote / Local Notification on watchOS
## 発表者
shingt/しんじーてぃー
iOS枠
@shingt
[発表資料](https://speakerdeck.com/_shingt/debug-remote-local-notification-on-watchos)

## 発表内容
けっこうコンポーネントが多いのでRemote or Localを解説

デバッグで困った
リモート、ローカルで実機、シミュレータ上でどうするかのお話

Remote
シミュレータ上は簡単
Xcodeに予め用意されてるから困らない

Local
簡単にテストする仕組みが無い
デバッグ時にRemote、プロダクション時にLocalにしようとしたら引数の違いがあり簡単にテストできなかった
間にラッパーオブジェクトを用意した

実機上でのテスト
Remoteと違って送りにくい
iOSとおんなじような感じで

Sleep状態にしないと通知が来ない

まとめ
Remote：簡単
Local：工夫が少し必要そう


# Chrome Custom Tabs を導入した話
## 発表者
shihochan/しほちゃん
Android枠
@shihochandesu
サイバーエージェント
Spotlight
キュレーションメディア

## 発表内容
導入までの経緯
記事をネイティブで作りなおしてほしいと上司からのお願い

引用記事で外部リンクが多い
→WebViewつらい。Chromeにすると別アプリ立ち上がってる感があるまくり

内部コンテンツのようにWebページをChromeで開くことができる
v23.1.0~
min: 15
chrome: v45~

条件を満たさないと標準ブラウザで開く

Chrome Custom Tabs早い

CustomTabsIntent.Builderを作る
メソッドでいろいろと設定できる

pre-fetch
chromeリポジトリのhelperが便利
Tabbyがわかりやすい

SecondaryToolbar
v23.2.0~
下に最大５つまでアクションボタンをおける
chrome:v49
条件を満たさないと何も表示しない
→なので追加しておいて損は無い
あとからADDしたものが右に来る
スクロールと連携して自動に隠れない


# RxSwiftのDriver
## 発表者
Motoki Narita
iOS枠
@mo_to_44

## 発表内容
Driverを知る
Units
日本語訳を書いてる人がいる

RxExampleのソースを読む
GitHub Signup
DriverとObservablesの２パターンのサンプルがある

コード見ながらDriverじゃないパターンとDriverのパターンを比較

8/20 iOSに開発者向けイベントがある

# 広告SDKのお話
## 発表者
Shigeki Yamato
シゲキヤマト
Android枠
@heki1224

## 発表内容
vvakameさんのSDKディスのツイート

みんな自前アプリに広告SDK入れてるし、入れてアプリが不安定になってる

SSP
Ad Network
DSP
純広告

みんなSDKがおんなじに見える理由
広告商品が標準化されてる

ネイティブ広告
- アプリの一部のような広告

動画リワード広告
- 動画を実際に流して広告する


# Swiftにわか勢な自分がMacアプリを作ってRxSwiftを使えるようになった話
## 発表者
y.imajo/イマジョウ
iOS枠
@yimajo
stargzr

## 発表内容
ハッシュタグをおって画面上にツイートを流してくれるアプリをRxSwiftで書いた
http://github.com/yimajo/MeetupTweet

発表時にマルチディスプレイ対応してないとメインで出ても意味ない
クラッシュ時にもわかるように６０秒に１回赤文字を出してる
RxSwiftの解説
merge

レイヤード風アーキテクチャ

# AndroidScreenMonitorのアンチパターン
## 発表者
tarotaro
Android枠
@tarotaro4

## 発表内容
Windows編
jarをexe化する
Launch4j
jreのインストールは必要

Vysor(Bata)が最近のはやり

# 休憩
必死に前半の内容をまとめる
お腹減る

# Repository pattern in Swift
## 発表者
naoty/なおてぃー
iOS枠

## 発表内容
リポジトリパターン
- リポジトリとは、データの取得、保存、削除のためのインターフェース
- リポジトリを使ってデータにアクセスする
- どこにデータを保存しているかは知らなくて良い

問題点
- データへのアクセスが非同期
- クエリやソートはどうやって指定するのか
 - バックエンドに若干依存する？
- リポジトリが増えたらコピペが増えそう

Promise
モデルじゃなくてタスクを返すようにする

naoty/AnyQuery
中間オブジェクト

汎用的なリポジトリ型を定義する
- 型消去

応用例：キャッシュ

# CQRSの考え方をモバイルに適用してみる
## 発表者
kgmyshin/（自分でもなんて呼んで良いかわからない）
Android

## 発表内容
CQRSとは？
コマンドクエリ責務分離

コマンドクエリ分離

「GETメソッドの中でUPDATEをするなみないな話」

EventSourcingありきで語られる

コマンド側とクエリ側を初めから分けて考える
Write系とRead系を分ける

設計がすっきりする

クイズとかゲーム系のReadしたものを加工する系は不向き


# tvOS tips
## 発表者
koutalou/コウタロウ
iOS枠
iOS Clean Architecture

## 発表内容
MFのApple TV版

Traditional Apps
- ネイティブ、iOSのコードを流用できる
- MFはこっち

Client-Server Apps
- TVML、JSを使ったWebアプリケーション
- コンテンツを動的に変更できる

Parallax Effext

画面構成
- TabBaerControllerは上部に配置
- 戻るボタンはナビゲーションバーに置けなくてタイトルだけ

フォーカス
- Siri Remoteのタッチ部分をスワイプで選択を帰る
- スワイプの延長線上に移動するから配置に注意が必要

ストレージの制限
- アプリは200MB以下
- 重要なデータは保持しない

WebView非サポート

CocoaPods

文字入力
- とにかく難しい
- 以下に文字入力させないかがポイント

基本的なレイアウト
- 画面両端は指定のスペースが必要
- など

3種類の画像が申請時に必要

CI
非対応
- fastlane
- deploygate
対応
- crashlytics
- testflight

# Building apps using CustomViews
## 発表者
KeithYokoma/キースヨコマ
Android枠

## 発表内容
Fragment
- ライフサイクルが多い
- デバッグ辛い
　- Fragmentが非同期で動く
　- Viewのロジックとかビジネスロジックがゴリゴリ入ってくるからテストしずらい

Square
　Presenterがビジネスロジック

Mortar and Flow
　Scoop
　...

Flow
 　アクティビティ1個
　　バックスタック

Mortar
　Activity
   PathContainer
    Path
     CustomView

○アクティビティがServiceにも置き換えれる
△非同期処理が未だある
☓マテリアルデザインのサポートが不十分

# 国際カンファレンスに登壇する - 応募編
## 発表者
shu223/シューツツミ
iOS枠
@shu223

## 発表資料
[発表資料](https://speakerdeck.com/shu223/guo-ji-kanhuarensunideng-tan-suru-ying-mu-bian)

## 発表内容
UIKonf
iOSCon
で発表する

招待枠じゃなくて、応募して審査して遠た

### なぜ応募したか？
メリット
ログに残る
　英語でググッて来て見つかる入り口になる
著名な常連スピーカーの方々に自分の話が届く
　海外から仕事くるかも
　別のカンファレンスでも呼ばれるかも
海外に行けることが嬉しい・楽しい
　航空券代が出る
英語を必死で練習する機会になる
経歴にも書ける

### CFPをどう見つけたか？
ググる
Lanyrd：まとめサイト
カンファレンス常連者のサイトを見る
 talks/speakingみたいなページを見る。登壇予定があることもある
CFPは見つけづらい、CfPなしも多い
カンファレンス常連者をリストにいれてウォッチ

### Proposalをどうやって書いたか
話したいネタを棚卸し
過去のカンファレンスの登壇内容を見てみた

### 歓迎されるっぽいTALK
スピーカーがその分野で十分な経験がある
その人ならではのバックグラウンドが生きる話
体系立てて話せる


# AppLaunchChecker
## 発表者
magiepooh/まぎーぷー
Android枠

## 発表資料
[発表資料](https://speakerdeck.com/magiepooh/applaunchchecker)

## 発表内容
v23.3.0で追加された
ホーム画面から起動されたかをチェックできるAPI

SharedPreferenecesにインテントのアクションとかカテゴリを見てるだけ
一度書き込まれてTrueになると消せない

過去に1度でもランチャーから起動したことがあるかをチェックするAPI

**どこでつかうのかわからんAPI** という結論


# iOS Universal Linkについて
## 発表者
TachibanaKaoru/たちばなかおる
iOS枠
ボルダリング4級

## 発表内容
自分のアプリや他のアプリを起動するスキーム
ドメイン名でスキーム管理するからかぶらない

意識高いアプリはダメ

アプリも開けるけどもSafariでも開けるリンクがある


# 懇親会
こにふぁーさんの顔とアイコンが一致した