亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

集成熱修復

2019-11-09 14:16:14
字體:
來源:轉載
供稿:網友

轉自http://www.jianshu.com/p/950dbb33a370

前言

在iOS中有很多種熱修復方案,在這里我就不一一介紹了

這里有一篇介紹熱修復的文章:iOS中的HotFix方案總結詳解

我選擇的熱修復方案是jspatch我覺得JSPatch的優點有:

非侵入式上手快相關服務成熟

上代碼

大神可以看重點,如果是和我一樣的菜雞就可以按照博客一步一步做,最后一定會成功讓JSPatch跑起來的

第一步:創建Demo,在ViewController里添加一個Label,聲明一個test方法來給Label.text賦值

OC:

Swift:

為了方便label就直接在StoryBoard里拖進來了(不喜歡拖控件的小伙伴可以用代碼創建)

Swift中為每個變量和方法添加dynamic是保證Swift方法都可以被動態替換,這里涉及到Swift Runtime的知識就不詳細講述了按例貼一篇文章:

Swift Runtime分析:還像OC Runtime一樣嗎?


第二步:打開JSPatch網站下載SDK:http://jspatch.com/Index/sdk


第三步:項目配置(這步稍微會有些復雜)

將解壓后的SDK直接拖入工程中,然后在TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加 libz.dylib(或libz.tbd) 和 javaScriptCore.framework。

在AppDelegate里寫以下代碼:

OC

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [JSPatch startWithAppKey:@"你的AppKey"]; //用來檢測回調的狀態,是更新或者是執行腳本之類的,相關信息,會打印在你的控制臺 [JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) { }]; [JSPatch setupDevelopment]; [JSPatch sync]; return YES;}

Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. JSPatch.startWithAppKey("你的Appkey") JSPatch.setupCallback { (type, data, error) in PRint(type) print(data) } JSPatch.setupDevelopment() JSPatch.sync() return true }

到這一步項目配置就完成了,下一步開始發補丁到項目中


第四步:打開JSPatch官網點擊左上角注冊 -> http://www.jspatch.com/

注冊或登錄注冊

第五步:創建你的App,名字可以隨便寫,AppID也可以不填


第六步:點擊添加APP版本,創建一個App版本

介紹一下創建之后的APP:

appKey是之后在你項目中激活JSPatch要用到的添加App版本 是按照你App的Version來創建的(如果version沒寫對會下載不到補丁)

第七步:創建一個main.js文件并在里面寫上以下代碼:

OC

defineClass('ViewController', { test : function() { self.label().setText("label的text被改掉了"); },})

Swift

defineClass('HotFixDemo.ViewController', { test : function() { self.label().setText("label的text被改掉了"); },})

Swift覆蓋方法和類的時候要加上項目名,所以規范應該是 項目名.類名(方法名) 注冊類的時候也要加上項目名

第八步:點擊剛剛創建的1.0,將保存好的JS上傳到JSPatch服務器上,

選擇文件選擇剛剛創建的main.js (上傳補丁的時候最少要有一個main.js 如果需要上傳多個文件點擊右側加號就可以了)

一定先勾選開發預覽,這樣才能保證測試成功

一切都操作完之后選擇提交

運行你的項目,如果命令行中顯示以下內容就代表你的你的項目已經更新補丁了

因為補丁是先下載再生效的,所以下一次運行你才能看到效果

可以看到我的代碼給label賦值為aaaa,通過JSPatch將label.text替換掉了

如果遇到什么問題可以留言給我,我會及時回復并更新博客內寫的不足的地方

一些其他的資料:

JSPatch文檔

iOS黑科技之不發版線上干掉bug(JSPatch)

Objective-C代碼轉換成Javascript

可能遇到的坑

JSPatch網站上的版本要一定要和工程里的一樣label的名字別寫錯了..我順手就給寫成別的名字了Swift一定要在方法和屬性前加dynamic,如果不是繼承自NSObject的Swift類不能被動態替換Swift替換類和方法要比OC在類/方法名之前添加工程名如果項目跑起來控制臺輸出沒有找到文檔就是網站上配置錯了

基本使用姿勢

發現bug->在項目里修復bug->將修改后的有問題的類和方法翻譯成js并上傳網站->發布補丁

8月27日補充

JS一定要加密,下面是方法截圖和文檔:

文檔:http://jspatch.com/Docs/rsa

加密方法:

補充:自己按照文檔和這篇博客集成后測試崩潰,后來經過調試發現JS代碼寫的不正確(自己不會JS),發現在JSPatch上有轉換和檢測JS代碼的工具,很方便。推薦使用PSPatch!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久天天躁夜夜躁狠狠躁2022| 国产suv精品一区二区三区88区| 精品成人乱色一区二区| 日韩精品在线第一页| 亚洲片国产一区一级在线观看| 国产精品麻豆va在线播放| 亚洲一区二区三区毛片| 26uuu国产精品视频| 欧美黄色www| 久久久精品一区| 欧美一区二区三区精品电影| 亚洲精品国精品久久99热一| 日韩av手机在线看| 欧洲成人午夜免费大片| 日韩精品中文字幕有码专区| 亚洲国产成人av在线| 国产精品亚洲片夜色在线| 色综合影院在线| 欧美激情中文字幕在线| 欧美理论电影网| 欧美成人性生活| 精品日韩美女的视频高清| 日韩中文字幕国产| 国产精品无码专区在线观看| 中文精品99久久国产香蕉| 欧美一级免费视频| 精品福利视频导航| 久久久天堂国产精品女人| 91色p视频在线| 中文字幕免费精品一区高清| 亚洲欧美激情另类校园| 欧美激情视频一区二区| 国产一区二中文字幕在线看| 91精品久久久久久久久| 国产欧美日韩91| 久久99视频精品| 欧美激情欧美激情在线五月| 中文字幕精品国产| 国产美女搞久久| 亚洲国产精品资源| 中文精品99久久国产香蕉| 日韩高清电影好看的电视剧电影| 成人欧美一区二区三区黑人| 免费91麻豆精品国产自产在线观看| 成人免费黄色网| 在线观看欧美日韩国产| 久久综合88中文色鬼| 成人欧美一区二区三区黑人| 国产日韩视频在线观看| 亚洲欧美国产精品久久久久久久| 久久久国产精品视频| 亚洲电影免费观看| 日韩成人av网址| 成人亚洲欧美一区二区三区| 亚洲网站在线播放| 亚洲三级黄色在线观看| 91中文在线视频| 亚洲偷欧美偷国内偷| 日韩中文娱乐网| 久久久成人精品视频| 久久亚洲一区二区三区四区五区高| 国产一区二区三区网站| 亚洲精品suv精品一区二区| 国产欧美日韩亚洲精品| 亚洲精品自拍第一页| 国产精品丝袜视频| 成人疯狂猛交xxx| 国产福利精品在线| 少妇高潮久久久久久潘金莲| 亚洲国产私拍精品国模在线观看| 亚洲视屏在线播放| 91在线免费观看网站| 欧美日韩国产va另类| 国产成人精品一区二区| 日韩大陆欧美高清视频区| 日韩中文第一页| 热99久久精品| 97在线视频免费播放| 日本精品一区二区三区在线| 在线观看日韩专区| 尤物九九久久国产精品的分类| 亚洲免费电影在线观看| 欧美激情中文字幕在线| 日韩av在线免费看| 亚洲成在人线av| 久久国产精品网站| 欧美日韩亚洲国产一区| 日韩免费观看高清| 91久久久在线| 亚洲成**性毛茸茸| 亚洲精品一区二区久| 国产美女扒开尿口久久久| 国内偷自视频区视频综合| 中文字幕久久久av一区| 91久久精品国产91久久性色| 伊人久久久久久久久久久久久| 久久久久久久久中文字幕| 日韩av黄色在线观看| 欧美性生交大片免费| 97在线精品国自产拍中文| 国产成人精品日本亚洲专区61| 日韩欧美亚洲范冰冰与中字| 日韩av一区在线观看| 色悠久久久久综合先锋影音下载| 国产成人一区二区三区| 欧美丰满少妇xxxxx| 色午夜这里只有精品| 亚洲人成在线观| 久久精视频免费在线久久完整在线看| 欧美色图在线视频| 色狠狠av一区二区三区香蕉蜜桃| 97在线精品视频| 国产精品国内视频| 久久男人av资源网站| 日本精品视频在线播放| 狠狠综合久久av一区二区小说| 最近的2019中文字幕免费一页| 国产日韩欧美一二三区| 最近2019年日本中文免费字幕| 欧美中文在线视频| 欧美日韩激情小视频| 日韩成人在线视频网站| 色综合视频一区中文字幕| 国产精品一区二区久久久久| 91久久精品国产91性色| 亚洲天堂2020| 国产精品网站视频| 国产精品香蕉国产| 国产成人亚洲综合青青| 欧美日韩综合视频| 欧美不卡视频一区发布| 国产日韩欧美中文在线播放| 国产精品久久久久99| 国产欧美一区二区三区久久| 日产精品99久久久久久| 亚洲国产成人在线视频| 91夜夜未满十八勿入爽爽影院| 91国自产精品中文字幕亚洲| 国产欧美日韩精品专区| 国产精品免费久久久| 欧美自拍视频在线| 亚州精品天堂中文字幕| 国产美女精品视频免费观看| 美女少妇精品视频| 性欧美xxxx交| 欧美性感美女h网站在线观看免费| 亚洲女人被黑人巨大进入| 久久久久久久久久久国产| 91精品国产一区| 欧美高清性猛交| 日韩免费在线视频| 国产精品视频在线播放| 亚洲成人性视频| 夜夜嗨av色综合久久久综合网| 国产成人一区二区| 成人女保姆的销魂服务| 精品久久久久久亚洲国产300| 欧美怡红院视频一区二区三区| 亚洲国产毛片完整版| 91国偷自产一区二区三区的观看方式| 午夜精品久久久久久久白皮肤| 亚洲色图欧美制服丝袜另类第一页| 久久综合免费视频影院| 欧美视频裸体精品|