调试Cordova应用时Xcode无法连接wkwebview对应进程如何解决
可行解决方案
方案1:使用Safari开发者工具调试(优先选择,完全匹配你的调试需求)
WKWebView的资源加载、内存占用相关调试无需通过Xcode attach WebContent进程,直接用Safari原生开发者工具即可实现:
- 首先开启iOS端Web检查权限:
设置 > Safari > 高级 > 打开Web检查器 - 开启Mac端Safari开发者模式:
Safari > 设置 > 高级 > 勾选「在菜单栏中显示“开发”菜单」 - 启动Cordova应用并加载待调试的WebView页面后,点击Safari顶部菜单栏的「开发」,找到对应的设备/模拟器,二级菜单中选择对应Web页面即可进入调试面板
- 调试面板的「内存」标签可查看实时内存占用、生成堆快照,「网络」标签可查看图片加载的磁盘/网络I/O状态,完全覆盖你排查内存问题的需求
方案2:Xcode attach WebContent进程配置
如果确实需要通过Xcode调试WebContent进程的原生层逻辑,按以下步骤操作:
注意:该方案仅支持模拟器调试,物理设备默认有系统级进程防护,无法直接attach WebContent进程
- 先手动启动Cordova应用,进入加载WebView的页面
- 点击Xcode顶部菜单栏
Debug > Attach to Process by PID or Name,输入进程名com.apple.WebKit.WebContent后点击Attach - 如果依然报权限错误,在项目的entitlements权限文件中添加配置:
<key>com.apple.security.get-task-allow</key> <true/>
- 在build.json的debug.buildFlag数组中新增以下参数:
"CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION=YES", "ENABLE_HARDENED_RUNTIME=NO"
重新编译运行后再尝试attach即可。
方案3:临时关闭WKWebView多进程模式
你可以临时禁用WKWebView的独立进程特性,让Web内容运行在应用主进程中,直接调试主进程即可覆盖相关逻辑:
在WKWebView初始化的配置代码中注入以下参数:
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; // 临时禁用多进程,*仅用于调试,正式包不要添加该配置* [config setValue:@NO forKey:@"_multiprocessingEnabled"];
Cordova项目可以通过修改WKWebView相关插件的初始化代码,或者新增自定义插件注入以上配置实现。
内容的提问来源于stack exchange,提问作者FelixHJ
相关产品推荐
相关产品推荐

