weex:升級備忘錄

現(xiàn)狀

  • 工具的版本是0.6.4请敦,在終端輸入weex --version镐躲;輸出info 0.6.4
  • iOS SDK版本是0.8.0,現(xiàn)在網(wǎng)上的版本是0.10.2侍筛。在文件WXDefine.h中可以看到版本號信息萤皂。
    incubator-weex
  • 業(yè)務(wù)文件還是.we結(jié)尾的,用Python寫了些小工具匣椰,將編譯和上傳過程實現(xiàn)了一定程度的自動化
  • native層擴展了很多自定義的組件敌蚜,自定義的模塊,比如web窝爪、富文本等等
  • js層寫了很多的工具弛车,比如$pt表示iOS上的點

網(wǎng)絡(luò)和資源

這部分這次改動還是比較大的,0.8.0版本的無法加載本地圖片的問題這個版本改了蒲每,不過改的方式出乎意料

  • <image>組件仍然只有一個src屬性纷跛,沒有加載本地圖片的配置。
  • WXNetworkProtocol已經(jīng)廢棄邀杏,用WXResourceRequestHandler替代贫奠。 __attribute__ ((deprecated("Use WXResourceRequestHandler instead")))
  • WXNetworkDefaultImpl被刪除
  • 增加WebSocket
  • 增加WXResourcexxx文件,統(tǒng)一實現(xiàn)網(wǎng)絡(luò)加載和本地資源加載
typedef enum : NSUInteger {
    WXResourceTypeMainBundle,
    WXResourceTypeServiceBundle,
    WXResourceTypeImage,
    WXResourceTypeFont,
    WXResourceTypeVideo,
    WXResourceTypeLink,
    WXResourceTypeOthers
} WXResourceType;

iOS SDK替換

  • 通過官網(wǎng)去GitHub下載最新的源碼
    apache/incubator-weex

  • SDK直接替換舊版本的望蜡,也就是路徑下的文件incubator-weex-master/ios/sdk/WeexSDK/

接入文件修改

  • 接入文件需要修改兩個地方唤崭。第1個是0.8.0版本的拼寫錯誤,環(huán)境的單詞少了一個字母n
//init sdk enviroment
 [WXSDKEngine initSDKEnvironment];  // 0.8.0版本initSDKEnviroment脖律,少了一個字母n谢肾,這次改過來了

第2個地方是網(wǎng)絡(luò)的默認實現(xiàn)。當(dāng)然小泉,如果網(wǎng)絡(luò)部分自己實現(xiàn)芦疏,不用他提供的,這部分就不需要改微姊。

//網(wǎng)絡(luò)
[WXSDKEngine registerHandler:[WXResourceRequestHandlerDefaultImpl new] withProtocol:@protocol(WXResourceRequestHandler)];
// 0.8.0版本[WXSDKEngine registerHandler:[WXNetworkDefaultImpl new] withProtocol:@protocol(WXNetworkProtocol)];

舊版本中的修改遷移

有些我們認為是不合理的地方酸茴,在舊版本中做了修改,發(fā)現(xiàn)新版本還是沒有變化兢交。所以將修改遷移過來薪捍。

  • 刪除默認打開淘寶鏈接,這個不是很合適。
    文件位置incubator-weex-master/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
+ (void)registerDefaults
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [self _registerDefaultComponents];
        [self _registerDefaultModules];
        [self _registerDefaultHandlers];
    });
    
    // 在我們的應(yīng)用中默認打開淘寶鏈接酪穿,我們認為是不妥當(dāng)?shù)牡矢桑苯觿h除,什么也不做最干脆
    // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"taobao://"]];
}
  • scrollToComponent方法昆稿,當(dāng)偏移量是負數(shù)時纺座,不移動。
    文件位置incubator-weex-master/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
{
    UIScrollView *scrollView = (UIScrollView *)self.view;
    CGPoint contentOffset = scrollView.contentOffset;
    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
    
    if (_scrollDirection == WXScrollDirectionHorizontal) {
        CGFloat contentOffetX = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view].x;
        contentOffetX += offset * scaleFactor;
        
        if (contentOffetX > scrollView.contentSize.width - scrollView.frame.size.width) {
            contentOffset.x = scrollView.contentSize.width - scrollView.frame.size.width;
        } else {
            contentOffset.x = contentOffetX;
        }
    } else {
        
        
        CGFloat contentOffetY = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view].y;
        contentOffetY += offset * scaleFactor;
        
        CGFloat scrollContentOffsetY = scrollView.contentSize.height - scrollView.frame.size.height;
        
        if (scrollContentOffsetY <= 0.0f) {
            return;   //偏移量是負數(shù)的時候溉潭,不要移動净响。SDK中沒有這部分判斷,0.8.0到現(xiàn)在的0.10.0都沒有喳瓣,我們認為這是一個bug馋贤,需要修改
        } else if ( contentOffetY > scrollContentOffsetY) {
            contentOffset.y = scrollContentOffsetY;
        } else {
            contentOffset.y = contentOffetY;
        }
    }
    
    [scrollView setContentOffset:contentOffset animated:animated];
}
  • Weex定時器在weex頁面不可見時,不觸發(fā)畏陕。
    文件位置incubator-weex-master/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
- (void)trigger
{
    if (_weexInstance.state == WeexInstanceDisappear ||
        _weexInstance.state == WeexInstanceBackground ||
        _weexInstance.state == WeexInstanceDestroy) {
        return;   // Weex頁面不可見配乓,定時器不觸發(fā)
    }
    [[WXSDKManager bridgeMgr] callBack:_weexInstance.instanceId funcId:_callbackID params:nil keepAlive:_shouldRepeat];
}

其他修改

  • 自定義的模塊Module和組件component都不需要修改,換了SDK之后絕大部分仍然可以用惠毁。(我們一般都是取自定義文件名犹芹,復(fù)制相關(guān)weex文件的實現(xiàn),然后做自定義的修改)

  • Weex的模塊Module或者組件component修改了鞠绰,并且我們碰巧也復(fù)制了這個文件進行自定義組件的開發(fā)腰埂,那么相應(yīng)的自定義的模塊Module或者組件component文件將新的SDK中的內(nèi)容遷移過來。
    比如WXModalUIModule.mWXTextInputComponent.m這兩個文件蜈膨,新版本在老版本的基礎(chǔ)上有修改屿笼,而我們也復(fù)制了這兩個文件內(nèi)容,修改一下前綴翁巍,自定義了新的內(nèi)容驴一,比如XXXModalUIModule.mXXXTextInputComponent.m。這種情況灶壶,我們把新SDK中的修改遷移到我們的自定義文件中肝断,SDK本身的文件不動,測試一下功能正常就好了例朱。

環(huán)境工具更新

  1. 刪除舊工具孝情,終端命令如下:
npm uninstall -g weex
npm uninstall -g weex-toolkit
  1. 安裝新工具,終端命令如下:
npm install -g weex-toolkit
npm install -g weex-builder 
npm install -g weexpack      // (可選)
  1. 其他修改看具體的系統(tǒng)配置洒嗤。比如我們用Python寫了幾個自動編譯上傳的小工具,需要做相應(yīng)的調(diào)整魁亦。

.we改為.vue介紹

  • .we不改渔隶,在新的SDK下也是可以用的。我們這次就沒有動,先讓測試驗證新的SDK功能正常间唉。

  • 官網(wǎng)上提供了一個工具绞灼,可以將.we自動改為.vue
    songsiqi/weex-vue-migration
    我們暫時不準(zhǔn)備改老的文件,新的文件可以考慮直接上.vue呈野,所以這個工具暫時沒有使用低矮。

  • 官網(wǎng)上有兩篇參考文章,照著做被冒,將 .we改為.vue應(yīng)該不是難事军掂。我們的方法是逐步修改,老的.we文件可以長時間存在昨悼,逐步過渡到.vue源文件蝗锥。
    如何將原有 Weex 項目改造成 Vue 版本
    Weex 和 Vue 2.x 的語法差異

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市率触,隨后出現(xiàn)的幾起案子终议,更是在濱河造成了極大的恐慌,老刑警劉巖葱蝗,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穴张,死亡現(xiàn)場離奇詭異,居然都是意外死亡两曼,警方通過查閱死者的電腦和手機皂甘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來合愈,“玉大人叮贩,你說我怎么就攤上這事》鹞觯” “怎么了益老?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寸莫。 經(jīng)常有香客問我捺萌,道長,這世上最難降的妖魔是什么膘茎? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任桃纯,我火速辦了婚禮,結(jié)果婚禮上披坏,老公的妹妹穿的比我還像新娘态坦。我一直安慰自己,他們只是感情好棒拂,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布伞梯。 她就那樣靜靜地躺著玫氢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谜诫。 梳的紋絲不亂的頭發(fā)上漾峡,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音喻旷,去河邊找鬼生逸。 笑死,一個胖子當(dāng)著我的面吹牛且预,可吹牛的內(nèi)容都是我干的槽袄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼辣之,長吁一口氣:“原來是場噩夢啊……” “哼掰伸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怀估,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狮鸭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后多搀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歧蕉,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年康铭,在試婚紗的時候發(fā)現(xiàn)自己被綠了惯退。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡从藤,死狀恐怖催跪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夷野,我是刑警寧澤懊蒸,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站悯搔,受9級特大地震影響骑丸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妒貌,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一通危、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灌曙,春花似錦菊碟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藏古。三九已至增炭,卻和暖如春忍燥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隙姿。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工梅垄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人输玷。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓队丝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欲鹏。 傳聞我的和親對象是個殘疾皇子机久,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

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

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 23,903評論 8 183
  • 引子 這篇文章是筆者近期關(guān)于Weex在iOS端的一些研究和實踐心得赔嚎,和大家一起分享分享膘盖,也算是對學(xué)習(xí)成果的總結(jié)。文...
    一縷殤流化隱半邊冰霜閱讀 12,081評論 53 165
  • 搜索引擎基本知識: 1. ""英文狀態(tài)的引號告訴引擎尤误,引號里的作為整體不拆分進行搜索侠畔。 2. intitle:關(guān)鍵...
    呂姜瑤閱讀 374評論 0 1
  • 前幾天隨便寫了點東西湊數(shù),因為實在無話可說损晤。記件今天的事情來做日記吧软棺。 今天有兩件事,一是幸福之事尤勋。中午老師用學(xué)校...
    宋卡閱讀 154評論 0 0
  • 1.如何繪制UIView? 繪制一個UIView最靈活的方法就是由它自己完成繪制喘落。實際上你不是繪制一個UIView...
    夢醒繁華閱讀 856評論 1 5