在Swift4中使用JSPatch

前言

JSPatch平台SDK 1.7.5 以上版本可以通过苹果审核,我们这次尝试在Swift中使用JSPatch。JSPatch的动态更新是依赖于Objective-C的runtime,我们知道Swift是静态语言。Swift类成员可以使用Objective-C的运行时动态派发,这要求Swift类是继承自NSObject或者使用dynamic修饰的类的成员。

环境配置

SDK 1.7.5
Swift 4+, Xcode 9.4.1

SDK接入&调试

见官网JSPatch文档

这里我们只讨论Swift相关应用。

Swift相关注意事项

  1. 在官网下载SDK引入后,要先在项目的桥接文件里添加#import <JSPatchPlatform/JSPatch.h>以引用JSPatch。
  2. 无法直接调用JSPatch中的方法,需要调用'JSPatch.h'文件中混淆过后的代码调用JSPatch的相关API。例如:
// 混淆代码
#define JSPatch Eb_tCode
#define startWithAppKey stwa_43
#define setupRSAPublicKey strs_3x
#define setupTestScriptFileName sttsc_3
#define updateConfigWithAppKey udcak
#define testScriptInBundle tests_sinbund
#define JPCallbackType jtspc_b
#define JPErrorCode DRkcos
#define setupCallback sefjtpsytecal
// 例如:Eb_tCode即JSPatch,stwa_43即startWithAppKey
Eb_tCode.stwa_43("app key")
Eb_tCode.strs_3x("公钥")
Eb_tCode.setupDevelopment()

重点

集成JSPatch这些都很简单,最重要的是使用JSPatch语法写JS补丁。OC项目的话可以直接使用官方提供的代码转换器,Swift只能手敲啦。
defineClass中指定类名需要带上项目target的名字,重载自父类的方法不需要dynamic修饰符进行修饰,可以直接进行JSPatch动态替换。反之,必须加dynamic修饰符,这时候XCode会自动添加@objc修饰符。

例如:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        test()
    }
    // 自定义的方法(属性)加dynamic修饰
    @objc dynamic func test() {
        // 此处view背景色为绿色
        self.view.backgroundColor = .green
    }

}

// main.js补丁
require('UIColor')
defineClass('项目名.ViewController', {
        // 覆盖ViewController中的test方法,把view背景色改为红色
        test: function() {
            var redColor = UIColor.redColor();
            self.view().setBackgroundColor(redColor);
        }
})

在下发补丁之前最好对脚本进行本地测试,看看运行是否正常。
本地测试分两个步骤:

  1. 把补丁 main.js 拖入项目。
  2. 注释掉所有 JSPatch 相关方法,调用 +testScriptInBundle 方法:
   // tests_sinbund是混淆后的testScriptInBundle
   Eb_tCode.tests_sinbund()
// Eb_tCode.stwa_43("app key")
// Eb_tCode.strs_3x("公钥")
// Eb_tCode.sync()

相关参考

JSPatch文档
JSPatch语法
JSPatch在Swift中的应用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,032评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,301评论 4 61
  • 自己创作的思维导图提升八大能力的迷你小图标 不足之处:分支过于密集啦
    古灵精怪的果宝阅读 177评论 1 0
  • 图文/幸福 那天上午去河州中学,第二次到陈老师家,是他去世的第二天。 陈祖云的老家在浙江丽水,是一个山清水秀的南方...
    有点个性阅读 357评论 0 0
  • 今天是中秋节,团圆的日子。晴空下,一轮圆圆的月亮,略显清苦。也许蟾宫中嫦娥正在独自品尝又冷又硬的月饼,不似人间这般...
    五月荷阅读 353评论 0 0