ionic 2 和 iOS10 的 CSP 之争

Posted

技术标签:

【中文标题】ionic 2 和 iOS10 的 CSP 之争【英文标题】:ionic 2 and iOS10 the CSP struggle 【发布时间】:2017-01-17 15:52:41 【问题描述】:

我正在使用 ionic 2/Angular 2 为 androidios 10 开发应用程序。

我的应用在 android(5.0~7.0) 上完美运行。但是在 iOS 10 上,我的应用在启动时不会通过白屏。

我的应用程序使用 angular2 http 请求从我的服务器获取 JSON,并且正在使用其他几个 cordova-plugins(Zip、File、File-Transfer)和 ionic2 存储(我没有安装 cordova s​​qlite)。

我搜索了几天,我相信解决方案是正确设置 Content-Security-Policy 元标记。

但是,我尝试了各种元标记,但不幸的是,我仍然卡在 iOS 10 上的白屏。 (Android 工作有无 CSP 标签)

我已尝试更新、重新安装所有组件和插件。尝试添加,删除操作系统平台,离子状态重置等......但仍然没有解决方案。

这是我当前在 '/src/index.html' 中的元标记(在 head 标记内部和 title 标记之上):

<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; script-src 'self' 'unsafe-inline' 'unsafe-eval' data: *; style-src 'self' 'unsafe-inline' *; img-src 'self' data: blob: *; media-src 'self' mediastream: blob:; connect-src * blob:">

我的 iOS 模拟器(iPhone SE iOS10.2)控制台登录启动我的应用程序:

1 月 17 日 19:48:24 baksagimms-Mac-Pro CoreSimulatorBridge[32274]: 粘贴板更改侦听器回调端口 注册 1 月 17 日 19:48:41 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:粘贴板更改监听回调端口 1月17日19:48:43注册 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:更改粘贴板 1 月 17 日注册的侦听器回调端口 19:48:43 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:粘贴板 更改已注册的侦听器回调端口 1 月 17 日 19:48:43 baksagimms-Mac-Pro CoreSimulatorBridge[32274]: 粘贴板更改侦听器回调端口 注册 1 月 17 日 19:48:44 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:粘贴板更改监听回调端口 1月17日19:48:44注册 baksagimms-Mac-Pro DTServiceHub [32275]:无法创建名为 com.apple.instruments.server.services.processcontrol.posixspawn 1 月 17 日 19:48:45 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:粘贴板 更改已注册的侦听器回调端口 1 月 17 日 19:48:45 baksagimms-Mac-Pro CoreSimulatorBridge[32274]: 请求安装 file:///Users/blackstone/IdeaProjects/artistapp_dia/album_app/platforms/ios/build/emulator/album_app.app/ 有选项: CFBundleIdentifier = "com.ionicframework.albumapp837617"; 包类型 = 开发者; SimulatorRootPath = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"; SimulatorUserPath = "/Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data"; 1 月 17 日 19:48:45 baksagimms-Mac-Pro 已安装 [32260]: 0x700001f6a000 -[MIClientConnection _doInstallationForURL:withOptions:completion:]:安装 “/Users/blackstone/IdeaProjects/artistapp_dia/album_app/platforms/ios/build/emulator/album_app.app” 类型 Developer (LSInstallType = (null)) 请求的 CoreSimulatorBridge (pid 32274) Jan 17 19:48:45 baksagimms-Mac-Pro 已安装 [32260]:0x700001f6a000 MDMCreateDeltaDirectory:调用 MDMDirectoryDiff 与:state->old_bundle: /Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/E8A8A135-71C8-404A-8D36-501C7ECC02AC/album_app.app 状态->new_bundle: /Users/blackstone/IdeaProjects/artistapp_dia/album_app/platforms/ios/build/emulator/album_app.app 状态->dst_bundle: /Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Library/Caches/com.apple.mobile.installd.staging/temp.rfQKOU/extracted/Payload//album_app。应用程序, binaryDiff 标志:假 dst_ipa: /Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Library/Caches/com.apple.mobile.installd.staging/temp.rfQKOU/extracted 1 月 17 日 19:48:45 baksagimms-Mac-Pro 已安装 [32260]: 0x700001de1000 __MDMDirectoryDiff_block_invoke.37:使用以下命令调用 writeDictToFile:/Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Library/Caches/com.apple.mobile.installd.staging/temp.rfQKOU /extracted/ManifestCache.plist 1 月 17 日 19:48:45 baksagimms-Mac-Pro 已安装 [32260]: 0x700001de1000 writeDictToFile: ==== 成功将 Manifest 缓存写入 /Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Library/Caches/com.apple.mobile.installd.staging/temp.rfQKOU/extracted/ManifestCache.plist 1月17日19:48:46 baksagimms-Mac-Pro跳板[32264]: [KeyboardArbiter] HW kbd:无法将(null)设置为键盘焦点 17 19:48:46 baksagimms-Mac-Pro 已安装 [32260]: 0x700001f6a000 -[MIInstaller performInstallationWithError:]:安装 Jan 17 19:48:46 baksagimms-Mac-Pro 已安装 [32260]:0x700001f6a000 -[MIInstallableBundlePatch applyPatchWithError:]: 正在尝试更新补丁 com.ionicframework.albumapp837617 从 0.0.1 (0.0.1) 到 0.0.1 (0.0.1) 1月17日 19:48:46 baksagimms-Mac-Pro com.apple.CoreSimulator.SimDevice.BA74E51F-A0B7-4662-B483-EE053FA53DAB.launchd_sim[32248] (UIKitApplication:com.ionicframework.albumapp837617[0x6f91][32345]): 服务因被杀而退出:17 年 1 月 9 日 19:48:46 baksagimms-Mac-Pro backboardd [32266]:[Common] 无法获取简短的 BSD proc 信息 32345:没有这样的文件或目录 Jan 17 19:48:46 baksagimms-Mac-Pro backboardd [32266]:[Common] 无法获取 32345 的 proc 信息:没有这样的 文件或目录 Jan 17 19:48:46 baksagimms-Mac-Pro assertiond [32269]:notify_suspend_pid() 失败,错误 7 Jan 17 19:48:47 baksagimms-Mac-Pro syslogd [32250]:禁用模块 com.apple.appinstallation 写入 /var/mobile/Library/Logs/CrashReporter/DiagnosticLogs/AppInstallation/AppInstallation.log 以下 6 次失败 (Operation Failed) 1 月 17 日 19:48:47 baksagimms-Mac-Pro 已安装 [32260]: 0x700001f6a000 -[MIInstallableBundle _refreshUUIDForContainer:withError:]: com.ionicframework.albumapp837617 的数据容器现在位于 /Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Data/Application/1EE6DD04-3B43-4E5B-9A00-01841C9DD3A1 1 月 17 日 19:48:47 baksagimms-Mac-Pro 已安装 [32260]: 0x700001f6a000 -[MIContainer makeContainerLiveReplacingContainer:reason:withError:]:为 com.ionicframework.albumapp837617 制作容器 /Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3 1 月 17 日 19:48:47 baksagimms-Mac-Pro 已安装 [32260]: 0x700001f6a000 -[MIInstaller performInstallationWithError:]:安装成功;分期:1.50s;等待:0.00s;预检/补丁:0.44s,验证: 0.01s;总体:2.05s Jan 17 19:48:47 baksagimms-Mac-Pro appstored[32330]:[默认] LaunchServices 观察者:已安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro SpringBoard[32264]:[默认] LaunchServices 观察者:已安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro 例行程序 [32254]:[默认] LaunchServices 观察者: 安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro nsurlsessiond [32302]:[默认] LaunchServices 观察者:已安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro UserEventAgent [32251]:[默认] LaunchServices 观察者:已安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro passd[32319]:[默认] LaunchServices 观察者: 安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro SpringBoard[32264]:[默认] LaunchServices 观察者:已安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:47 baksagimms-Mac-Pro 配置文件 [32321]:[默认] LaunchServices 观察者: 安装( " com.ionicframework.albumapp837617 file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app >") A703FE87-2740-4C0B-8AA7-9125511A3381 256 1 月 17 日 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:更改粘贴板 1 月 17 日注册的侦听器回调端口 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:请求 启动 com.ionicframework.albumapp837617 选项: 环境 = ; 1 月 17 日 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:捆绑包的开始启动序列 'com.ionicframework.albumapp837617' 重试超时:120.000000 (默认写com.apple.CoreSimulatorBridge LaunchRetryTimeout ) bootTimeout: 300.000000 (默认写入 com.apple.CoreSimulatorBridge BootRetryTimeout ) bootLeeway: 120.000000 (默认写入 com.apple.CoreSimulatorBridge BootLeeway ) 注意:使用 'xcrun simctl spawn booted defaults write ' 在启动的模拟器中修改默认值 设备。模拟器开机时间:2017-01-17 10:27:11 +0000 当前时间: 2017-01-17 10:48:51 +0000 在引导余地内:否 Jan 17 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:启动尝试#0 bundle 'com.ionicframework.albumapp837617',一直在尝试启动 0 秒。现代发射服务 = 是 Jan 17 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:得到 LSBundleProxy 'com.ionicframework.albumapp837617',sequenceNumber 256,cacheGUID A703FE87-2740-4C0B-8AA7-9125511A3381 1 月 17 日 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:[通用] [FBSSystemService][0xed8e] 发送请求开启 “com.ionicframework.albumapp837617” 1 月 17 日 19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:[通用][FBSSystemService][0xed8e] 请求成功:1月17日19:48:51 baksagimms-Mac-Pro CoreSimulatorBridge[32274]:启动成功 'com.ionicframework.albumapp837617' Jan 17 19:48:52 baksagimms-Mac-Pro album_app[32697]: objc[32697]: PLBuildVersion 类在 两个都 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x1061fe998) 和 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x105f7d880)。将使用两者之一。哪一个是未定义的。 1 月 17 日 19:48:52 baksagimms-Mac-Pro logd [32259]:元数据共享缓存 uuid 为空(使用 logd 的共享缓存信息)album_app (32697) 1 月 17 日 19:48:52 baksagimms-Mac-Pro logd [32259]:未能为 无路 uuid '00000000-0000-0000-0000-000000000000' Jan 17 19:48:52 baksagimms-Mac-Pro album_app [32697]:断言失败:16C67 14C89: libxpc.dylib + 62677 [0339A402-6531-30E9-8BC2-589C463CD6D6]:0x7d 1 月 17 19:48:52 baksagimms-Mac-Pro album_app[32697]: Apache Cordova 原生 平台版本 4.3.1 正在启动。 1月17日 19:48:52 baksagimms-Mac-Pro 专辑应用程序 [32697]:多任务处理 -> 设备:是,应用程序:是 1 月 17 日 19:48:52 baksagimms-Mac-Pro album_app[32697]:使用 UIWebView 1 月 17 日 19:48:52 baksagimms-Mac-Pro album_app [32697]: [CDVTimer][handleopenurl] 0.047028ms Jan 17 19:48:52 baksagimms-Mac-Pro album_app[32697]:无限制访问网络 资源 Jan 17 19:48:52 baksagimms-Mac-Pro album_app[32697]: [CDVTimer][intentandnavigationfilter] 1.711011ms Jan 17 19:48:52 baksagimms-Mac-Pro album_app[32697]: [CDVTimer][gesturehandler] 0.056982ms Jan 17 19:48:52 baksagimms-Mac-Pro album_app[32697]: [CDVTimer][file] 2.811015ms Jan 17 19:48:52 baksagimms-Mac-Pro 专辑应用程序[32697]:[CDVTimer][启动画面] 16.559005ms Jan 17 19:48:52 baksagimms-Mac-Pro album_app[32697]: [CDVTimer][statusbar] 4.653037ms 1 月 17 日 19:48:52 baksagimms-Mac-Pro album_app[32697]: [CDVTimer][keyboard] 0.611007ms Jan 17 19:48:52 baksagimms-Mac-Pro 专辑应用程序 [32697]:[CDVTimer][TotalPluginStartup] 28.108001 毫秒 1 月 17 日 19:48:52 baksagimms-Mac-Pro album_app [32697]:由于以下原因重置插件 页面加载。 1 月 17 日 19:48:52 baksagimms-Mac-Pro album_app[32697]: 完成负载: file:///Users/blackstone/Library/Developer/CoreSimulator/Devices/BA74E51F-A0B7-4662-B483-EE053FA53DAB/data/Containers/Bundle/Application/6D2D037E-10B7-43E0-B95B-709FCB9493F3/album_app.app/www /index.html 1 月 17 日 19:48:52 baksagimms-Mac-Pro album_app[32697]:设备就绪 55 毫秒后触发

如果没有安装额外的cordova插件,应用程序将在iOS10上正常工作。 任何对此有任何信息或解决方案的人请提供帮助。 谢谢。

【问题讨论】:

【参考方案1】:

如果没有安装额外的cordova插件,应用程序将在iOS10上正常运行

这表明插件是问题的原因,而不是 CSP。您可以通过在 iOS 9 模拟器/设备中运行应用程序来检查这一点,因为 iOS 9 不关心 CSP。

从您的日志输出中,deviceready 事件正在触发,因此 Cordova 环境正在启动。我会将 Safari 远程调试器连接到 Webview。如果您使用远程调试器的“刷新按钮”重新加载 Web 视图,可能会出现控制台错误消息。如果没有,我会添加一些断点,从deviceready 触发后的第一个操作开始,看看它失败的地方。

【讨论】:

感谢您的建议。继承人到目前为止我发现:cordova.file 在我的应用程序中返回未定义。而它在android中返回完整的系统文件目录对象。并且在使用 cordova.file.dataDirectory 时,它会使我的应用程序卡在白屏上。但奇怪的是,它在 xcode 控制台中的 console.log(cordova.file) 时返回正确的数据。知道为什么会这样吗? 哦...他们刚刚添加了cordova-file iOS10构建失败。就在昨天。

以上是关于ionic 2 和 iOS10 的 CSP 之争的主要内容,如果未能解决你的问题,请参考以下文章

CCF-CSP 202112-2 序列查询新解子区间

Cordova/Ionic 2 相机权限问题 iOS 10.2.1

CSP201903-1 小中大

Ionic 2+,iOS 唯一问题:由于页面加载而重置插件

Ionic 2:在 iOS 上滚动时运行函数

上周热点回顾(2.4-2.10)