deviceready 仅在 iOS 10 30 秒后触发

deviceready only fire after 30 seconds in iOS 10

当我 运行 在我的 iOS 设备上使用

时,我的 ionic 应用程序没有启动或启动很晚
ionic run ios --device -lcs

我删除了所有带有ionic plugin rm ...的插件,删除了plugins/目录的内容,然后重新安装。 我还使用 ionic platform rm/add ios.

删除并重新安装了 ios 平台

我被这个困住了。

iPhone (6+) 在 iOS 10.

我正在使用 ionic 1 和最后一个 ionic CLI。

编辑: 我一个一个地删除了所有插件,看来问题是由于 cordova-plugin-network-information 和 cordova-plugin-device。

Process 663 detached
(lldb) 
(node:26790) DeprecationWarning: Using Buffer without `new` will soon stop working. Use `new Buffer()`, or preferably `Buffer.from()`, `Buffer.allocUnsafe()` or `Buffer.alloc()` instead.

14    030280   warn     Native: deviceready did not fire within 2000ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.
15    030605   info     [object Object]
16    033286   log      deviceready has not fired after 5 seconds.
17    033290   log      Channel not fired: onCordovaInfoReady
18    033293   log      Channel not fired: onCordovaConnectionReady
19    363977   log      DEVICE READY FIRED AFTER, 32259, ms

我的 run.js、AppCtrl.js 和我的主视图的控制器封装在 $ionicPlatform.ready(function () {..});`

我的内容安全策略是:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; connect-src 'self' 'unsafe-inline' 'unsafe-eval' blob: ws: *;">

这似乎是 Ionic 框架的常见问题,可能有多种原因。原因之一可能是您使用的插件存在问题,也可能是平台文件夹存在问题。 Ionic CLI 项目中似乎有关于此的 open issue

以下可能是此问题的可能修复方法:

  1. 删除有问题的插件并重新添加
  2. 删除平台文件夹并重新添加。
  3. 可能避免使用实时重新加载选项
  4. 如果问题是 iOS 特定的,那么您可以尝试放宽内容安全策略

你也可以看看这个link

希望这对您有所帮助。

我添加了感谢@baviskarmitesh 的回复。但是我必须将 gap 添加到内容安全策略中,现在它似乎可以工作了。

我在 index.html 文件的 内容安全策略 中添加 data: gap: https://ssl.gstatic.com 'unsafe-eval'after default-src *,如下所示:

<meta http-equiv="Content-Security-Policy" content="
  default-src * data: gap: https://ssl.gstatic.com 'unsafe-eval';
  style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
  script-src 'self' 'unsafe-inline' 'unsafe-eval' *;
  connect-src 'self' 'unsafe-inline' 'unsafe-eval' blob: ws: *;
">

现在 deviceready 可以快速触发我所有的插件。