今回は、Cordova アプリを開発中に遭遇した「TypeError: doc.find is not a function」というエラーについてです。
発生状況としては、iOS プラットフォームで開発を行っている最中、プラグインをいくつか追加した際に config.xml
に info.plist
に反映する説明文章を手動で追加し、その後 cordova prepare ios
を実行したら発生しました。
追加したコードのサンプルは下記のとおりです。
<edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge"> <string>need location access to find things nearby</string> </edit-config> <edit-config target="NSLocationAlwaysAndWhenInUseUsageDescription" file="*-Info.plist" mode="merge"> <string>need location access to find things nearby</string> </edit-config>
上記は、cordova-plugin-geolocation
プラグインを追加した際に必要になる、位置情報へのアクセスを許可/拒否を確認するときのダイアログに表示されるメッセージを指定しています。
なお、<string>
タグ内のメッセージは適宜変更してください。
こちらを config.xml
に追加後、プロジェクトを prepare
したところ、今回のエラーが発生しました。
で、エラーメッセージだけでは何が原因で、どう直していいか分からなかったので調べたところ、下記の記事がヒットしました。
TypeError: doc.find is not a function – Qiita
https://qiita.com/mokkos/items/10cd36a920fda7e233bd
こちらの参考記事によると、プラットフォームを削除して再度追加するだけで解消できるとのことでした。
Xcode で開いているプロジェクトを閉じた後、ターミナルソフトで下記のコマンドを実行しました。
// iOS プラットフォーム削除 cordova platforms rm ios // iOS プラットフォーム追加 cordova platforms add ios
そして再度 cordova prepare ios
を実行したところ、問題なく実行できました!
また、Xcode でプロジェクト開いてみたところ、info.plist
に config.xml
で指定したメッセージが反映されていました。
原因は分かりませんが、info.plist
への説明文書の反映で失敗していたのが原因のようでした。
以上、Cordova アプリ開発中に遭遇した「TypeError: doc.find is not a function」エラーの対処法についてでした。
例外はありますが、Cordova でアプリを開発中に、原因不明のエラーに遭遇したら一度プラットフォームを削除して再追加する!というのはかなり有力なエラー解決方法ですね。
ご参考になれば幸いです。