Swift 4.2のBatch Modeについて

https://swift.org/blog/swift-4-2-released/Support for batch mode compilation resulting in faster build timesと言及されているものについて。

この件はWWDC 2018のセッションでも紹介がありました: https://developer.apple.com/videos/play/wwdc2018/401

  • これまでSwiftのビルドは簡単にまとめると、デバッグビルド(インクリメンタルビルド)では1ファイルずつコンパイル、リリースビルドではWhole Moduleモードと呼ばれるモードで、モジュール内の全ファイルを一度にまとめてコンパイル、という感じであった
    • Whole Moduleモードでは、モジュール内で継承されていないclassfinalが付いていなくても、実質的にfinal扱いするという最適化もできたりする
  • デバッグビルドが1ファイルずつコンパイルするのに比べて、Whole Moduleモードでまとめてコンパイルする方が速いケースがあった
    • このcompilation modeは最適化のモードとは分離されていて、SWIFT_COMPILATION_MODEというビルド設定で変更できる
    • 以前まではWhole Module Optimizationと呼ばれる最適化として提供されていたが、Swift 4.1(Xcode 9.3)からcompilation modeと最適化のモードが分離されるようになった
  • Swift 4.2からはインクリメンタルビルドにBatch Modeというものが実装され、デバッグビルドでも複数ファイル単位でコンパイルできるようになり、ビルドが高速化した

デバッグビルドが速くなって嬉しいですね。

iOSDC Japan 2018でCarthageのLTをします #iosdc

こんにちは。すでに会社のDeveloper Blogでも公開されていますが、iOSDC Japan 2018でCarthageの最新情報についてLTをします。

iOSアプリ開発に欠かせないパッケージマネージャーのCarthageですが、その新機能になかなか気付かないこともあるでしょう。本LTでは、昨年のiOSDC Japanからの1年分のアップデートの中から要注目の箇所をピックアップして紹介することで、開発者の皆様の日々の開発体験の向上に寄与したいと思います。

最近なかなかリソースを取れずにCarthageの進捗があまり芳しくないのは事実ですが、この一年分を振り返ってみるとそれなりの内容にはなるかと思います。

iOSDC Japanでは3年連続のLT登壇となります。今年もきっとLTタイムにはビールなどが用意されていると思うので、楽しい気分でワイワイやっていきましょう🍻

過去のLT情報

Swift Package Managerの略称はSwiftPMが推奨

SPMという表記をたまに見かけるけど、Swiftであることがよく分からないですよね。

(@aciidb0mb3rさんはAppleの人で、Swift Package Managetの主要開発者の一人です)

NimbleでSwiftコンパイラーのバグ(リグレッション)に遭遇した話

Xcode 10 beta 1(Swift 4.2)でNimblethrowAssertion()/raiseException()マッチャーなどを使うとランタイムクラッシュする事象が発生して、その成り行きが面白かったのでここに記します。

ここまで

ここから

問題なかったらワークアラウンドのPRはrevertできるのでめでたい(期待)😇。

追記

Xcode 10 beta 2には該当の修正はまだ含まれていませんでした……残念。beta 3に期待。

既存iOSアプリへのReact Native導入とcocoapods-fix-react-native

  • 既存iOSアプリへのReact Native導入は公式にドキュメントが用意されている
  • その手順に従うと、React Nativeの依存解決にはCocoaPodsを使うようになっている
    • 一方 react-native init で新規にプロジェクトを作成する場合は、各ライブラリがstatic libraryとしてxcodeprojに直接設定されるようになっている
  • React NativeのCocoaPodsサポートではsubspecが使われているが、subspecではヘッダーのディレクトリが分割されないので、static libraryとして組み込む場合とは一部ヘッダーのインポート方法が異なってビルドエラーになる
    • 他にもエラーになる要因はいくつかある
  • そのような問題を解消してくれるのが https://github.com/orta/cocoapods-fix-react-native/ というCocoaPods用のプラグイン

ということで、既存iOSアプリにReact Nativeを導入したい場合はcocoapods-fix-react-nativeプラグインを使っていきましょう 💪

React Nativeでのクラッシュレポートについて調べてみた

Crash Reporting for React Native apps · Issue #5378 · facebook/react-native · GitHub

雑感としてはSentryがよさそうな雰囲気。App Centerもいいかもしれない。

Crashlyticsとそのラッパー

iOS, Androidのネイティブのクラッシュレポートの定番はCrashlytics(無料だし)だが、ソースマップ適用したスタックトレースを表示したりできるわけではないので、React Native側のJSのエラーレポートには力不足だと思う。

その他

追記

Twitterで情報をもらってVisual Studio App Centerのことを思い出した!これもReact Nativeに対応している(ソースマップ対応)。

App Center Crash Reporting for React Native - Visual Studio App Center | Microsoft Docs

CodePushもやっているから納得。