2019.3.23-30のiOSアプリ開発ニュース

今週のiOS関連の記事を雑に振り返ります。今週はXcode10.2正式版がリリースされSwift 5がみんな使えるようになりましたね。

Swift5からprotocolでclassをinheritできるようになった?

しかしこれを「protocolがclassから継承できるようになった」って表現してしまうと無用な勘違いしそう。

前からwhere使えばできたし、whereのほうが勘違いしなくて良いと思うんだけどなあ。

Firebaseを使っているiOS/AndroidエンジニアにAppSyncを触ってもらった

「Firestoreにとって変わるものがついにAWSから!」

だいたいの特徴は次を読むと分かる。

・マネージドのGraphQLサービス
・データストアをDynamoDB、RDSが選択できる
・リアルタイムデータ同期
 ・オフラインでも使用でき、オンラインになったタイミングで同期を行ってくれる

GraphQLって自前でやるの相当大変そうで自分には関係ないなーと思ってたけど、AWSの資産をFirestoreのように使うためにGraphQLが採用されるのは面白いですね。

オンラインになったタイミングで同期してくれるのも興味深い。ここらへん自前で取得API作ると最新から取得するとか最古から取得するとか取得方向を分けたAPIが必要になったりするので。

あとは単純にブログとしても読んで楽しかった。

Open Quicklyで開く先の行番号を指定できる

Xcodeショートカットキー 'command shift o' で開くOpen Quicklyですが、入力欄でコロンと行番号を入力するとその行番号までジャンプできるとのこと。

「何に使うの?」って感じかもしれませんが、github.com上でファイルを目視してからXcode上で開きたい場合や、人に該当する行を教えてもらうときに役に立つかもしれません。

ちなみに開いているファイルでの行ジャンプは'command L'ですね。自分はジャンプで戻りたいときにエディタで編集しておいて'command Z'で編集をundoしつつ戻る癖がついていて行ジャンプもあんまり使わないです。

新規チームで新規開発を始める時にやること(Android)

テーマがAndroidだけどチェックシートが参考になったのでiOS版を考えてみました。

- やってて思うんですがフォーマッタを適用するタイミングが悩ましいところですね。pushしたあとに必ずフォーマッタ適用してそれが差分に現れるんでそれ見てコミットして再pushするのが良いのかな

- XcodeGenはXcodeに関する前提知識を要求されるので慣れてないとわけがわからない気がしますので、最初にまっさらなプロジェクト作って何がどうなるかを見ると良いです

ちなみに2018年はじめあたりはXcodeGenに対してあまり乗り気じゃなかったです。

ただ、ファイルを増やすごとにコンフリクトの心配しないといけないのは本当に嫌な感じでそれが解消できるっていうのが大きい。結構なデメリットもあるんですがそれはまた今度。

Android開発はFlutterでやる方がいい説

逆に「iOS開発はFlutterでやる方がいい説」とか言われたら自分は反感持ちそうだと考えたら、強烈なタイトルかなと思いますね。

「Andoridアプリ開発はもはやFlutterでやっても問題ないレベルにまで到達していてGoogleの本気度がすごい」とかそういうタイトルのほうが柔らかいとかんじました。

内容としては次の文章だけ読んで安心。

いざとなればAndroidネイティブだけの画面に遷移できる
最初の画面はできないですが、遷移先の全ての画面をKotlin/Javaで開発できます。

今度Androidアプリ開発やるときはFlutter採用するかも...

Firestore iOS SDKにCodabble来るのか?


デモンストレーション用のPull Requestということらしいけど、参考になる点がいくつかある。

まず、Encode(json化)失敗したら基本的にはアプリクラッシュさせていい。もうこれはしょうがない、こうするよねという感じ。

private func encodeOrDie<T: Encodable>(_ value: T) -> [String: Any] {
 do {
   return try Firestore.Encoder().encode(value)
 } catch let error {
   fatalError("Unable to encode data with Firestore encoder: \(error)")
 }
}

次はDocumentSnapshotのextension。たしかにDocumentSnapshotにこういうメソッドあると良い。データがないだけでエラーをthrowするのが良いのかはちょっと気になる。自分だったらnilを返す。

extension DocumentSnapshot {
 public func data<T: Decodable>(as type: T.Type) throws -> T {
   guard let dict = data() else {
     throw DecodingError.valueNotFound(T.self,
                                       DecodingError.Context(codingPath: [],
                                                             debugDescription: "Data was empty"))
   }
   return try Firestore.Decoder().decode(T.self, from: dict)
 }
}

ちなみに、自分は alickbass/CodableFirebase を使ってて不便はないけど標準でCodableあると全然違うと思いますね。

Spotifyのスケーリングアジャイル

日本の大きな会社だと縦割りになったり横割りになったりを繰り返すわけだけど、海外でもそういうものなのかもしれない。そういうものたいする回答の一つ、という意味でも面白い。

(自分の経験や人に聞いた話では、日本の古くて大きな会社では「縦割り」になると同じことを別部署でやってるという効率の悪さを感じてしまい、「横割り」になると事業へのコミットメント不足を感じて組織改編が繰り返されることがある)

その他

最近買った漫画


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

ありがとうとざいます。最近のおすすめPS4ゲームはアンセムです!
13

y.imajo

RxSwift研究読本を書いています https://swift.booth.pm/

週刊iOSアプリ開発ニュース

ほぼ週刊でiOSアプリ開発にまつわるメジャーじゃない話をおさらいします。
1つ のマガジンに含まれています
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。