[Xcode]Xcode 9.3 で iOS 8.x をサポートする場合の注意点

Xcode 9.3 で Deployment target を iOS 8.0 にして開発しているわけだけど、
謎のクラッシュが発生して...なんぞ?となったのでそこら辺の話

URL Scheme でアプリ起動するとクラッシュする!!

です...

Xcode v9.3

なんかXcode 9.2 で iOS 8.x をサポートする場合の注意点というチョット前に書いた記事にタイトルがすごく似ていますが...(笑)

問題

何かと便利なので、Custom URL Scheme を導入している方は多いと思いますが...
iOS 8.x をサポートしている場合下記のような記述になりますよね?

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    // 何か処理
    return true
}

これで...
Custom URL Scheme でappというのを指定した場合に
Safariなんかでapp://と入力してやると普通ならアプリが起動してまぁ何か必要な処理ができるはずなのですが...

Xcode 9.3 だとクラッシュします

該当コードをまるっとコメントアウトするなどしたら大丈夫です。
処理の中にブレークポイント貼ってもそこを通ることはありません...クラッシュします😇

対策

ググってたら Firebase のリポジトリでそんな issue が立てられていて...
そこであーだこーだ議論しているなかのうち@LaurentLKさんがコメントしている通りのやつでした。

LaurentLKさんはバグレポートのリンクをはっていますが、Xcode のリリースノートにもちゃっかりかかれていまして...

...Swift Compiler の問題らしい。
annotaion が nil で実行されるからクラッシュするっぽい

ということで対応としては、LaurentLKさんもXcodeのリリースノートにも書かれているとおり

// annotation: Any -> annotation: Any?
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any?) -> Bool {
    // 何か処理
    return true
}

annotation を optional にするだけです...。
Xcode が waning を出してきますが...このままで!その warning は無視で!
(だれのせーでやってるとおもってるんだ!)


iOS 8.x を切っている場合は、そもそもこれが deprecated になっていて
func application(_:,openURL:,options:)の方に書き換えているはずなのでこの問題は起きないはずです。

まぁ...結論としては...iOS 8.x 切って捨てるべきだよね〜〜〜っていうことです。
こちらからは以上です

追記(2018.05.22)

Xcode v9.3.1 が出たので確認してみましたがやっぱりまだクラッシュしますね...
まだまだ「なんでOptionalにてるの!?」というwarningと付き合っていかなくちゃ😇

参考

Xcode release note
Swift Compilerとかっていう感じで検索してみてください

application:openURL:sourceApplication:annotation: - UIApplicationDelegate | Apple Developer Documentation

application:openURL:options: - UIApplicationDelegate | Apple Developer Documentation

Crash in FIRAAppDelegateProxy application:openURL · Issue #1052 · firebase/firebase-ios-sdk
きっかけをありがとう!issue見つけた瞬間は「おまえか〜💢」って思ってしまってごめん🙏