kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

potatotips #46 に参加しました (ブログまとめ)

potatotips #46 のブログまとめ枠で参加させていただきましたのブログです。

f:id:kumamotone:20171218234435j:plain

今回の会場はdipさんのオフィスです。

f:id:kumamotone:20171218234525j:plain

六本木グランドタワー31F。今年お引越しされたようです。あまりに高級感のある場所で入るタイミングからもう緊張してしまった‥

以下発表内容です。間違いや気になるところなどあればご指摘ください。埋まっていない資料は公開されたのを見つけ次第反映します。

CircleCI 2.0 for macOS / r_plus さん

speakerdeck.com

11/15 に Circle CI 2.0 for macOS がAvailableに!

よかったこと

  • bitriseみたいなworkflow機能が生えた。
    • バージョン指定、job定義部、workflow定義部から成るyamlを書いて設定する。
  • 複数のmac/linux環境でCiを実行できるようになった。
    • 何が嬉しいかというと、Macも複数書けるので、複数XcodeバージョンでのCIを実行可能になった。
  • 書式でcronの書式でスケジュールができるようになった。
  • background実行を指定できるようになった。
    • 依存性のないものをバックグラウンドに回せれば、CI全体として実行時間を短縮できる。
  • key based caching

わるかったこと

  • $CIRCLE_ARTIFACTSが廃止された。 store_artifacts という stepを利用する必要がある。
  • 時間がないので割愛

まとめ

2.0になって、並列でbackground実行したら8分ぐらい掛かってたのが4分になった!やったね

RxSwift を利用した MVVM 実装をしている人におすすめのフレームワーク / Jiro Nagashima さん

いい感じのフレームワークがあったので紹介。

複雑性が増すと状態の管理が難しくなる、人によって実装の方法が異なったりする。そもそもRxSwiftムズい…→足並み揃えるのがムズい

そこでフレームワークを使う。

github.com

View, Reactor が対で存在していて、Action, Stateを介して伝搬する。

View, Reactor は protocol に適合させることで実装する。Actionがenum,Stateがstructで定義できる。

良いところとしては、Actionをenumで定義できるところ。RxSwiftで使うオペレーターが限定的であること。あとサンプルが良い。

検討が必要だと思うところは、画面遷移のロジックはReactorKitは関与しないというところ、ViewとReactorの粒度。

個人アプリでレビューを高くするためにやっていること / star__hoshi さん

speakerdeck.com

個人アプリのモチベーション、レビューのとお金が大事。

SKStoreReviewController

iOS 10.3から使える、Apple公式レビュー催促システム。1行書くだけで使えるが、必ず出るわけではない。

個人で作っているアプリの評価がなかなか良いのだが、SKStore…をいつ出しているかというと、20回目の起動時に出している(本当はもっといいタイミングがありそう)。そこそこ使ってくれている→気に入っている人が多いはずなので。80%ぐらいの人はコメントなし(SKStore…)経由で評価してくれている。

返信機能

返信するとユーザーにメールが届く。返信すればレビューが改善されるのでは?と思った。そこで低評価レビューを23件を返信したのだが、改善してくれなかった‥返信後にレビュー編集してくれた人もいるが、全員高評価の人。

まとめ

SKStore…は今すぐ使ったほうが良い。レビュー返信は低評価を高評価を帰るレビュー返信は難しいのでは…と思う。低評価レビューに返事するのは消耗するし、今はあまり期待しすぎずにユーザーとのコミュニケーションに使うのが良さそうと思っている。

AppRootController を使ってスプラッシュアニメーションを実装する 2017冬 / y.imajo さん

speakerdeck.com

スプラッシュ、これはアプリの起動を早く見せるためのもの(HIG)。LaunchScreen.storyboard はアニメーションできない。しかしやりたくないけど、アニメーションさせたいときもある。なので、LaunchScreen.storyboard と同じ見た目のViewを、LaunchScreenの後に表示して、アニメーションさせつつ画面遷移するという感じになる。

AppDelegate に書くという方法が最短だが、AppDelegateのやることが増える。そこで、AppRootControllerをつかうという方法もある。

speakerdeck.com

AppRootControllerというのは何かというと、以前potatotipsで話したやつ。コンテナ切り替えのViewControllerを作って切り替える。ContainerViewControllerをrootViewControllerとして切り替えない。

Swiftアルバム ver.4.1 / ezura さん

speakerdeck.com

Swift、成長が速い。apple/swiftを見てると成長の過程見れてほっこりする。それはそうと今回はSwift4.1の機能について紹介。

== / hashValue の暗黙的実装

CustomTypeをEquatableに適合させたいとき、なんか static func ==(lhs: CustomType, rhs: CustomType) -> Bool の中で全部の要素を比較、みたいなことをしないといけない。要素増えたらそれも追加しないといけないが、追加漏れしてしまうかもしれない。そんな不安を抱えたまま生活したくない…

型の宣言とプロパティがすべてEquatableなら、暗黙的に==が実装されて、Equatableに適合できるようになった。実装 associated valueをもつenumも同様。(HashableとhashValueに関しても同様)

conditional conformance(条件付き適合)

Genericsプロトコルに適合できない。が、とある条件を満たしている場合だけできるようにした。

どういうことかというと、ElementがEquatableなら、それで構成されるArrayもEquatableって書きたい…!→書けるようになった つまり Array<Array<Equatable適合型> == Array<Array<Equatable適合型> が評価できるようになった。たいした成長。

FaceID、TouchIDを実装してみた / Hideyuki Okuni さん

Face IDとFace IDを実装してみた話。

FaceID、TouchIDで分岐させる必要はない。コードを書くだけで勝手に出てきてくれる。

Infor.plist にNSFaceIDUsageDiscriptionを書く。書いてないと怪しいダイアログが出る。

LAContextのevaluatePolicy()を呼ぶといい感じになる。ちなみにcanEvaluatePolicyは呼ぶ必要がある。

詳しくはQiitaにあるのでご参照ください。

qiita.com

addObserver から考える API インタフェース / KAMEDAkyosuke さん

iOS9からNSNotificationCenterのremoveObserverしなくても良くなった。たしかにドキュメントにもそう書いてある。

ただ下の方に気になることが書いてあって、usingBlockではやっぱりremoveしないといけないって書いてある。つまり、iOS9からNSNotificationCenterのremoveObserverしなくても良くなったではなく、addObserver:はremoveObserver:しなくても良くなったというのが正しい。

そもそもremoveObserverしなくて良いってどういうことやねん。プログラミングの作法として、addしたらremoveするのがふつう。

ほかのAPIも調べてみたが、WKHTTPCookieStoreはremoveしないといけない。AVPlayerも開放しないと予期しないことになるよと言われている。NSNotificationCenterだけしないとうのはちょっと微妙…

たしかに便利になったわけだが、APIのインターフェースはそれ自身だけではなく他のクラスやフレームワーク等から決めるべきだと思う。そのため自分のチームでは本件に関してはremoveObserver:をするようにした(というかusingBlockを使うことにした)。

感想

RxSwiftをいい感じに使えるフレームワークって無いのかなとぼんやり思ってたので、ReactorKitはあとでさわってみたいなーと思いました。

Swift4.1の話は良い感じにまとまっていて理解が深まりました。Discord Offlineのときも思ったけど個人的に言語の話を楽しそうにする人見るとほっこりして良い。

NSNotificationCenterの話は、API設計という視点で掘り下げているのがユニークで面白いなーと思いました。便利だからといって、標準の作法や感覚に異なるインターフェイスを用意するのは微妙だなというのは(言われてみればだけど)たしかにと思いました。

いつもながら学びある勉強会でしたー運営のみなさま発表者のみなさまありがとうございました!