JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用就可以使用 JavaScript 调用任何 Objective-C 原生接口,获得脚本语言的优势:为项目动态添加模块,...微信 iOS 客户端使用了 JSPatch,本篇文章详细阐述 JSPatch 的实现原理和一些细节,以帮助使用者更好地了解和使用 JSPatch。文章较长,建议在 PC / Mac 观看。...4.新增方法 i.方案 在 JSPatch 刚开源时,是不支持为一个类新增方法的,因为觉得能替换原生方法就够了,新的方法纯粹添加在 JS 对象上,只在 JS 端跑就行了。...总结 JSPatch 的原理以及一些实现细节就阐述到这里,因为公众号字数限制的关系,还有一章细节方面的解析没在这里放上,有兴趣的请点击[阅读原文]到 github 上看完整版本。...希望这篇文章对大家了解和使用 JSPatch 有帮助,欢迎在 github 一起参与开发完善 JSPatch: https://github.com/bang590/JSPatch
JSPatch,如果大家不了解JSPatch可以网上搜一下,有很多专业的解释,我这里只做一些简单的介绍。...根本原理:利用OC的动态语言特性去动态修改类的方法实现 实现巧妙之处:利用了OC的消息转发机制 要使用JSPatch是需要一个JSPatch平台的,那么什么是JSPatch平台?...这时我们需要在Xcode中创建一个main.js文件,创建一个空文件即可, ? 命名为main.js....initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("bug修复了","是不是很神奇", null,"取消","确定", null); av.show(); } }) 然后将main.js...上传main.js脚本文件: ? 点击选取文件选择我们导出的main.js文件即可。然后运行Xcode,再点击屏幕就不会再发生崩溃的问题了。
而JSPatch的出现,有效的解决了这一尴尬的局面。 热修复 一种即时修复bug的技术,也叫hotfix。 什么是JSPatch?...第六步:我们用在桌面上新建一个main.js文件,打开命令后,cd到桌面,输入touch main.js后回车,在桌面就会生成一个main.js文件,用文本编辑器打开。...第七步:测试补丁的有效性 在下发补丁之前,我们可以验证补丁是否凑效,具体做法是: 将我们刚刚编辑的main.js导入项目根目录,选择copy。...在JSPatch初始化的方法中,打开沙盒测试方法[JSPatch testScriptInBundle];,并注释掉其他JSPathch方法。...运行程序,该测试方法会自动在沙盒下寻找main.js文件并执行,以验证bug是否被修复。 第八步:下发补丁 在上一步补丁有效性验证成功之后,去JSPatch平台下发补丁。
(此内容已在 GMTC 线下分享过,本次重新整理为线上分享) 内容大体框架: 起步:介绍 JSPatch 的诞生和当时碰到的难题 发展:介绍 JSPatch 如何补全周边功能变得更好用 下一步:介绍 JSPatch...我在去年5月发布了 JSPatch (https://github.com/bang590/JSPatch) 这个开源库,现在广泛应用于 iOS 的热修复,今天分享一下 JSPatch 过去一年以来的成长...分享共分为三个部分: 起步 —— 介绍JSPatch的诞生和当时碰到的难题 发展 —— 介绍JSPatch如何补全周边功能变得越来越好用 下一步 —— 介绍JSPatch下一步的计划 一、起步 先说下起步阶段...对此我搭建了 JSPatch 平台 (http://JSPatch.com), 让使用 JSPatch 的人不需要搭建后台,直接通过平台下发补丁代码。 ?.../JSPatch/wiki/JS-%E6%96%AD%E7%82%B9%E8%B0%83%E8%AF%95 最后,欢迎大家关注 JSPatch 公众号:JSPatchDev,会即时推送 JSPatch
made in 小蠢驴的crash.jpg ---- Bugly集成导入步骤 pod 'BuglyHotfix' (手动导入比较麻烦) import 'JPEngine.h' (该文件在JSPatch...文件夹中) 在appdelegate.m文件的 didFinishLaunchingWithOptions 方法中,对bugly进行初始化 JSPatch 文件夹要手动获取,要么去bugly官方说明文档下载...2.把如图所示的JSPatch文件拖入项目 didFinishLaunchingWithOptions 中的初始化bugly方法 { //初始化 Bugly 异常上报 BuglyConfig...07792e0d22" #if DEBUG developmentDevice:YES #endif config:config]; //捕获 JSPatch...if (patchDirectory) { //指定执行的 js 脚本文件名 NSString *patchFileName = @"main.js
iOS中动态更新补丁策略JSPatch运用基础二 一、引言 上篇博客中介绍了iOS开发中JSPatch引擎进行动态热修复的一些基础功能,其中包括向Objective-C类中添加类方法与成员方法...本篇博客将基于上一篇继续介绍Objective-C中的一些特殊数据类型在JavaScript文件中的使用方法,博客中大部分内容扩展自JSPatch开源git的wiki:https://github.com.../bang590/JSPatch。...iOS中动态更新补丁策略JSPatch运用基础一:http://my.oschina.net/u/2340880/blog/646688。...二、JavaScript与Objective-C交互的几种常用类型 1.结构体 在Objective-C代码中,我们经常会使用到结构体,JSPatch中原生支持的结构体有如下几种:CGPoint
iOS中动态更新补丁策略JSPatch运用基础 JSPatch是GitHub上一个开源的框架,其可以通过Objective-C的run-time机制动态的使用JavaScript调用与替换项目中的...Git源码地址:https://github.com/bang590/JSPatch。...通过上面的示例,我们发现使用JSPatch可以做一些十分有趣的事。...有了JSPatch,我们可以想象,如果可以定位到线上应用有问题的方法,使用JS文件来修改掉这个方法,这将是多么cool的一件事,事实上,JSPatch的主要用途也是可以实现线上应用极小问题的hotfix...3.在JavaScript中操作与修改Objective-C类 JSPatch的最大应用是在应用运行时动态的操作和修改类。
简介 项目主页: https://github.com/bang590/JSPatch 示例下载: https://github.com/ios122/ios122 JSPatch 可以让你用 JavaScript...优势 在项目中引入JSPatch,就可以在发现bug时下发JS脚本替换原生方法,可以做到无需更新整个APP即时修复bug!...JSPatch用iOS内置的 JavaScriptCore.framework作为引擎;JSPatch也符合苹果的规则。...手动导入 下载https://github.com/bang590/JSPatch并解压 复制JSPatch文件夹到你的工程 使用 objective-C: 导入头文件#import "JPEngine.h...可以通过新增扩展为自己项目里的 struct 类型以及C函数添加支持,详情请见wiki页面:添加新扩展 安全性 JSPatch非常强大,因而最好将通过服务器获取JS的链接进行加密,本地JS也最好加密处理
方案四: 基于JSPatch实现在线补丁式更新 方法: 在自己的项目中引入JSPatch库,然后参见下文继续讨论的方案细节实施即可.JSPatch的入门使用 优点: 支持操作所有工程中引入的CocoaTouch....另外,不得不说一句,JSPatch + ReactNatvie 将来或许会成为一个很强力的组合,前者侧重于Bug的修复,后者侧重于复杂新需求的添加.本文接下来的篇幅将注重讨论基于JSPatch的线上Bug...关于使用JSPatch几个技术点的分析与实现....的在线更新补丁实践http://jspatch.com/Docs/security: JSPatch脚本的执行权限很高,若在传输过程中被中间人篡改,会带来很大的安全问题,为了防止这种情况出现,我们在传输过程中对...关于 APPstore 审核 我们的App,嵌入了JSPatch来进行Bug修复,已经通过审核,并且刚好修复了一个很紧急的Bug.这里不做过多的口水式的讨论.
iOS 应用开发常用的热更新方案有:JSPatch,React Native(RN),Weex,以及国外的 Rollout。...截至目前,开发者们发现苹果主要禁止的是 JSPatch 和 Rollout 两家,以及集成了 JSPatch 的第三方 SDK,如个推,高德等,因其可以通过 JS 脚本来调用和替换任意 OC 方法。...Rollout 的 CEO 的官网声明 JSPatch 作者 bang 也在今天发表博客回应,建议开发者短时间内先不要使用 JSPatch,后续再看情况,并希望可以跟苹果审核团队协商解决此事,毕竟热更新的需求很大...博客链接:http://blog.cnbang.net/internet/3374/ Bugly 针对 Apple 审核规则调整的使用公告 我们近期上线的 Bugly iOS 热更新 SDK 内也集成了 JSPatch
因为其实在没有开始进行开发之前就应该将所有的请求封装起来,这样的话可以最大程度上处理请求过程中的一些事情,但是我开始的时候没有想那么多,导致的一个问题就是我现在没办法将所有的请求头更改过来,毕竟项目写了很长一段时间了,那么最后我在资料中发现其实是可以在main.js
对于 3 和 4,我们需要具体地分析 crash 案例,通过 JSPatch 来进行修复。...补丁 这里是为了解决上述第4点 - 代码 bug 导致的闪退,使用 JSPatch [github]可以进行热修复。...在 didFinishLaunching 时,会卡住界面发请求检查是否有可用的 JSPatch 脚本,如果有则加载执行,解决代码 bug 导致的闪退。...收集 crash 样本,查明原因,定制 JSPatch 修复补丁并下发 退出微信读书登录状态 进入原 didFinishLaunch 连续闪退检测 + 保护流程如图所示: 3.实现 检测和连续 crash...setup crash report }]; } 在 onBootingProtection 方法中添加修复逻辑,比如删除文件: (void)onBootingProtection { // 检查 JSPatch
对于 3 和 4,我们需要具体地分析 crash 案例,通过 JSPatch 来进行修复。...补丁 这里是为了解决上述第4点 - 代码 bug 导致的闪退,使用 JSPatch [github]可以进行热修复。...在 didFinishLaunching 时,会卡住界面发请求检查是否有可用的 JSPatch 脚本,如果有则加载执行,解决代码 bug 导致的闪退。...收集 crash 样本,查明原因,定制 JSPatch 修复补丁并下发 退出微信读书登录状态 进入原 didFinishLaunch 连续闪退检测 + 保护流程如图所示: ?...}];} 在 onBootingProtection 方法中添加修复逻辑,比如删除文件: 1 2 3 4 5 6 7- (void)onBootingProtection { // 检查 JSPatch
以后会不会封杀呢,就像之前的JSPatch等。 RN、Weex、小程序 首先,让我们先来认识下RN和Weex。...关于动态性方面本身具有一定的审核风险,这里明确表示是不合规的,参考审核规则 2.5.2 苹果动态性审核条款,只不过 RN 和 Weex 的风险不如当年的 JSPatch 那么大,所以Apple方面也是睁一只眼闭一只眼...而当年的JSPatch 等热修复解决方案则是通过底层操作使得开发者可以用 JS 语言调用任意原生代码,这直接导致了用户 App 在苹果审核之后,依然可能做大范围的改动,这会使得苹果的审核机制形同虚设。...想象一下,你一个明面上说是新闻类的 App,审核通过后摇身一变变成了博彩 App,你说合不合规,既影响 App Store 整体的体验,更会给苹果带来系统性的合规问题,这是一大封杀 JSPatch 的原因...而JSPatch这类东西,就和Android原生的热修复框架Tinker之类的类似,是影响编译效率的,尤其对启动速度影响比较大。
SDK 1.腾讯定位SDK是否没使用过JSpatch? 腾讯iOS定位SDK没有使用JSPatch,也没有集成Bugly,腾讯位置服务 iOS 提供的所有 SDK 都不支持热更新。
更多追求的是跨平台能力,在做这个方案的同时正好也具备了动态化能力,关于动态性方面本身具有一定的审核风险,这里明确表示是不合规的,参考审核规则 2.5.2 苹果动态性审核条款,只不过 RN 和 Weex 的风险不如当年的 JSPatch...那么大; JSPatch 等热修复解决方案通过底层操作使得开发者可以用 js 等语言调用任意原生代码,这直接导致了用户 App 在苹果审核之后,依然可能做大范围的改动,这会使得苹果的审核机制形同虚设,...想象下你一个明面上说是新闻类的 App,审核通过后摇身一变变成了博彩 App,你说合不合规,既影响 App Store 整体的体验,更会给苹果带来系统性的合规问题,这是一大封杀 JSPatch 的原因,
,在 dealloc 方法中,我们再次调用了JSObjectMake 函数生成其他的对象,并再次强持有了 A 对象,并将 JSValue 传入到 JS 中进行其他方法调用(如果不理解这个问题,请参考 JSPatch...对重写 dealloc 方法的处理,但是不同的是 JSPatch 并不依赖垃圾回收)。
# 后来居上的 JSPatch iOS 7 的时候 Apple 推出了 JavaScriptCore,这是一个非常有趣的框架,他是 JS 与原生交互的桥梁,让你在原生和 JS 之间穿梭自如,现在 iOS...JSCore 推出不久之后,一个更优秀的项目诞生了:由 bang 写的 JSPatch。...JSPatch 的接入成本非常低,对项目的影响也非常小,不需要引入额外的脚本解释器(因为已经有 JSCore 了),并且 JS 写起来真的比 Lua 要爽很多。...# 后续发展 从目前来看,Apple 主要针对的是 JSPatch 和 Rollout 一类的热修复框架,这类框架的特点是可以下发后执行任意的 Native Code,而以做 Feature 为主的 React
对于热更新技术,Apple 在 2017 年封杀过一次 JSPatch[1] 这个热更新框架,导致很多的 APP 被拒审,根据 Apple 官方给出的理由,主要有三点: 热更新代码没有做好加密和校验,...有可能被第三方破解劫持 JSPatch 权限过高,可能会调用私有 API,改变原有的 APP 功能 对于 Apple 官方来说,JSPatch 自由度太大,会绕过 App Store 这个 iOS 上的唯一流量分发平台更新应用...其实对于 Apple 官方来说,对与动态化热更新的态度向来是不赞成也不反对,和 JSPatch 比起来,React Native 和游戏热更新这两种应用场景还是被允许的,主要还是体现在三点: 网游这种重运营的场景还是需要热更新维持活动热度的...,每周都有新活动,让用户主动去 App Store 下载更新包很不合理,App 活动运营同理 React Native/Lua 等热更新技术是在一个容器里进行动态化的,不像 JSPatch 有那么大的修改权限...参考资料 [1] JSPatch: https://github.com/bang590/JSPatch [2] 《Apple Developer Program License Agreement》:
目录 1.Weex概述 2.Weex工作原理 3.Weex在iOS上是如何跑起来的 4.关于Weex,ReactNative,JSPatch 一....加载本地的main.js ? SDK里面会带一个main.js,直接打开这个文件会看到一堆经过webpack压缩之后的文件。这个文件的源文件在github.com/apache/incu…目录下。...在各位读者看到这篇文章的时候,纯的ReactNative和纯的Weex的项目已经可以完美通过审核了,JSPatch依旧处于被封杀的状态。...既然本篇文章分析了Weex的工作原理,那么就稍微谈谈RN,Weex和JSpatch的区别。...从热更新的能力来看,RN和Weex的能力仅仅只是中等能力,而JSPatch是几乎无所不能,Runtime都实现的,它都能实现。
领取专属 10元无门槛券
手把手带您无忧上云