這篇文章主要是提供一個通用的使用GIC
進行開發的項目結構
,包括如何引入HotReload
功能。html
我已經將基礎的項目框架提交到git中,你也能夠直接下載查看。git連接node
首先是建立一個全新的iOS單頁面應用。 ios
在項目的根目錄下添加podfile
文件,引入GIC
庫。而後執行pod install
命令。git
platform :ios, '8.0'
use_frameworks!
target 'GICTutorial' do
pod 'GICXMLLayout', '~> 0.5.0'
end
複製代碼
具體的版本號參考git
中最新的版本號。github
添加project
文件夾,而且以文件夾形式
引入。以下圖:web
之因此以
文件夾
的形式引入,是由於但願在打包到ipa中的時候,也能以文件夾的方式來訪問項目中的資源文件。npm
往project
添加一個App.xml
的文件,用來描述一個最簡單的APP。內容爲:bash
<!--等同於建立一個UIWindow-->
<app>
<!--等同於建立一個UINavigationController,而且將背景色設爲 white-->
<nav background-color="white">
<!--等同於建立一個UIViewController,而且將頁面的title設爲"GIC教程"-->
<page title="GIC教程">
</page>
</nav>
</app>
複製代碼
這樣,一個簡單的具備導航功能的應用就建立好了。服務器
在AppDelegate
中初始化GIC
而且加載前面在XML描述的應用。app
#import <GICXMLLayout/GICXMLLayout.h>
#import <GICXMLLayout/GICRouter.h>
複製代碼
首先是引入
GIC
的頭文件,由於這裏咱們須要用到Router
相關的功能,所以須要引入GICRouter
的頭文件。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 註冊gic類庫默認全部元素
[GICXMLLayout regiterAllElements];
[GICRouter regiterAllElements];
// 設置根目錄
[GICXMLLayout setRootUrl:[[NSBundle mainBundle].bundlePath stringByAppendingPathComponent:@"project"]];
// 經過GIC來加載APP
[GICRouter loadAPPFromPath:@"App.xml"];
return YES;
}
複製代碼
通過上面的5個步驟,一個簡單的GIC工程
已經搭建完成,你如今能夠直接在模擬器中運行。
上面是最基本的一個項目目錄。其實你能夠看到,對於
XCode
單頁應用模板建立的文件,這裏一個都沒有刪除。也就意味着,若是在你現有的項目中集成GIC
庫的話,你也無需對你的項目進行大改,侵入性很小。
在沒有熱加載
功能以前,若是你想對項目中的邏輯、UI進行改動的話(哪怕是最小的改動),你必須重複的經歷編譯
、運行
的過程。GIC
是一個天生支持熱加載
的庫,你只須要簡單的幾步就能讓你的應用具有熱加載
的能力,可以大幅提高你的開發效率。
將GIC
項目中tools
文件夾下的dev-tools.sh
文件拷貝到你的項目根目錄下。而且修改其中的配置(主要是修改其中的project目錄)
#!/usr/bin/env bash
# 安裝http-server
sudo npm i -g http-server
#啓動微型服務器。 服務器根目錄設置爲當前目錄的前一級
http-server -p 8088 GICTutorial/project
複製代碼
確保你的電腦上已經安裝了
nodejs
,若是沒有安裝,那麼能夠點擊以下連接去下載安裝,nodejs下載
這個步驟的目的就是在你的電腦上啓動一個簡易的
http-server
,這樣你就能從遠程、本地來訪問project
中的文件。
啓動http-server
。
先
cd
到你的工程根目錄。而後在命令行執行以下命令用來啓動http-server
。
bash dev-tools.sh
複製代碼
這樣你會看到以下的一些輸出。
http-server
輸出了三個地址,第一個用於本機訪問的,第二個用於局域網內部訪問的,第三個直接忽略(一開始我覺得是能夠外網訪問的,可是有時候能夠,有時候就又不行了)。
在AppDelegate
中修改GIC
的根目錄。
[GICXMLLayout setRootUrl:@"http://localhost:8088"];
複製代碼
如今若是你運行模擬器的話,會出錯,由於iOS默認攔截了
http
的訪問,所以須要在工程的plist中容許http訪問。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
複製代碼
如今你能夠再次運行了,可是如今還只是具有了
熱加載
能力,可是還未將這功能添加到項目中。
添加reload
按鈕。
- 從
GIC
的Example
文件夾中將dev
文件夾拷貝到剛纔建立的項目中而且添加進去。- 在
AppDelegate
中修改加載方式
#import "GICXMLLayoutDevTools.h"
[GICXMLLayoutDevTools loadAPPFromPath:@"App.xml"];
複製代碼
如今,剛纔建立的項目已經具有了熱加載
功能,而且當你運行啓動後,會在屏幕的右下角
看到一個reload
按鈕。每次點擊reload
按鈕,GIC
會自動從新加載一遍APP。這樣當你對XML文件作出了任何編輯,只要點一下reload
按鈕,那麼改變立馬會生效。
以上介紹的項目結構還只是一個簡單的項目結構,並不能知足實際的開發需求。下面給出一個比較完整的項目結構。
下面對其中的標註一一說明。
gic
: 存放由native提供的各類自定義功能。包括以下幾個自定義模塊:
1.1
behaviors
:各類自定義行爲(參考文檔)。好比:下拉刷新行爲、上拉加載更多行爲等等
1.2
elements
:各類自定義元素(參考文檔)。
1.3
js
:提供JSAPI的擴展(參考文檔)。好比:websock API、AlertView API 等等。
1.4
hotreload
:提供熱加載能力。這個目錄有點特殊,發佈項目的時候是不須要熱加載功能的,所以在發佈的時候能夠將此功能移除。
project
:存放應用自己相關的內容。並且這個文件夾裏面的內容是能夠被熱更新
的。熱更新
功能我會在後面單獨寫一篇文章介紹。
2.1
App.xml
:這是一個文件,算是應用的入口。
2.2
images
:存放圖片靜態資源。目前GIC
支持png
、jpg
、gif
等圖片資源,而對於svg
的支持須要經過自定義擴展來實現。
2.3
js
:存放JavaScript
文件,承載着應用的業務邏輯。
2.4
pages
:存放各個頁面的xml文件,若是你的項目是由Tabs
組成的,那麼也能夠在這個文件夾下存放各個tabs的頁面的內容。
2.5
style
:存放樣式文件,提供模塊化樣式。甚至能夠提供相似主題
的功能,經過不一樣的樣式文件提供不一樣的主題
功能。
上面描述的一個參考的項目結構。基本能應付大多數的開發場景了。