天天看點

frameWork熱更新

工作中遇到想要繞過AppStore直接更新App的要求!

這裡友情提示下,看了很多資料隻是是實作了功能,但在項目中并沒有真正用到!

資料大多都顯示會被拒,這個說的是個人級的,好像企業級的不會這樣,僅僅是項目需要做的嘗試!

下面進入主題,建立framework工程!

frameWork熱更新

這裡把想要改變的東西封裝到FrameWork以便實作熱更新,提一下關于BundiD 一定要一緻,在打包的時候一定在Edit scheme —— >Run 選擇Release如圖:

frameWork熱更新

因為你要跑在真機上,是以這個要選擇Release

另外将包含你想要放出的方法類添加的Head中

frameWork熱更新

OK 點選Run的到動态庫然後 showinFinder

![

frameWork熱更新

這就得到動态庫了,然後 我們開始主程式!

主程式這裡沒什麼好說的 主要是講frameWok倒入就行另外在加載資源的時候要用絕對路徑,因為所有的東西在Document 主程式要實作

frameWork熱更新

作為主程式和Frmework的橋接

這裡需要提醒大家的ATS配置以及證書BundiD的一緻,另外這個隻向下相容支援到8.0!

這裡我用了兩種方法一是部署在自己公司的伺服器一種是利用iTunes 做了簡單的測試,iTunes 測試一頂要在plist檔案中添加Application supports iTunes file sharing 并設定為Yes 這樣你才能通過iTunes 共享!

frameWork熱更新

運作一下 主程式跑到真機上!

連接配接手機通過iTunes 将Framework 放入Document 下

frameWork熱更新

這裡 你就 可以根據iTunes 實時共享 !

做到改變Framework間接改變手機App的Framework 做到熱更新的目的

這裡在提下 我放倒伺服器上通過請求如何做的!

首先 我擷取權限使得背景同意讓我放在自己公司上的伺服器下,這裡如何放置就不說了很簡單,又不是自己搭伺服器!想自己搭伺服器的可以自己百度!

給大家看下我Demo 的截圖

frameWork熱更新

第一個按鈕其實是從伺服器上請求的,如果有小夥伴想了解,但是沒有部署的自己伺服器上的話,直接用iTunes 用第二個按鈕就行了!

這裡值得一提的是 由于公訴網慢,我發郵件打了個zip包,本想是解壓後再放上去,結果搞錯了放了個zip 上去,于是請求回來的是一個zip包,于是我覺得這樣很好我又做了一次解壓操作,這樣使得下載下傳的資源會有所減小!

用到了一個别人寫的三方解壓GSPZipArchive!

這裡主要是底層封裝的C語言程式 據網上有人反映 已經在mac和windows兩端測試通過,都可以正常壓縮帶有中文的檔案,并能正常解壓。

隻不過 在mac 預設是UTF- 8 在window 上變成了GBK

解決辦法打開源碼 直接改為 UTF-8   

如 :zipOpenNewFileInZip ( _zipFile ,( const char *) [newname UTF8String ],// UTF-8方式編碼

這樣就可以了!

另外再 說下 AFN3.0 以及2.0   網上已經有很多資料了 這裡我想說的是請求頭以及請求體!

請求頭的設定: NSString* sessionid = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionID];

    if (sessionid && [sessionid length])

        return @{ @"COOKIE": [NSString stringWithFormat:@"sessionid=%@", sessionid]};

擷取到到一個字典key是COOKIE value是sessionid=%@

[sessionManager.requestSerializer setValue:obj forHTTPHeaderField:key];

請求體設定:AFN 中的constructingBodyWithBlock:formData 後拼接你的參數

打擊運作下看看效果吧!被拒應該是肯定的但是這種方法确實是可以做到繞過AppStore!

需要伺服器更新的同學将URL 改成自己的伺服器在Net裡:

Demo下載下傳:動态庫FrameWork

繼續閱讀