1. 程式人生 > >iOS開發之Weex爬坑之路環境部署和Devtools Debug(一)

iOS開發之Weex爬坑之路環境部署和Devtools Debug(一)

前言

不多說,直接開始Weex,算是記錄這段時間對新技術的學習積累。期間看了很多Vue.js和Node.js的基礎,順便捋了以下CSS的flex-box佈局等等前端的知識,太多了太雜了,還是用筆記記錄下。直接從官方介紹,開始

補充一個傳送門:和文章沒什麼關係

介紹

啟動環境,搭建第一個Demo,按照官方的來

同為跨平臺解決方案,咱們先看下和RN的對比,由於國內淘寶搞的輕量級,所以我們還是先爬爬Weex坑

型別React NativeWeex
效能較好較弱
上手難度稍高容易
核心理念ReactVue
框架程度較重較輕
特點適合開發整體App適合單頁面
社群豐富,Facebook維護殘念,託管apache
支援Android、IOSAndroid、IOS、Web
適應性原生開學習成本低Web開發學習成本低
JS引擎V8JSCore
首先Weex是支援Vue.js框架,可以看一遍官方Vue文件,就可以開始擼了Vue.js由於是單頁面應用,因此Vue-router瞭解下 Vue-router
再看下JS和HTML和CSS的基礎,就可以搞一下簡單的了

安裝開發環境

1.安裝Node 

mintoudeMacBook-Pro:~ mintou$ node -v
v8.11.1
mintoudeMacBook-Pro:~ mintou$ npm -v
4.6.1
mintoudeMacBook-Pro:~ mintou$ 

2.安裝weex-toolkit

npm install weex-toolkit -g
mintoudeMacBook-Pro:~ mintou$ weex -v
   v1.3.5
 - weexpack : v1.2.3
 - weex-debugger : v1.0.12
 - weex-builder : v0.4.0
 - weex-previewer : v1.5.1

這條命令會向你命令列環境中註冊一個 weex 命令。

3.建立專案

weex create awesome-app

這裡會有很多提示,什麼標題啊,作者啊,描述啊啥的,主要你如果簡單的跑起來,可以都選擇預設值,如果你要做點事,那就吧vue-router給安裝了,後面的單元測試可以暫時不選。

網路好也就幾分鐘的事,然後就可以開發了

4.進入專案,安裝依賴,預覽

cd awesome-app
npm install
npm start

然後工具會啟動一個本地的 web 服務,監聽 8081 埠。你可以開啟 http://localhost:8081檢視頁面在 Web 下的渲染效果。 原始碼在 src/ 目錄中,你可以像一個普通的 Vue.js 專案一樣來開發.

這裡按照官方的來,基本可以看到第一個網頁的效果

5.執行到iOS專案

weex platform add ios
weex run ios

這兩句幫我們編譯好了jsbundle,然後順便把原生專案的cocoapods都給帶起來了,直接選擇模擬器就跑起來了,如果你是自己編譯好而已,那麼可以自己pod install也行,檔案目錄如下,cd到ios目錄就好


也就一杯茶的時間,專案就能跑起來了,如果看過Vuejs的話入口和檔案目錄改改就知道如何操作了,這裡就不多說這些了,很簡單,下面隆重介紹一下如果debug方式來除錯。為什麼測試這個模組,是因為,網上有幾個專案(本來用的人就少,所以要珍惜幾個專案)都沒配置web端,只是配置了移動端啟動,因此,你啟動web服務是看不到任何東西的,但是你直接跑起來你的App,你壓根看不到你的js和頁面是不是出問題了,哪裡出問題了都不知道?因此,我們試著用一下Debug模式

可以先看下官方介紹weektoolkit基本介紹,後面我會結合我遇到的場景分析

整合Devtools到iOS,通過App的服務來Debug

這裡注意的是不是普通的Vue.js開啟的Web頁面除錯,而是通過Devtools啟動模擬器之後進行和Web關聯的除錯,怎麼說呢?就是如果你沒有配置Web環境,你Weex寫的程式碼無法在Web預覽,就很扯淡,你藉助這個工具,開啟App的同時,連線到對應的Web服務,然後進行js程式碼編寫,儲存之後就能實時同步多端

根據上面的介紹,你的專案基本框架已經跑起來了,你在你的pod檔案下加上,或者直接copy走我這個

source '[email protected]/CocoaPods/Specs.git'
platform :ios, '8.0'
#inhibit_all_warnings!

def common
    pod  'WXDevtool', '0.15.3', :configurations => ['Debug']
	pod 'WeexSDK'
    pod 'WeexPluginLoader'
    pod 'SDWebImage', '3.7.5'
    pod 'SocketRocket', '0.4.2'
end

target 'WeexDemo' do
    common
end

target 'WeexUITestDemo' do
    common
end

安裝好之後,我們用終端到路徑下,執行

weex debug 

你就能看到一個帶二維碼的網頁 


1.方案一(官方Demo可以掃一下即可Debug)

第一個方式是和官方Demo點選開啟連結下載下來一樣,弄一個掃二維碼的頁面,然後你在你的專案中掃描這個二維碼,你的App和網頁上都會出現同步,你可以看到所有的結構和Debug資訊

2.方案二,你不想弄一個頁面,你可以按照我這個思路搞一下也行

第一,你看下官方介紹

[WXDevTool launchDevToolDebugWithUrl:@"ws://30.30.31.7:8088/debugProxy/native"];

其中的 ws 地址正是 Weex debug 控制檯中出現的地址,直接 copy 到 launchDevToolDebugWithUrl 介面中。

我是這麼理解的,反正當時看這個得知道為什麼寫這個?

因此,看了下官方Demo裡面掃一掃的url攔截操作

#pragma mark Remote debug
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
- (BOOL)remoteDebug:(NSURL *)url
{
    if ([url.scheme isEqualToString:@"ws"]) {
        [WXSDKEngine connectDebugServer:url.absoluteString];
        [WXSDKEngine initSDKEnvironment];
        
        return YES;
    }
    
    NSString *query = url.query;
    for (NSString *param in [query componentsSeparatedByString:@"&"]) {
        NSArray *elts = [param componentsSeparatedByString:@"="];
        if([elts count] < 2) continue;
        if ([[elts firstObject] isEqualToString:@"_wx_debug"]) {
            [WXDebugTool setDebug:YES];
            [WXSDKEngine connectDebugServer:[[elts lastObject]  stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
            if ([[[self.navigationController viewControllers] objectAtIndex:0] isKindOfClass:NSClassFromString(@"WXDemoViewController")]) {
                WXDemoViewController * vc = (WXDemoViewController*)[[self.navigationController viewControllers] objectAtIndex:0];
                [vc performSelector:NSSelectorFromString(@"loadRefreshCtl")];
                [self.navigationController popToViewController:vc animated:NO];
            }
            return YES;
        } else if ([[elts firstObject] isEqualToString:@"_wx_devtool"]) {
            NSString *devToolURL = [[elts lastObject]  stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            [WXDevTool launchDevToolDebugWithUrl:devToolURL];
            if ([[[self.navigationController viewControllers] objectAtIndex:0] isKindOfClass:NSClassFromString(@"WXDemoViewController")]) {
                WXDemoViewController * vc = (WXDemoViewController*)[[self.navigationController viewControllers] objectAtIndex:0];
                [self.navigationController popToViewController:vc animated:NO];
            }
            
            return YES;
        }
    }
    
    return NO;
}

可以通過斷點得到,這裡else if裡面的url最後傳進去的樣式,這就不貼出來了,就是下面那張gif頂部的樣式,經過操作,我們只需要拿到最後的channelld拼接到對應的url上

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    
    [WXDevTool setDebug:YES];
    [WXDevTool launchDevToolDebugWithUrl:@"ws://192.168.1.47:8088/debugProxy/native/d4b322b3-d97e-47f1-935e-b50084fbf4a6"];
    
    [WeexSDKManager setup];
    
    [self.window makeKeyAndVisible];
    
    // Override point for customization after application launch.
    [self startSplashScreen];
    
    return YES;
}

方案二思路總結:

weex debug開啟服務網頁,出現二維碼,我們點選二維碼,可以在url上獲取到channelld,然後在app初始化的方法裡面呼叫連結上服務,注意這裡的最後一串路徑是變化的,每次同步的時候需要看一下是否是服務最新的id。

然後如果你熱更新的話,最好用命令啟動app

weex platform add ios
weex run ios

然後你更改你vue樣式的程式碼,就可以不開啟web服務的情況下進行App debug。


注意:

這上面的左邊檢視是debug視窗的,而不是weex run web跑起來的web服務,我們這裡是針對無法正常配置或者跑web服務的情況下,我們如何通過App的服務來網頁Debug,畢竟有些時候我也不知道為什麼web服務為什麼跑步起來,反正iframe就是顯示不了。

中間的就是我們的App應用,右邊就是程式碼了,我們可以進行實時更新預覽了,環境部署和Debug差不多了,就可以正常寫點東西了

網上針對Weex的文章很少,這也算是自己遇到的問題自己總結記錄下,免得以後找都找不到

相關推薦

iOS開發Weex環境部署Devtools Debug

前言 不多說,直接開始Weex,算是記錄這段時間對新技術的學習積累。期間看了很多Vue.js和Node.js的基礎,順便捋了以下CSS的flex-box佈局等等前端的知識,太多了太雜了,還是用筆記記錄下。直接從官方介紹,開始 補充一個傳送門:和文章沒什麼關係 JS中的async和await

iOS開發Weex環境部署Devtools Debug

前言不多說,直接開始Weex,算是記錄這段時間對新技術的學習積累。期間看了很多Vue.js和Node.js的基礎,順便捋了以下CSS的flex-box佈局等等前端的知識,太多了太雜了,還是用筆記記錄下。直接從官方介紹,開始補充一個傳送門:和文章沒什麼關係介紹啟動環境,搭建第一

Redis高可用主從複製實踐 Redis介紹及部署在CentOS7上

一、介紹 1、Redis的高可用有如下幾個部分組成: 第一部分:redis主從複製 第二部分:Sentinel哨兵模式 第三部分:叢集部署 本篇將介紹第一部分-redis 主從複製。那麼問題來了,為什麼需要主從複製呢?   2、為什麼需要主從複製呢? 從以下三點說明: A、re

專案實戰vue:vue框架中如何註冊全域性公共過濾器filter、全域性公共外掛、全域性公共元件component

專案需求: 在我們的實際專案的開發中,經常會遇到一些可以重複利用的方法和元件,比如:我們在一個專案中可能會經常用到格式化時間的方法。這個時候就需要我們把這個方法封裝起來,註冊成一個全域性的過濾器,在整個專案中都可以使用,這樣既可以提高程式碼的使用效率,也便於我們

iOS開發遇到的那些 NSURLRequest開發URL編碼

前言:專案中遇到一個根據傳遞的引數下載指定的PDF文件的介面,但是折騰啊!!!無論我用AFN下載還是直接用NSURLRequest都老是下載不了,後來和伺服器工程師聯調找到原因是編碼問題,如下,封裝一個編碼類在拼接引數的時候對其編碼,折騰半天終於下載成功ing!!!記錄下來

如何開發優秀的HTML5遊戲?-迪斯尼《尋找奧茲》遊戲技術詳解

        前言        迪斯尼《Find Your Way to OZ》這個貼近地氣的遊戲我在最新一期《程式設計師》雜誌的《從HTML5移動應用現狀談發展趨勢》這篇文章裡有所提及,它借用了近期上映的《魔境仙蹤》電影的設定(設定來自於經典故事《綠野仙蹤》,看過這個電

IOS開發非同步載入網路圖片並快取本地實現瀑布流

</pre><pre name="code" class="objc"></pre><pre name="code" class="objc">在前面的一篇部落格中,我寫了一個瀑布流照片牆的程式,由於之前的程式載入的圖片是本

資料-民宿市場資料解讀

筆者有個朋友,北上廣打拼多年,每天加班加點,披星戴月…終於不堪折磨,萌生退意,想要歸隱山林,開個農家院收租為生… 在無情的嘲笑了他後,筆者也很好奇,到底民宿市場如何?做民宿到底賺不賺錢?什麼樣的民宿比較賺錢?使用者都是哪些人? 帶著這些問題筆者開始了民宿市場的探

Lyndon的量化修煉——雙均線優化策略

後語強行搭上的前言 一個工科學生,跟金融八竿子打不著的人,畢了業就一個猛子扎進這個圈子,結果一竅不通。來都來了,既然什麼都不懂,那總得學點啥東西,思來想去,只好發揚一下理工科學生的光榮傳統,搞搞量化。說來慚愧,在學校裡學習也是東拉西扯,自身素質不過硬,所以希望通

機器學習——《統計學習方法》

    最近開始閱讀李航老師的經典著作《統計學習方法》,現將其中自認為較為重要的點寫出來,一個是作為回憶複習,二一個是希望能夠分享給更多人。第一次寫部落格,如有錯誤,希望多包涵。   第一章統計學習方法概論    個人認為第一章主要介紹的是機器學習中一些最為基本的概念和重要的

微服務springClouddocker-Eureka

決策 config snap service 每次 entry eas pen end 前言 本文記錄怎麽搭建服務註冊中心eureka,然後打包成docker鏡像,用docker swarm部署eureka集群 1、環境spring boot 1.5.1.RELEASE,是

Java物件學習建立物件——使用靜態工廠方法代替構造器優點

      最近學習Android知識,發現Java好多的基礎知識運用的真的很一般,所以決定在重新梳理一下,現在Kotlin也來了,在Android之路上,留給我看Java的時間不多了。       靜態我們就來簡單介紹一下,使用靜態工

Spring整合Struts2Hibernate+MavenMaven專案建立

趁著畢設的功夫,寫一些東西。也算是記錄個人平時畢設完成的過程。 建立專案 工具:intellij idea+JDK1.6+Maven 第一步:New Project ->點選左側maven ->勾選Create fromarchetype 後選擇maven-archet

Java程式設計師從笨鳥到菜鳥一百零三java操作officepdf檔案java讀取word,excelpd

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MySQL MHA + ProxySQL + keepalived 實現讀寫分離,高可用

don replica ifconfig soft 似的 恢復 select 8.0 ext 準備服務器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileg

GUI練習——列出指定目錄下的內容對話方塊Dialog

package myclass; import java.awt.; import java.awt.event.; import java.io.*; class MyWindowDemo { private Frame f; private TextFiel

機器學習numpymatplotlib學習

整個教程有參考網上其他一些大牛的看法,總體的教學應該是從numpy和matplotlib開始教學,然後最後進入SK-learn學習,整個課程的程式碼之後會推送到github上面去。對於教程,採用程式碼註

【機器學習實戰系列】讀書筆記AdaBoost演算法公式推導例子講解

最近在看整合演算法AdaBoost,推薦先看李航的統計學習方法第8章,然後再看機器學習實戰第7章,李航的書上的公式推導講的很詳細了,但是很多地方對於初學者來說,還是需要時間去理解和消化的。本文將從以下幾個方面來介紹AdaBoost演算法。一、AdaBoost演算法公式推導二、

Linux基礎命令文件目錄操作

node var 慎用 con mkdir 環境 not 小數 mat pwd     print working directory的縮寫,作用是顯示當前工作目錄的絕對路徑,一般進行頻繁切換路徑時使用。     -L  顯示邏輯路徑(或略軟鏈接文件)

OAuth2.0系列基本概念運作流程

@[TOC](OAuth2.0系列之基本概念和運作流程) ## 一、OAuth2.0是什麼? ### 1.1 OAuth2.0簡介 [OAuth 2.0](https://oauth.net/2)是目前最流行的授權機制,用來授權第三方應用 > OAuth是一種開放協議, 允許使用者讓第三方應用以安全且標準