前置き
技術的な原因よりもOSS PRの経験に焦点を当てた記事です。誤解を防ぐため最初に結末をお伝えすると自らCloseしています。「ビルドエラー」などOSSのソースコードに不備があるかような表現は「途中まで思っていた」と解釈してください。故にタイトルに「もう少し確認したら良かった」とつけています
個人でiOS/Androidのネイティブアプリを作ろうとしてFCMのサンプルコードを触っていたところ私の環境ではビルドエラーになりました。原因判明したのでPRしました。
PRしたOSS
iOSのFCMでプッシュ通知を受信するためのサンプルコードです。
https://github.com/firebase/quickstart-ios/tree/master/messaging
PRの内容
GoogleのCLAに同意して「importするモジュールが不足している」旨をPRしました。Githubをご覧頂ければCloseした経緯はネタバレ同然なのですが、記事として最後まで書きます。修正個所は1行のみです。
import Firebase
+ import FirebaseMessaging
この1行が無いとそれに該当するモジュールのクラスが認識されずビルドエラーになっていたのです。なお、現在Githubをみるとfromのリポジトリがunknown repositoryになっていますが筆者が削除したためだと思います。
PRした直後
ここは余談になります。CLAの同意確認やTravis CIのビルドが動いていました。
レビュー
レビュアーさんからコメントを頂きました。Google機械翻訳です。
その上にあるFirebaseのimport文に自動的にインクルードされるはずですが、これが失敗したのは初めてではありません。このビルドの問題は、実際にプロジェクトをビルドしようとすると消え去るのですか、それともビルドに失敗するのでしょうか?
もう一度筆者の修正を見ながらレビュー結果と照らし合わせると、要するにimport Firebase
があれば問題無いはずの想定のようですね。
import Firebase
+ import FirebaseMessaging
調査する
Firebaseのimport文に自動的にインクルードされるはず
指摘頂くと「なぜ自動的にインクルードされないのか?」を調査したくなりました。結果としてはCocoaPodsのキャッシュ周りをクリアしてビルドしたらimport FirebaseMessaging
を削除しても問題無く動作しました。なんだか申し訳ない気持ちになりました
rm -rf ~/Library/Caches/CocoaPods/
rm -rf Pods
pod install
結果を伝える
調査した結果を伝え問題が解決したことと、レビュアーさんに筆者のこのコメントを確認して頂いたらCloseする旨も伝えました。
Closeする
このインポートを追加する価値があるかもしれません。
とコメントを頂きましたが、CocoaPodsのキャッシュをクリアしたら動いたわけですし、筆者はシンプルな方を好むのでCloseさせて頂くことにしました。
終わりに
「PRしてマージしてもらった!」とか「PRしたのでマージされることを気長に待ちましょう!」という情報は多かったのですが「自らCloseした」情報はあまり見かけなかったので書いてみました。(実際の事例はあるのでしょうが情報として発信していないのかもしれません。)
タイトル名に繋がってきますが「もう少し確認したら良かった」とは思いますね。今回の例で言えばレビューして頂き初めて「自動的にインクルードされる」と分かりOSSで想定されている動作を調査することができたので勉強になりました。熟練した方々はすぐに「自動的にインクルードされる」と分かるのかもしれませんね。OSS PRの意欲が萎えたりしていませんので引き続きやっていこうと思います。初マージされたら記事を書かせて頂くかもしれません。