错误排查

如果下发脚本没有生效,可以根据以下文档排查问题。

JS 脚本问题

发现问题

如果 JS 脚本执行出错,XCode 控制台会打出错误日志,但仅靠错误日志可能难以发现,建议在 +startWithAppKey: 之前加入以下代码:

[JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) {
    if (type == JPCallbackTypeJSException) {
        NSAssert(NO, data[@"msg"]);
    }
}];

这样在 debug 阶段 JS 脚本执行错误时会中 assert,马上可以看到错误信息。

确定 JS 脚本书写正确

可以用JS语法检查工具检查最终的 JS 脚本有没有语法问题。请按照 github wiki 里的规则写 JSPatch 脚本。

写完 JS 脚本后先在本地用 +testScriptInBundle 接口执行脚本看有没有问题,(详情参照使用范例),若没达到预期效果,可以一步步调试,第一步请在 main.js 开头打 console.log('run success'),确定 XCode 控制台有输出这条 log,确定脚本有被执行到,再进行其他调试。一般调试使用 console.log() 就足够,若有更多需求可以用 Safari断点调试

附几个常犯的错误:

  1. 不能用 NSLog('xx'),应该用 console.log('xx')
  2. get property 记得加括号,例如 self.navigationItem(),而不是 self.navigationItem
  3. 私有成员变量要用 self.valueForKey()self.setValue_forKey() 接口存取。
  4. block 里不能直接使用 self

更多问题请参见 wiki 的 基础用法常见问题

配置问题

  1. 先确保 SDK 接入时 appKey 填写正确(SDK接入文档),以及发布补丁时 版本号 没有错误。

  2. 分清 开发预览 模式和 正式下发 的区别,详见 开发预览

  3. 根据 log 排查问题:

接入 SDK 1.6.6 以上版本,可以在控制台看到输出的log,例如:

2016-04-27 19:04:42.212 ... JSPatch: 尝试加载补丁
2016-04-27 19:04:42.399 ... JSPatch: 补丁已加载, 文件大小: 28

打出这两句 log 表示执行了脚本。

--

2016-04-27 19:04:42.399 ... JSPatch: sync请求: http://7xkfnf.com1.z0.glb.clouddn.com/6d2fddf24c5d8af2/1.0?v=1461755082.399732
2016-04-27 19:04:42.621 ... JSPatch: sync请求成功: {
    v = 2;
}

这两句表示请求到了当前版本补丁版本号,这里 url 里的 6d2fddf24c5d8af2appkey,后续跟的 1.0 是 App 版本号,可以检查下这两个值是否正确。若 url 不正确或者脚本没有正确上传,这里会返回 error = "Document not found"

--

2016-04-27 19:09:43.798 ... JSPatch: 尝试更新补丁版本: 2
2016-04-27 19:09:43.798 ... JSPatch: 请求补丁文件: http://7xkfnf.com1.z0.glb.clouddn.com/6d2fddf24c5d8af2/1.0/file2
2016-04-27 19:09:43.900 ... JSPatch: 请求补丁文件成功,大小:3072
2016-04-27 19:09:43.908 ... JSPatch: 更新补丁版本 2 成功

这几句表示检测到的补丁版本号比本地版本更新,去下载补丁文件,下载后会立即执行,到这一步应该就没问题了。若这个版本的补丁之前已经下载过,就不会再下载。

--

若要看到更多信息,可以调用:

[JSPatch showDebugView];

调用后,在 statusBar 会出现 JSPatch 调试按钮:

点击后,会弹起显示 JSPatch 所有相关 log 以及脚本内容,方便调试问题:

有问题照上述点一个个检查,就可以解决了,这里会尽量列出可能会出现的问题,平台也会持续改进易用性。若还有问题,请查看 平台文档 以及 JSPatch 文档

JSPatch.com © 2017 Github开源 | 联系我们 | 合作伙伴