Ember Cordova 应用程序卡在 iOS 11.3 的加载屏幕上
Posted
技术标签:
【中文标题】Ember Cordova 应用程序卡在 iOS 11.3 的加载屏幕上【英文标题】:Ember Cordova app stuck on loading screen in iOS 11.3 【发布时间】:2018-04-19 22:42:21 【问题描述】:我有一个使用 Corber 为 Ember-Cordova 构建的应用程序。 Xcode 9.3 版 科尔多瓦-ios@4.5.4 所有依赖项都更新到最新版本。
我正在模拟器上进行测试,因为我没有可以安装 iOS 11 的开发 iPhone。
该应用在 iOS 11.2 及更早版本上可以正常加载 - 但在 iOS 11.3 上它会卡在初始屏幕上。过了一会儿,我看到一个加载图标,但页面永远不会改变。
通过在应用程序开始加载后立即使用 Safari 进行分析,我可以看到 js 脚本和 css 没有从 /www/index.html 加载。这是我在控制台日志中看到的:
无法加载脚本 file:///Users/username/Library/Developer/CoreSimulator/Devices/07A01A47-573B-4D25-ABE3-AV9179985ABF/data/Containers/Bundle/Application/7976FE33-BLO3-21E9-A055-707AAC68468B/App%20Name.app /www/assets/vendor-e8t893cf6a6bg0f81f23d4a68ae6ffde.js。 完整性元数据检查失败。
我试图查找有关“完整性元数据检查”的信息,据我所知,iOS 正在运行它来验证正在导入的脚本的校验和。在 Xcode 中的 /www/index.html 中,我可以看到脚本标签具有“完整性”属性,即两个校验和 - 一个 sha256,一个 sha512。例如
<script src="assets/vendor-e8e903cf6a6bf0f81f23d4b68ae6ffde.js" integrity="sha256-MPm9fFc7ljuslonkMxW0TnQOAcy6KgJ4zLs+ptl/b58= sha512-oIqpQbUMPLBbSASoSCJ/+z55y2g6NlBzhTE3V+uDt8TNeJam5GAWoGT/D2u4ihIxE586JPu3c+r4GaUpjUWCAw=="></script>
所以我猜想发生的事情是 iOS 11.3 以某种方式检查文件的校验和,与它们的“完整性”属性进行比较,但没有得到匹配。有谁知道导致这种情况发生的原因以及如何解决?
注意尽管从表面上看,这与无法加载资源有关,但我认为这与内容安全策略无关——我在 /www/index.html 中尝试了内容安全策略的多次迭代——最近:
default-src * gap://ready file:; style-src 'self' 'unsafe-inline' *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *
这些似乎都没有影响,如果这是一个问题,我希望看到与内容安全策略相关的错误。
【问题讨论】:
【参考方案1】:我们发现了ember-cli-sri
- http://blog.isleofcode.com/untitled/ 的问题
对 ember-cli-sri 存储库的评论为我们解决了这个问题。 https://github.com/jonathanKingston/ember-cli-sri/issues/33#issuecomment-378448379
【讨论】:
只是为了详细说明,删除 'cordova-plugin-wkwebview-engine' 修复了 11.3 的问题 - 但是在 iOS 12 上测试,问题又回来了 - 这一次,添加了“SRI:启用: false " 到 ember-cli-build.js 文件修复了问题。【参考方案2】:我也遇到了这个问题。 目前我通过编辑由 build 命令生成的 index.html 来解决它,以便从脚本标记中删除完整性属性。 这至少让它在模拟器中运行。 等着看它是否通过了应用商店的审查。
【讨论】:
您是否也安装了cordova-plugin-wkwebview-engine?删除它为我修复了它。祝你好运! 对不起,我应该提到这一点。我确实有 cordova-plugin-wkwebview-engine 并且我进行了更改,这样我就不必删除它,因为我想继续使用 WKWebview 而不是 UIWebView【参考方案3】:问题似乎与cordova插件有关:cordova-plugin-wkwebview-engine。
我不完全了解该插件如何与 iOS 配合使用,但它似乎不能很好地配合 iOS 11.3。删除插件就可以了。重建后应用正常加载。
【讨论】:
如果没有 cordova-plugin-wkwebview-engine 插件,您的应用程序将使用 UIWebView,它自 iOS 9 以来已被弃用。Apple 已将截止日期推迟了几次,但一直坚持其打算在 App Store 中禁止 UIWebView 并让人们迁移到 WKWebView。以上是关于Ember Cordova 应用程序卡在 iOS 11.3 的加载屏幕上的主要内容,如果未能解决你的问题,请参考以下文章
ionic 5 iOS 应用程序卡在启动画面上,没有错误日志
在 Visual Studio Cordova 上打包和签署 ios 应用程序时遇到问题