Weex:アップグレードメモ

6644 ワード

現状
  • ツールのバージョンは0.6.4であり、端末にはweex --versionが入力される.出力info 0.6.4
  • iOS SDKバージョンは0.8.0で、現在ネット上のバージョンは0.10.2です.バージョン番号情報は、ファイルWXDefine.hに表示されます.incubator-weex
  • 業務ファイルは.weで終わり、Pythonでいくつかの小道具を書き、コンパイルとアップロードプロセスをある程度自動化した
  • を実現した.
  • native階層には、web、リッチテキストなどのカスタムモジュールが多数拡張されています.
  • js階には多くのツールが書かれています.例えば、$ptiOS上の点
  • を表しています.
    ネットワークとリソース
    この部分の今回の変更はやはり比較的に大きくて、0.8.0バージョンのローカルのピクチャーをロードできない問題このバージョンは変更しましたが、変更の方式は意外です
  • コンポーネントには、ローカルピクチャの構成がロードされていないsrc属性が1つしかありません.
  • WXNetworkProtocolは廃棄され、WXResourceRequestHandlerで置き換えられた.__attribute__ ((deprecated("Use WXResourceRequestHandler instead")))
  • WXNetworkDefaultImplが削除する
  • .
  • 増加WebSocket
  • WXResourcexxxファイルを追加し、ネットワークロードとローカルリソースロード
  • を統一的に実現する.
    typedef enum : NSUInteger {
        WXResourceTypeMainBundle,
        WXResourceTypeServiceBundle,
        WXResourceTypeImage,
        WXResourceTypeFont,
        WXResourceTypeVideo,
        WXResourceTypeLink,
        WXResourceTypeOthers
    } WXResourceType;
    
    iOS SDK置換
  • 公式サイトを通じてGitHubに行って最新のソースコードapache/incubator-weex
  • をダウンロードします
  • SDK古いバージョン、すなわちパスの下のファイルincubator-weex-master/ios/sdk/WeexSDK/
  • を直接置き換える.
    アクセスファイルの変更
  • アクセスファイルは2つの場所を変更する必要があります.1つ目は0.8.0バージョンのスペルミスで、環境の単語が1文字足りないn
  • です.
    //init sdk enviroment
     [WXSDKEngine initSDKEnvironment];  // 0.8.0  initSDKEnviroment,      n,      
    

    2つ目はネットワークのデフォルト実装です.もちろん、ネットワーク部分が自分で実現すれば、彼が提供しなくても、この部分は変更する必要はありません.
    //  
    [WXSDKEngine registerHandler:[WXResourceRequestHandlerDefaultImpl new] withProtocol:@protocol(WXResourceRequestHandler)];
    // 0.8.0  [WXSDKEngine registerHandler:[WXNetworkDefaultImpl new] withProtocol:@protocol(WXNetworkProtocol)];
    

    旧バージョンでの変更の移行
    一部の私たちは不合理な点だと思って、古いバージョンで修正して、新しいバージョンが変わっていないことを発見しました.だから修正して移転します.
  • 削除デフォルトでタオバオリンクを開くのは適切ではありません.ファイル位置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];
        });
        
        //                ,         ,    ,        
        // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"taobao://"]];
    }
    
  • scrollToComponentメソッドで、オフセット量が負の場合は移動しません.ファイル位置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;   //         ,    。SDK        ,0.8.0    0.10.0   ,        bug,    
            } else if ( contentOffetY > scrollContentOffsetY) {
                contentOffset.y = scrollContentOffsetY;
            } else {
                contentOffset.y = contentOffetY;
            }
        }
        
        [scrollView setContentOffset:contentOffset animated:animated];
    }
    
  • Weexタイマはweexページが表示されない場合にトリガーされません.ファイル位置incubator-weex-master/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
  • - (void)trigger
    {
        if (_weexInstance.state == WeexInstanceDisappear ||
            _weexInstance.state == WeexInstanceBackground ||
            _weexInstance.state == WeexInstanceDestroy) {
            return;   // Weex     ,      
        }
        [[WXSDKManager bridgeMgr] callBack:_weexInstance.instanceId funcId:_callbackID params:nil keepAlive:_shouldRepeat];
    }
    

    その他の変更
  • カスタムモジュールModuleおよびコンポーネントcomponentは、変更する必要はなく、SDKを交換した後もほとんど使用できます.(我々は一般的にカスタムファイル名を取り、関連するweexファイルの実装をコピーし、カスタム修正を行う)
  • WeexのモジュールModuleまたはコンポーネントcomponentが修正され、たまたまこのファイルをコピーしてカスタムコンポーネントの開発を行い、対応するカスタムモジュールModuleまたはコンポーネントcomponentファイルが新しいSDKのコンテンツを移行します.例えばWXModalUIModule.mWXTextInputComponent.mの2つのファイルは、新しいバージョンは古いバージョンに基づいて修正されていますが、私たちもこの2つのファイルの内容をコピーして、接頭辞を修正して、XXXModalUIModule.mXXXTextInputComponent.mのような新しい内容をカスタマイズしました.この場合、新しいSDKの修正をカスタムファイルに移行し、SDK自体のファイルが動かないので、機能が正常であることをテストすればいいです.

  • 環境ツールの更新
  • 古いツールを削除し、端末コマンドは以下の通り:
  • npm uninstall -g weex
    npm uninstall -g weex-toolkit
    
  • 新しいツールをインストールし、端末コマンドは以下の通りです:
  • npm install -g weex-toolkit
    npm install -g weex-builder 
    npm install -g weexpack      // (  )
    
  • その他の変更は、具体的なシステム構成を参照してください.例えば、Pythonでいくつかの自動コンパイルアップロードの小道具を書いたので、相応の調整が必要です.
  • .weから.vueに変更
  • .weは変更せず、新しいSDKの下でも使用できます.私たちは今回動いていません.まず、新しいSDKの機能が正常であることをテストで検証させます.
  • 公式サイトには、.we.vue songsiqi/weex-vue-migrationに自動的に変更するツールが提供されています.私たちは古いファイルを変更するつもりはありません.新しいファイルは直接.vueに変更することができます.そのため、このツールはしばらく使用されません.
  • 公式サイトには2つの参考文章があり、その通りにすると、.we.vueに変更するのは難しいことではないはずです.我々の方法は、古い.weファイルが長時間存在し、.vueソースファイルに徐々に移行できるように、徐々に修正することです.既存のWeexプロジェクトをVueバージョンWeexとVue 2に変更する方法xの構文の違い