突撃、隣の勉強会!
毎月開催場所を色々な会社に変えて行われているiOS/Android勉強会のpotatotipsに参加してきました。
今回はWantedly社での開催、発表中はモンストのグリーンノイズ降臨が18:00からであったためモンストをプレイしながら聞いておりiOSの発表のみをまとめています。もし内容に問題があればご指摘ください。
資料はアップロードされ次第追記します。
Swift -エラーと戻り値はResultで返すのがいいのか,悪いのか
発表者は @sonson
- Reddit API使ってみるかと思って
- Swiftラッパー作って公開した
- 綺麗に書くために関数型言語を勉強しろと言われた
- 関数型言語を勉強してenumでエラーと戻り値を返すようにした
- そこら辺含めていいのか悪いのか議論したい
Libraries for the Swift
発表者は @susieyy
- Wantedlyで使ってみたSwfitのライブラリの紹介
- JSONExport
- (Swiftだけじゃないが)JSONをObjectにマッピングしてくれる
- SwiftTask
- ReactKit
- SwiftBond
- view bindingするのに使いやすい
- モデルとデータを矢印で双方向にバインドできる
- SwiftMoment
- JSONExport
Share Data Across Extension and App with Realm
発表者は @kishikawa katsumi
- Apple Watchとデータ共有する際もRealmを使って便利だという話
- Watch側からもファイルを取り出すためにApp ExtensionのApp Groupを使う
- Realmはdbがファイルなのでファイルを共有するのと同じ
- 基本的にはdefault realmのパスを書き換えておけば楽
- App Extentionの制限がWatchだと24MBっぽい?
- 全てのDBを共有しないように割り切る
- ファイルなので必要な一部だけ別のrealmにすれば避けられる(つまりdefaultとは別にする)
いつかくるそのときのために 〜 Apple Pay対応のやりかた
発表者は @ooba
- Apple Payについて調べてみた
- Apple Payを有効にする利用条件が厳しい
- 有効になるとクレジットカードを登録する画面が表示される
- 対応手順一覧
- iOS Developer Potal側の事前設定
- アプリ側の対応が必要
- 経験上リジェクトされたパターン
- 設定でApple Payを有効にしたが実装はせず
- 「次のバージョンで対応するし」と回答し回避
- 設定でApple Payを有効にしたが実装はせず
プレゼンテーションがもっと楽しく - 画面タッチを可視化するTouchVisualizer -
発表者は @morizotter
- プレゼンテーションを楽しくしたいライブラリを作った
- タッチしている指の位置を表示
- タッチ部分はカスタマイズできるので画像にもできる
- つくり方はwindowのイベントを使っている
意外と苦労する、一部の画面のみランドスケープ表示を許容する方法
発表者は @_mono
- 一部の画面のみランドスケープ許容したい
- 考えられる方法は3つ
- 基本的なやり方は各UIViewControllerのsupportedInterfaceOrientationsで制限
- よくあるのはカテゴリ拡張
- 呼ばれない可能性もあるので避けたい
- AspectsによるMethod Swizzling
#potatotips 根本的にはその愚直な方法というのをHackyな方法で解消してるに過ぎないので、それ以外の方法はまあ読みやすさとかのバランスで決めればいい感じですね。保守的に誰もがわかるようにやるならビューコントローラごとに書くのがベターです。
— kishikawa katsumi (@k_katsumi) 2015, 5月 13
備考
自分がやってみたことがある他のもう一つの方法として、アフィン変換でviewを90度回転させる方法もあります。
これはiOSの傾きセンサーを利用することで標準の画面回転のようにできるし、逆に言えばiPhoneの設定で縦固定にしていても横画面モードにすることが出来ます。
Google公式のYouTubeアプリで全画面表示を選んだ時の動作は上記の通りなのでアフィン変換で90度回転させているはず。また、AVFoundationで動画を再生するviewも90度回転して再生できるのでおそらく問題ないでしょう。ただ、iOSの傾きセンサーで向きを取得し標準の回転のようにするのだけは少々手間がかかります。
(もちろんナビゲーションのUIなどは当然アフィン変換で回転するだけでは短いため、広げる必要があります)
AppStore申請を一式まるっと自動化する
発表者は @tomzoh
- 申請用ツール一覧
- deliverで必要なスクリーンショット画像、テキストをアップロード
- seleniumでwebの申請を自動化している
Timepiece
発表者は @naoty
- 日付関連を直感的に行うライブラリの紹介
- 足し算で時間を足したりは + 1.minute
- 月による変わる月末の取得は now.endOfMonth
@naoty_k Timepiece、ざっとコードを見ました。カレンダーを取得するところは`NSCalendar.currentCalendar()`ではなく、西暦に固定したほうがいいんじゃないでしょうか? #potatotips
— kishikawa katsumi (@k_katsumi) 2015, 5月 13
fastlaneとCircleCIではじめるアプリ配布の定期実行
発表者は @hedjirog
- WantedlyはiOSアプリが増えているのでCI環境の構築は費用対効果が大きい
- Wantedlyでは
- fastlane使ってworkflowとして固める
- 設定ファイルでビルドから配布までを記述
- Fabricを使って配布
- CircleCIでworkflowの定期実行
- circle.ymlに定義を書く
- fastlane使ってworkflowとして固める
殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜
発表者は @shu223
- バックグラウンドでもBluetooth Low Energy(BLE)で通信できる
- バックグラウンド起動していればローカル通知も出せる
- 詳しくは「iOSxBLE CoreBluetooth」本を書いたので読めば分かる!
iOS8.3でユーザーが明示的にアプリを停止させた場合は復元できなかったそうです
おわりに
potatotipsはクックパッド社が毎月開催場所を変え主催をそれぞれの会社で行うiOS/Android勉強会なわけですが、「自分たちのやり方が合ってるんだろうか」という話を何回か耳にしたことがあります。
参加してる側からすると、それぞれのオリジナリティがあった方が面白いのでどんどん型にはまらないやり方を試してみたらいいじゃない、という気持ちですが、実際に開催する側は基本をまず踏まえたいという真面目な思いなんでしょう。それもそうだなとは思うんですがこちとらモンストやりながら参加してるんでそこら辺は気にしないでいいかもしれないですね!
次回の #potatotips はBizReach社で開催されるようです。WWDC2015の後なので旬な話題が聞けるのではないでしょうか。