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もやっているから納得。

Pipelineを使うJenkinsで、グローバルの設定でPATHを付け加えたい場合はPATH+EXTRAを使用する

こんばんは。Jenkinsと戯れている今日この頃です。

キー: PATH
値: /usr/local/bin:$PATH

ではなくて、

キー: PATH+EXTRA
値: /usr/local/bin

とする必要がある。こちらからは以上です。

swift-llvmがLLVM 6.0に追従した模様

これでSwiftのWebAssembly対応もちょっと捗るのかもしれない?

参考: https://github.com/kripken/emscripten/issues/2427#issuecomment-372025515

MintでSwiftPM製のCLIツールを管理する

Swift界隈では、Swift Package Manager (SwiftPM) で作られたCLIツールが増えつつあって、それのインストールやバージョン管理をどうしようかという問題がある。一部のツールはHomebrewやCocoaPodsでの配布もしているけど、全ては賄えない。となると各ツールのリポジトリをチェックアウトして$ swift buildしてパス通った箇所にコピーするなどしないといけないけど流石にそれは面倒。

というところで https://github.com/yonaskolb/Mint を使うとその辺の管理が楽になりそう(Mint自体はHomebrewでインストールできる)。

$ mint run yonaskolb/XcodeGen@1.2.4 xcodegen --spec spec.yml # pass some arguments
$ mint install yonaskolb/XcodeGen@1.2.4 --global=false # installs a certain version but not globally
$ mint install yonaskolb/XcodeGen # install newest tag
$ mint run yonaskolb/XcodeGen@1.2.4 # run 1.2.4
$ mint run XcodeGen # use newest tag and find XcodeGen in installed tools

$ mint install/usr/local/binにもリンクしてくれるようなので便利そう。

参考: Swift Package Managerを使って作成したコマンドをMintでインストールする