2018年振り返り

総括

今年は割と潜っていた感じがするので、来年はもっとアクティブに活動できるといいですね。それと今年は新しくリリースした・新たにコミッターになったOSSがなかった年だったっぽいので、何か新しいものに関わったり、Swiftにももっとコミットしていきたいです。沢山旅行もしたいしお金も欲しいしお酒も飲みたい!✈️💰🍻

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であることがよく分からないですよね。

https://twitter.com/aciidb0mb3r/status/1007293445168250880

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

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プラグインを使っていきましょう 💪