potatotips #46 のブログまとめ枠で参加させていただきましたのブログです。
今回の会場はdipさんのオフィスです。
六本木グランドタワー31F。今年お引越しされたようです。あまりに高級感のある場所で入るタイミングからもう緊張してしまった‥
以下発表内容です。間違いや気になるところなどあればご指摘ください。埋まっていない資料は公開されたのを見つけ次第反映します。
CircleCI 2.0 for macOS / r_plus さん
11/15 に Circle CI 2.0 for macOS がAvailableに!
よかったこと
- bitriseみたいなworkflow機能が生えた。
- バージョン指定、job定義部、workflow定義部から成るyamlを書いて設定する。
- 複数のmac/linux環境でCiを実行できるようになった。
- 書式でcronの書式でスケジュールができるようになった。
- background実行を指定できるようになった。
- 依存性のないものをバックグラウンドに回せれば、CI全体として実行時間を短縮できる。
- key based caching
わるかったこと
- $CIRCLE_ARTIFACTSが廃止された。 store_artifacts という stepを利用する必要がある。
- 時間がないので割愛
まとめ
2.0になって、並列でbackground実行したら8分ぐらい掛かってたのが4分になった!やったね
RxSwift を利用した MVVM 実装をしている人におすすめのフレームワーク / Jiro Nagashima さん
いい感じのフレームワークがあったので紹介。
複雑性が増すと状態の管理が難しくなる、人によって実装の方法が異なったりする。そもそもRxSwiftムズい…→足並み揃えるのがムズい
そこでフレームワークを使う。
View, Reactor が対で存在していて、Action, Stateを介して伝搬する。
View, Reactor は protocol に適合させることで実装する。Actionがenum,Stateがstructで定義できる。
良いところとしては、Actionをenumで定義できるところ。RxSwiftで使うオペレーターが限定的であること。あとサンプルが良い。
検討が必要だと思うところは、画面遷移のロジックはReactorKitは関与しないというところ、ViewとReactorの粒度。
個人アプリでレビューを高くするためにやっていること / star__hoshi さん
個人アプリのモチベーション、レビューのとお金が大事。
SKStoreReviewController
iOS 10.3から使える、Apple公式レビュー催促システム。1行書くだけで使えるが、必ず出るわけではない。
個人で作っているアプリの評価がなかなか良いのだが、SKStore…をいつ出しているかというと、20回目の起動時に出している(本当はもっといいタイミングがありそう)。そこそこ使ってくれている→気に入っている人が多いはずなので。80%ぐらいの人はコメントなし(SKStore…)経由で評価してくれている。
返信機能
返信するとユーザーにメールが届く。返信すればレビューが改善されるのでは?と思った。そこで低評価レビューを23件を返信したのだが、改善してくれなかった‥返信後にレビュー編集してくれた人もいるが、全員高評価の人。
まとめ
SKStore…は今すぐ使ったほうが良い。レビュー返信は低評価を高評価を帰るレビュー返信は難しいのでは…と思う。低評価レビューに返事するのは消耗するし、今はあまり期待しすぎずにユーザーとのコミュニケーションに使うのが良さそうと思っている。
AppRootController を使ってスプラッシュアニメーションを実装する 2017冬 / y.imajo さん
スプラッシュ、これはアプリの起動を早く見せるためのもの(HIG)。LaunchScreen.storyboard はアニメーションできない。しかしやりたくないけど、アニメーションさせたいときもある。なので、LaunchScreen.storyboard と同じ見た目のViewを、LaunchScreenの後に表示して、アニメーションさせつつ画面遷移するという感じになる。
AppDelegate に書くという方法が最短だが、AppDelegateのやることが増える。そこで、AppRootControllerをつかうという方法もある。
AppRootControllerというのは何かというと、以前potatotipsで話したやつ。コンテナ切り替えのViewControllerを作って切り替える。ContainerViewControllerをrootViewControllerとして切り替えない。
Swiftアルバム ver.4.1 / ezura さん
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にあるのでご参照ください。
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設計という視点で掘り下げているのがユニークで面白いなーと思いました。便利だからといって、標準の作法や感覚に異なるインターフェイスを用意するのは微妙だなというのは(言われてみればだけど)たしかにと思いました。
いつもながら学びある勉強会でしたー運営のみなさま発表者のみなさまありがとうございました!