如何排查问题

为什么脚本没有生效?

首先请确保按使用范例的步骤做了。若出现问题,可以参考以下调试思路:

(一) 确定 JS 脚本书写正确

首先确保没有 JS 语法错误,可以用JS语法检查工具检查最终的 JS 脚本有没有语法问题。

请按照 github wiki 里的规则写 JSPatch 脚本,几个常犯的错误:

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

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

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

(二) 检查脚本上传下载

先确保 appKey版本号 没有错误。

接入 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 文档

出现 decompress error

若使用 XCode8 接入,需要在项目 Capabilities 打开 Keychain Sharing 开关,否则在模拟器下载脚本后会出现 decompress error, md5 didn't match 错误(真机无论是否打开都没问题):

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