JSPatch你想知道的都在这里

420 阅读3分钟

我们首先说说JSPatch是什么,它是iOS热修复平台,我们项目中如果导入JSPatch,即使你的项目已经上线,不需要重新上架,通过JSPatch你一样可以随意修改你的项目。对于厌倦了苹果漫长的审核期的iOS程序员,这听起来很赞吧!

JSPatch能够使用JavaScript调用Objective-C的原生接口,从而动态植入代码来替换旧代码,以实现修复线上bug。

###引入JSPatch 接下来我们重点介绍下JSPatch的引入,当然根据app点击量的不同JSPatch的价格是不同的,当然对于日点击量少于10000的appJSPatch是完全免费的。

JSPatch价格.png

#####第一步 获得 AppKey,注册之后就可以

#####第二步 集成SDK

  • 通过 cocoapods 集成 在 podfile 中添加命令:
pod 'JSPatchPlatform'

再执行pod install 即可。

  • 手动集成 若没有使用 cocoapods,也可以手动集成。下载 SDK 后解压,将 JSPatchPlatform.framework 拖入项目中,勾选 "Copy items if needed",并确保 "Add to target" 勾选了相应的 target。

SDK1.png

SDK2.png

添加依赖框架:TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加libz.dylibJavaScriptCore.framework

SDK3.png

#####第三步 运行

在 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 错误(真机无论是否打开都没问题):

keychain.png

###JSPatch实例 接下来会给大家展示下小菜鸟做的一点简单的功能。 这是一开始的界面:

原始界面.png
原始界面的OC代码:

- (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语法

界面效果如下:

修改后的界面.png

小菜鸟这样写完发现还是有问题,我只是改变了个背景色,却要重复写这么多句子。然后认认真真看完上面的详细教程找到了一个省力的方法后发现,原来可以这么写:

defineClass("ViewController",{
     viewDidLoad:function () {
            
         self.ORIGviewDidLoad();//调用原方法
       
         require('UIColor');
         self.view().setBackgroundColor(UIColor.grayColor());//设置背景色为灰色
    
     }
})

在方法前加ORIG是调用之前的OC代码,这样就省事多了。

###JSPatch注意事项 那接下来我们看看小菜鸟上传JSPatch过程中遇到的一些问题吧。

  • 1、JSPatch上新建的版本号需要和xcode项目上的版本号保持一致,不然无法正确匹配。

    版本号.png

  • 2、上传的补丁文件名必须是main.js

这两个坑是小菜鸟开始看文档不仔细忽略的,费了些时间,在这给小伙伴们提醒下。

当然JSPatch还有一些其他的功能如灰度与条件下发、在线参数、实时监控等,具体使用方法小伙伴们可以看这里

今天就先分享这么多,后续会再来更新,小伙伴们使用过程中有什么问题可以留言,大家一起讨论进步。O(∩_∩)O哈哈~