IOS 熱更新,實(shí)時(shí)代碼更新缠局,動(dòng)態(tài)更新则奥,動(dòng)態(tài)庫(kù)framework

IOS 熱更新,實(shí)時(shí)代碼更新狭园,動(dòng)態(tài)更新读处,動(dòng)態(tài)庫(kù)framework

只要審核通過(guò)后,無(wú)須再次審核唱矛,就可以動(dòng)態(tài)更新罚舱,iOS有三種處理方案:

一、開(kāi)源框架 reactive native绎谦,但是編程語(yǔ)言是js

二管闷、lua 腳本

三、使用OC語(yǔ)言??的動(dòng)態(tài)庫(kù)framework窃肠。

前兩者包个,我不打算細(xì)講,我主要介紹怎么用oc進(jìn)行熱更新

1冤留、創(chuàng)建framework工程


創(chuàng)建framework工程

2碧囊、代碼處理:


處理代碼


寫一個(gè)controller的控制工具類:

//??HotUpdateControl.m

//??HotUpdateMudel

//

//??Created?by?wukong?on?15/12/18.

//??Copyright???2015年?lhc.?All?rights?reserved.

//

#import?"HotUpdateControl.h"

#import?"AController.h"

#import?"BViewController.h"

#import?"CViewController.h"

#import?"DViewController.h"

#import?"EViewController.h"

@implementationHotUpdateControl

-(NSArray*)getVcs?{

return@[

[[AControlleralloc]init],

[[BViewControlleralloc]init],

[[CViewControlleralloc]init],

[[DViewControlleralloc]init],

[[EViewControlleralloc]init]];

}

@end

好了,開(kāi)始打包framework,為了以免打包出來(lái)的framework,在真機(jī)上面運(yùn)行不了纤怒,我們使用一個(gè)腳本來(lái)進(jìn)行打包糯而,目的是多型號(hào)CPU核心的合成,就是打出一個(gè)通用的包泊窘。

# Sets the target folders and the final framework product.

#?如果工程名稱和Framework的Target名稱不一樣的話熄驼,要自定義FMKNAME

#?例如:?FMK_NAME?=?"MyFramework"

FMK_NAME=${PROJECT_NAME}

#?Install?dir?will?be?the?final?output?to?the?framework.

#?The?following?line?create?it?in?the?root?folder?of?the?current?project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

#?Working?dir?will?be?deleted?after?the?framework?creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

#?-configuration?${CONFIGURATION}

#?Clean?and?Building?both?architectures.

xcodebuild?-configuration"Release"-target"${FMK_NAME}"-sdk?iphoneos?clean?build

xcodebuild?-configuration"Release"-target"${FMK_NAME}"-sdk?iphonesimulator?clean?build

#?Cleaning?the?oldest.

if[?-d"${INSTALL_DIR}"]

then

rm?-rf"${INSTALL_DIR}"

fi

mkdir?-p"${INSTALL_DIR}"

cp?-R"${DEVICE_DIR}/""${INSTALL_DIR}/"

#?Uses?the?Lipo?Tool?to?merge?both?binary?files?(i386?+?armv6/armv7)?into?one?Universal?final?product.

lipo?-create"${DEVICE_DIR}/${FMK_NAME}""${SIMULATOR_DIR}/${FMK_NAME}"-output"${INSTALL_DIR}/${FMK_NAME}"

rm?-r"${WRK_DIR}"

open"${INSTALL_DIR}"






3、建立一個(gè)主項(xiàng)目烘豹,就是使用這些動(dòng)態(tài)庫(kù)的工程

現(xiàn)在進(jìn)行讀取離線包的測(cè)試瓜贾,只要這個(gè)項(xiàng)目,能夠從沙箱里面讀取到代碼文件携悯,就意味著可以在線更新代碼阐虚,遠(yuǎn)程升級(jí)!0雎薄实束!




動(dòng)態(tài)庫(kù)已經(jīng)加載到了沙箱~~~

我修改了UITabBarController加載版塊的初始化方法,如果沙箱有framework動(dòng)態(tài)庫(kù)逊彭,就加載framework動(dòng)態(tài)庫(kù)上面的版塊咸灿,令到項(xiàng)目可以模塊化

//? TabController.m

//??HotUpdate

//

//??Created?by?wukong?on?15/12/18.

//??Copyright???2015年?lhc.?All?rights?reserved.

//

#import?"TabController.h"

//#import?

@interfaceTabController?()

@end

@implementationTabController

-(instancetype)initWithCoder:(NSCoder*)aDecoder{

if(self=?[superinitWithCoder:aDecoder])?{

NSString*documentDirectory?=?[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,YES)lastObject];

NSArray*?arrFramework?=?[selfgetFilenamelistOfType:@"framework"fromDirPath:documentDirectory];

NSLog(@"%@",arrFramework);

if(arrFramework.count==0)?{

NSArray*?arrTitle?=?@[@"首頁(yè)",@"廣場(chǎng)",@"朋友圈",@"我的",@"設(shè)置"];

NSMutableArray*?arrVcs?=?@[].mutableCopy;

for(inti=0;?i

UIViewController*?vcRoot?=?[[UIViewControlleralloc]init];

vcRoot.title=?arrTitle[i];

vcRoot.view.backgroundColor=?[UIColorwhiteColor];

UINavigationController*?navi?=?[[UINavigationControlleralloc]initWithRootViewController:vcRoot];

[arrVcsaddObject:navi];

}

[selfsetViewControllers:arrVcsanimated:YES];

}else{

NSString*bundlePath?=?[NSStringstringWithFormat:@"%@/%@",documentDirectory,[arrFrameworklastObject]];

if(![[NSFileManagerdefaultManager]fileExistsAtPath:bundlePath])?{

NSLog(@"file?not?exist?,now??return");

returnself;

}

NSBundle*bundle?=?[NSBundlebundleWithPath:bundlePath];

if(!bundle?||?![bundleload])?{

NSLog(@"bundle?load?error");

}

Class?loadClass?=?[bundleclassNamed:@"HotUpdateControl"];

if(!loadClass)?{

NSLog(@"get?bundle?class?fail");

returnself;

}

NSObject*bundleObj?=?[loadClassnew];

NSArray*?arrVc?=?[bundleObjperformSelector:@selector(getVcs)];

NSMutableArray*?arrVcs?=?@[].mutableCopy;

for(inti=0;?i

UIViewController*?vcRoot?=arrVc[i];

vcRoot.view.backgroundColor=?[UIColorwhiteColor];

UINavigationController*?navi?=?[[UINavigationControlleralloc]initWithRootViewController:vcRoot];

[arrVcsaddObject:navi];

}

[selfsetViewControllers:arrVcsanimated:YES];

}

}

returnself;

}

-(NSArray*)getFilenamelistOfType:(NSString*)typefromDirPath:(NSString*)dirPath

{

NSArray*fileList?=?[[[NSFileManagerdefaultManager]contentsOfDirectoryAtPath:dirPatherror:nil]

pathsMatchingExtensions:[NSArrayarrayWithObject:type]];

returnfileList;

}

-?(void)viewDidLoad?{

[superviewDidLoad];

}

@end


看結(jié)果了,如果是本地的默認(rèn)版本侮叮,應(yīng)該是

@[@"首頁(yè)",@"廣場(chǎng)",@"朋友圈",@"我的",@"設(shè)置"];的模塊

但是如果是沙箱里面的模塊

那么就應(yīng)該ABCDE




good luck避矢!

原文鏈接http://blog.csdn.net/jianrenbubai/article/details/50351507?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市囊榜,隨后出現(xiàn)的幾起案子审胸,更是在濱河造成了極大的恐慌,老刑警劉巖卸勺,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂沛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡曙求,警方通過(guò)查閱死者的電腦和手機(jī)碍庵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悟狱,“玉大人静浴,你說(shuō)我怎么就攤上這事〖方ィ” “怎么了苹享?”我有些...
    開(kāi)封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浴麻。 經(jīng)常有香客問(wèn)我得问,道長(zhǎng),這世上最難降的妖魔是什么白胀? 我笑而不...
    開(kāi)封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任椭赋,我火速辦了婚禮,結(jié)果婚禮上或杠,老公的妹妹穿的比我還像新娘哪怔。我一直安慰自己,他們只是感情好向抢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布认境。 她就那樣靜靜地躺著,像睡著了一般挟鸠。 火紅的嫁衣襯著肌膚如雪叉信。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天艘希,我揣著相機(jī)與錄音硼身,去河邊找鬼硅急。 笑死,一個(gè)胖子當(dāng)著我的面吹牛佳遂,可吹牛的內(nèi)容都是我干的营袜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丑罪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荚板!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起吩屹,我...
    開(kāi)封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤跪另,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后煤搜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體免绿,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年宅楞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了针姿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厌衙,死狀恐怖距淫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婶希,我是刑警寧澤榕暇,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站喻杈,受9級(jí)特大地震影響彤枢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筒饰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一缴啡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓷们,春花似錦业栅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至攒钳,卻和暖如春帮孔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背不撑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工文兢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晤斩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓姆坚,卻偏偏與公主長(zhǎng)得像尸昧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旷偿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別 首先來(lái)看什么是庫(kù)萍程,庫(kù)(Library)說(shuō)白了就是一段編譯好的二進(jìn)制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 11,880評(píng)論 3 42
  • 轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/04a7e28f11b9作者:紀(jì)小衰 frame...
    紀(jì)小衰閱讀 6,511評(píng)論 3 16
  • 前言 之前有很多的大神們已經(jīng)寫過(guò)framework的制作兔仰,但最近由于Xcode7的出現(xiàn)茫负,很多之前的教程內(nèi)容已經(jīng)不符...
    陳向陽(yáng)哈閱讀 15,447評(píng)論 44 62
  • http://blog.csdn.net/jianrenbubai/article/details/5035150...
    IceWall_Rin閱讀 302評(píng)論 0 0
  • 在網(wǎng)上搜索了很多關(guān)于靜態(tài)庫(kù)的知識(shí),最后都是不了了之乎赴,遂怒發(fā)沖冠忍法,暴走了一次,將Framework打包的一些詳細(xì)細(xì)節(jié)...
    earthX閱讀 8,644評(píng)論 18 44