概要
条件
generator-ionicを使用して開発。grunt emulate:ios --livereload
をして、consolelogs
でconsole.logを有効にする。
現象
app.js
のrun
にある$ionicPlatform.ready
が走らない(他の箇所にあるものも同様)。
app.js
angular.module('app', ['モジュール']).run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
console.log('$ionicPlatform.ready log');
});
})
代わりに、以下の様なエラーが出現。
1 log deviceready has not fired after 5 seconds.
2 log Channel not fired: onCordovaInfoReady
この辺りの記事を見てみたが、どの記事も、根本的な解決策ではなかったり、自分とは関係のなさそうな原因だったりで、途方に暮れる。
- Ionic CLI livereload causes errors: deviceready has not fired after 5 seconds - Ionic Forum
- DeviceReady not firing · Issue #167 · katzer/cordova-plugin-local-notifications
-
Function inside ionic.Platform.ready() is never fired on android · Issue #1751 · driftyco/ionic
- cordova.jsの読み込み位置を変更
- $ionicPlatform.ready not firing - ionic - Ionic Forum
- deviceready has not fired after 5 seconds · Issue #259 · driftyco/ionic-cli
-
Cordova 3.5.0 deviceready not firing after installing media plugin - Stack Overflow
- cordova file pluginのバージョン
解決策
どうしようもなくなったのでstackoverflowで質問をしようとしたところ、以下の記事を発見。
cordovaのバージョンが原因で動かなくなっているらしい。試しに、4.x.x系と指定してあったものを、
package.json
"cordova": "^4.0.0",
3.x.x系に変更し、npm install
を実行。
package.json
"cordova": "^3.0.0",
また、記事にあったように、空のcordova_plugins.json
をルートディレクトリにおく。
そして、念のため以下を実行。
$ ionic platform remove ios
$ ionic platform add ios
grunt emulate:ios --livereload
して確認する。しかし、** BUILD SUCCEEDED **
のあとに、再び以下エラーが・・・。
1 log deviceready has not fired after 5 seconds.
2 log Channel not fired: onCordovaInfoReady
もうダメかと思ったところ、少し待っていると以下が出力された。
com.example.GeneratorIonicTest: 78721
** RUN SUCCEEDED **
そこでクライアントをrestart
をすると・・・。
1 log $ionicPlatform.ready log
無事解決しました。