我们首先说说JSPatch是什么,它是iOS热修复平台,我们项目中如果导入JSPatch,即使你的项目已经上线,不需要重新上架,通过JSPatch你一样可以随意修改你的项目。对于厌倦了苹果漫长的审核期的iOS程序员,这听起来很赞吧!
JSPatch能够使用JavaScript调用Objective-C的原生接口,从而动态植入代码来替换旧代码,以实现修复线上bug。
###引入JSPatch 接下来我们重点介绍下JSPatch的引入,当然根据app点击量的不同JSPatch的价格是不同的,当然对于日点击量少于10000的appJSPatch是完全免费的。
#####第一步 获得 AppKey,注册之后就可以
#####第二步 集成SDK
- 通过 cocoapods 集成 在 podfile 中添加命令:
pod 'JSPatchPlatform'
再执行pod install 即可。
- 手动集成 若没有使用 cocoapods,也可以手动集成。下载 SDK 后解压,将 JSPatchPlatform.framework 拖入项目中,勾选 "Copy items if needed",并确保 "Add to target" 勾选了相应的 target。
添加依赖框架:TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加libz.dylib 和 JavaScriptCore.framework。
#####第三步 运行
在 AppDelegate.m 里载入文件,并调用 +startWithAppKey: 方法,参数为第一步获得的 AppKey。接着调用 +sync 方法检查更新。例子:
#import <JSPatchPlatform/JSPatch.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[JSPatch startWithAppKey:@"你的AppKey"];
[JSPatch sync];
...
}
@end
#####常见问题
若使用 XCode8 接入,需要在项目 Capabilities 打开 Keychain Sharing 开关,否则在模拟器下载脚本后会出现 decompress error, md5 didn't match 错误(真机无论是否打开都没问题):
###JSPatch实例 接下来会给大家展示下小菜鸟做的一点简单的功能。 这是一开始的界面:
- (void)viewDidLoad {
[super viewDidLoad];
[self setNav];//配置导航栏
[self layoutSubview];//配置页面视图,三个按钮
self.view.backgroundColor=[UIColor whiteColor];//设置背景色为白色
_handle=[[WBHandle alloc]init];//一个全局的变量
}
ok,现在我们可以新建一个main.js的文件内容如下:
defineClass("ViewController",{
viewDidLoad:function () {
self.super().viewDidLoad();
self.setNav();//配置导航栏
self.layoutSubview();//配置页面视图,三个按钮
require('UIColor');
self.view().setBackgroundColor(UIColor.grayColor());//设置背景色为灰色
var handle=require('WBHandle').alloc().init();
}
})
上面的语法都是对照原始OC代码翻译成JSPatch代码,只是做了背景色的变化,对比下可以发现两者语法变动并不是很大,JSPatch只是采用了JS的语法,详细的语法可以看这里JSPatch语法
界面效果如下:
小菜鸟这样写完发现还是有问题,我只是改变了个背景色,却要重复写这么多句子。然后认认真真看完上面的详细教程找到了一个省力的方法后发现,原来可以这么写:
defineClass("ViewController",{
viewDidLoad:function () {
self.ORIGviewDidLoad();//调用原方法
require('UIColor');
self.view().setBackgroundColor(UIColor.grayColor());//设置背景色为灰色
}
})
在方法前加ORIG是调用之前的OC代码,这样就省事多了。
###JSPatch注意事项 那接下来我们看看小菜鸟上传JSPatch过程中遇到的一些问题吧。
-
1、JSPatch上新建的版本号需要和xcode项目上的版本号保持一致,不然无法正确匹配。
-
2、上传的补丁文件名必须是main.js
这两个坑是小菜鸟开始看文档不仔细忽略的,费了些时间,在这给小伙伴们提醒下。
当然JSPatch还有一些其他的功能如灰度与条件下发、在线参数、实时监控等,具体使用方法小伙伴们可以看这里。
今天就先分享这么多,后续会再来更新,小伙伴们使用过程中有什么问题可以留言,大家一起讨论进步。O(∩_∩)O哈哈~