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
一个例子如下图所示: main.js 代码第15行,导出 SpartacusFeaturesModule 的同时,定义了四个依赖: fXoL:angular/core oPwp: Spartacus
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也最好加密处理
main.js is basically all browser angular javascript code wrapped into rendering layer (and server)...what you get by using curl is basically the result of running main.js generally, if you get anything...can’t connecto to it 解决方案 cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 node dist/storefrontapp-server/main.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
对于 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
对于 3 和 4,我们需要具体地分析 crash 案例,通过 JSPatch 来进行修复。...补丁 这里是为了解决上述第4点 - 代码 bug 导致的闪退,使用 JSPatch [github]可以进行热修复。...在 didFinishLaunching 时,会卡住界面发请求检查是否有可用的 JSPatch 脚本,如果有则加载执行,解决代码 bug 导致的闪退。...收集 crash 样本,查明原因,定制 JSPatch 修复补丁并下发 退出微信读书登录状态 进入原 didFinishLaunch 连续闪退检测 + 保护流程如图所示: 3.实现 检测和连续 crash...setup crash report }]; } 在 onBootingProtection 方法中添加修复逻辑,比如删除文件: (void)onBootingProtection { // 检查 JSPatch
因为其实在没有开始进行开发之前就应该将所有的请求封装起来,这样的话可以最大程度上处理请求过程中的一些事情,但是我开始的时候没有想那么多,导致的一个问题就是我现在没办法将所有的请求头更改过来,毕竟项目写了很长一段时间了,那么最后我在资料中发现其实是可以在main.js
以后会不会封杀呢,就像之前的JSPatch等。 RN、Weex、小程序 首先,让我们先来认识下RN和Weex。...关于动态性方面本身具有一定的审核风险,这里明确表示是不合规的,参考审核规则 2.5.2 苹果动态性审核条款,只不过 RN 和 Weex 的风险不如当年的 JSPatch 那么大,所以Apple方面也是睁一只眼闭一只眼...而当年的JSPatch 等热修复解决方案则是通过底层操作使得开发者可以用 JS 语言调用任意原生代码,这直接导致了用户 App 在苹果审核之后,依然可能做大范围的改动,这会使得苹果的审核机制形同虚设。...想象一下,你一个明面上说是新闻类的 App,审核通过后摇身一变变成了博彩 App,你说合不合规,既影响 App Store 整体的体验,更会给苹果带来系统性的合规问题,这是一大封杀 JSPatch 的原因...而JSPatch这类东西,就和Android原生的热修复框架Tinker之类的类似,是影响编译效率的,尤其对启动速度影响比较大。
其中 express__WEBPACK_IMPORTED_MODULE_3__ 来自 module uX2x:
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 并不依赖垃圾回收)。
领取专属 10元无门槛券
手把手带您无忧上云