在Mac上開發(fā)基于Worklight的移動應用
文章將從安裝 Xcode 入手,完成 Worklight 開發(fā)環(huán)境在 Mac 上的搭建;然后開發(fā)簡單的程序,并且通過 Xcode 在模擬器上運行基于 iPhone 的程序;最后將介紹物理機和 Mac 連接方式,完成在 Mac 上搭建 Worklight 環(huán)境的全部工作。
在 Mac 上搭建 Worklight 開發(fā)環(huán)境
在當今流行的移動終端中,蘋果的產(chǎn)品占有大量的市場份額,其中 iPhone 和 iPad 作為兩個重要的產(chǎn)品,對于手機客戶端應用的開發(fā)者來說,是必須需要考慮的環(huán)境。但是傳統(tǒng)的開發(fā)模式,不但需要學習 Objective-C 以及相應的 API,而且程序完成以后,蘋果公司還有嚴格的界面審查工作,只有驗證合格,才可以發(fā)布到 App Store 上。同時,iPhone 和 iPad 作為分辨率完全不同的兩種終端,需要考慮各自的界面設計,這就極大限制了開發(fā)企業(yè)級程序的能力。
Worklight 作為一個移動程序的開發(fā)平臺,通過不同的環(huán)境設置,提供了開發(fā) iPhone 和 iPad 應用的便利模式。用戶可以在 Windows 環(huán)境中,將混合模式的應用開發(fā)完畢,然后生成相應環(huán)境的代碼,傳輸?shù)?Mac 上,利用 Xcode 完成生成代碼的編譯和運行工作。
但是上述的形式很繁瑣,開發(fā)如果有改動,就需要在 Windows 上進行修改,然后將內(nèi)容部署到 Mac 機器上,再使用 Mac 連接 Windows 端的 Worklight 服務器進 行調(diào)試。更復雜的情況是,如果應用需要一定的本地功能,就需要在 Windows 和 Mac 上依次修改代碼,這種耗時的迭代過程,是開發(fā)應用不可忍受的。所以為了更好的開發(fā)基于 Worklight 的 iPhone(iPad)應用,在 Mac 搭建一套完整的環(huán)境顯得十分重要。
本文將利用 Worklight 提供的默認配置,進行環(huán)境搭建,搭建完成后,環(huán)境的整體架構如圖 1 所示。
圖 1. Mac 上 Worklight 的架構
從架構圖可以看到,Mac 上搭建環(huán)境的優(yōu)勢有以下三點:
- 開發(fā)者可以直接在 Mac 上通過 Eclipse 開發(fā)混合模式的應用,然后部署到 Xcode 上,通過 Xcode 的模擬器或者真實的機器,完成應用的開發(fā)。
- 調(diào)試多樣化:程序的調(diào)試可以在系統(tǒng)默認的瀏覽器上進行,也可以在 Xcode 的模擬器上運行,還可以在真機上運行,提供了多樣的調(diào)試方式。
- 部署簡潔:當系統(tǒng)的代碼發(fā)生變化時,通過 Eclipse 的插件,可以自動部署到 Xcode 上,這樣就簡化了手動部署帶來的問題,而且,當用戶在不同版本(iPhone 和 iPad)上切換時,Eclipse 也會自動完成這個過程。
Xcode 的安裝
為了運行相應的客戶端程序,或者和真實的終端相連,安裝 Xcode 是必須的。在安裝客戶端之前,需要先從蘋果的網(wǎng)站上下載安裝程序,其過程如下:
- 訪問蘋果的 開發(fā)者網(wǎng)站
- 注冊為 免費的開發(fā)用戶
- 利用注冊的用戶進行登錄,并且從 網(wǎng)頁 上下載 Xcode(本文以 4.2.1 for Lion 為基礎)
在安裝 Xcode 時,可能會碰到安裝失敗的問題,具體的問題描述,查看 鏈接。這個問題是因為安裝包下載后沒有及時安裝,簽名過期導致的,最簡單的解決辦法就是修改 Mac 的系統(tǒng)時間(系統(tǒng)偏好設置 -> 日期與時間),將系統(tǒng)時間往回撥一定的日期。
如果要更新系統(tǒng)已經(jīng)安裝的 Xcode,那么需要執(zhí)行如下的命令進行反安裝。
清單 1. 反安裝 Xcode
- sudo /Developer/Library/uninstall-devtools --mode=all
- rm -rf Install\ Xcode.app
在清理完成后,就可以安裝新的 Xcode 了#p#
Worklight 的安裝
在 Mac 上搭建開發(fā)環(huán)境和 Window 上類似,但是有以下幾點是不同的:
- JDBC 驅(qū)動的配置:因為一般情況下,下載的內(nèi)容將被放在 Mac 的下載目錄下。這個目錄的位置,和用戶本身相關,例如當用戶名為 user1 時,相應的路徑為:/Users/user1/Downloads/${JDBC_FOLDER}/${JDBC_JAR}
- Worklight 的啟動和關閉:在路徑 /Users/user1/Applications 下,安裝了完整的 Worklight,它的目錄結構和 Windows 相似,但是啟動和關閉 Worklight 的命令,分別是 Start Server.command 和 Stop Server.command
應用程序的開發(fā)
為了更好的顯示 iPhone 和 iPad 兩種不同分辨率終端的效果,應用程序?qū)⑹褂貌煌牟季殖尸F(xiàn)頁面的內(nèi)容。整個程序用于模擬顯示設定終端的偏好,在 iPhone 環(huán)境下,主菜單將首先被顯示,當某項具體的菜單被點擊后,顯示在這個菜單下可以設置的內(nèi)容;用戶可以點擊回退按鈕,返回菜單頁。在 iPad 環(huán)境下,菜單顯示在頁面的左邊,當點擊菜單后,可設定的內(nèi)容顯示在右邊,不提供回退按鈕。
基于 Eclipse 平臺開發(fā)的 Hybrid 程序
在 Eclipse 上開發(fā)混合模式的程序,對于 Worklight 來說,是一件很簡單的事情。但是為了提高開發(fā) iPhone 程序的效率,在開發(fā)之前需要引入以下的內(nèi)容:
- Dojo Mobile 框架:混合模式的手機應用,需要解決的一個主要問題就是讓用戶在體驗上接近本地程序,Dojo Mobile 在這方面做了很好的努力,可以參加其 主頁
- Ajax 方式:因為混合模式中,頁面的切換主要通過 Ajax 方式實現(xiàn),所以用戶需要了解通過 Ajax 方式和后臺進行訪問的方法。雖然 Worklight 提供的默認訪問方式就是 Ajax,但是在示例中,將使用 Dojo 的 Ajax 方式,基礎內(nèi)容可以查看 Ajax with Dojo
- Worklight 環(huán)境:因為需要區(qū)分 iPad 和 iPhone 的環(huán)境,所以在示例中必然需要設定環(huán)境參數(shù),只有這樣,才能生成不同的部署代碼。
創(chuàng)建混合模式的應用過程可以參見 第一個程序 中混合模式的介紹,在本文中,因為需要創(chuàng)建兩個不同的環(huán)境,所以對于各自環(huán)境的設定和其目錄結構需要作一下說明:
- common/css:應用中所需公共 CSS 文件的存放目錄,其中 WorklightMacApp.css 是用于填寫公共的 CSS 屬性,在 iPhone 和 iPad 的環(huán)境中均可使用
- iPhone/css:特定環(huán)境所需 CSS 文件的存放目錄,在完整的 CSS 文件中,放在 common 的 CSS 文件之后,所以相同屬性會覆蓋 common 中的定義
- common/images:應用需要的圖片
- common/js:應用中所需公共 JS 文件的存放目錄,其中 WorklightMacApp.js 用于存放公共的 JS 方法,auth.js 用于存放權限管理的 JS 方法,messages.js 用于存放本地化的 JS 方法
- iPhone/js:用于編寫特定環(huán)境需要的 JS 方法,并且覆蓋在 common 下的同名 JS 方法
圖 2 展示了在混合模式下,開發(fā)者需要關注的內(nèi)容。
圖 2. 不同環(huán)境的同名 JS 文件
從上述的文件結構中,可以看到,因為環(huán)境不同,存在三個名稱完全一致的 JS 文件。在 common 文件夾下,文件中存在一個 wlCommonInit 函數(shù),它的清單如下:
清單 2. wlCommonInit 函數(shù)
- function wlCommonInit(){
- (function() {
- require(
- ["dojox/mobile/parser", "dijit/dijit", "dojox/mobile/deviceTheme",
- "dojox/mobile/compat", "dojox/mobile", "dojox/mobile/FixedSplitter",
- "dojox/mobile/FixedSplitterPane", "dojox/mobile/ScrollableView"],
- function(parser, deviceTheme) {
- parser.parse();
- }
- );
- })();
- }
這個函數(shù)用于初始化公共的內(nèi)容,在本文中它的作用就是引入需要的 Dojo 內(nèi)容,然后當所有的基礎內(nèi)容被讀入到頁面后,Dojo Mobile 框架將會解析節(jié)點的內(nèi)容,并且按照開發(fā)者的需求生成各種控件(比如視圖、標題、按鈕等等)。#p#
在 iPhone 和 iPad 文件夾下,存在著一個 wlEnvInit 函數(shù),它的作用是按照不同的環(huán)境調(diào)用各自的初始化函數(shù),以 iPhone 為例,它的初始化函數(shù)如下:
清單 3. iPhone 的 wlEnvInit 函數(shù)
- function wlEnvInit(){
- wlCommonInit();
- setTimeout(loadLoginPage, 1000);
- function loadLoginPage() {
- var url = "html/iPhone.html";
- dojo.xhrGet({
- url: url,
- handleAs: "text",
- load: function(response, ioArgs){
- dojo.body().innerHTML = response;
- dojo.parser.parse();
- }
- });
- }
- }
從清單中可以了解到,應用通過調(diào)用異步請求獲取頁面內(nèi)容,將其插入瀏覽器后,調(diào)用 Dojo 的解析函數(shù),轉(zhuǎn)化為手機應用的樣式后,再顯示。
最后需要提及的是主頁面的代碼,它最關鍵的內(nèi)容如下:
清單 4. HTML 中的內(nèi)容
- <body onload="WL.Client.init({})" id="content" style="display: none">
所以整個混合模式的應用初始化過程分為四步:
- 應用根據(jù)配置訪問默認頁面(就是 HTML 文檔),在 onload 函數(shù)中,Worklight 將調(diào)用環(huán)境默認的初始化函數(shù),同時隱藏整個 body 內(nèi)容
- 根據(jù)環(huán)境,相應的 wlEnvInit 函數(shù)被調(diào)用
- 在 wlEnvInit 中調(diào)用了通用的初始化函數(shù) wlCommonInit
- 全部初始化完成后,Dojo 會解析頁面內(nèi)容,完成 Dojo Mobile 的初始化后,顯示相應的頁面
基于 Xcode 模擬器的運行
在 Mac 上運行 Worklight 程序,根據(jù)開發(fā)環(huán)境的不同有兩種方式。
如果 Worklight 是在 Windows 版本的 Eclipse 上開發(fā),需要訪問 iPhone(或者 iPad)文件夾下的 package 目錄,將下面的一個 zip 文件傳送到 Mac 上,然后解壓。解壓后的文件系統(tǒng),是一個完整的本地 Xcode 程序,雙擊項目文件(.xcodeproj)后,就會在 Xcode 的 IDE 中打開一個項目,運行調(diào)試。
如果 Worklight 是在 Mac 上開發(fā)的,那么過程要簡單的多。首先,在 Worklight 上完成應用的部署,然后按住 control 鍵后點擊 iPad(iPhone)文件夾,選擇 Run As -> Xcode Project,項目就會自動被部署到 Xcode 的 IDE 中。
在 Xcode 的 IDE 中點擊運行,就會根據(jù)應用的不同,啟動不同的模擬器(iPhone 或者 iPad 版本),運行程序。圖 4 顯示了在 Mac 版本的 Eclipse 上部署到 Xcode 上的命令界面。
圖 3. 在 Mac 上部署 Xcode 應用
雖然開發(fā)應用的過程簡單,但是在實際過程中有幾點需要注意:
- 因為使用了 Dojo Mobile 來提供良好的用戶體驗,所以當項目部署到 Worklight 的服務器上時,Dojo Mobile 的包也需要被部署。完整的 Dojo 包比較大,部署時間較長,所以建議界面開發(fā)部分單獨完成,當界面完成后,才整合到 Worklight 的應用中
- 在 Eclipse 的插件庫中,有一個 Dojo 的插件,安裝后可以方便的通過拖拽方式實現(xiàn)界面的布局,并且會根據(jù)需要用到的模塊,自動導入相應需要的 JS 文件。建議開發(fā)者去 鏈接 上下載使用
- 在 iPad 的環(huán)境下,模擬器啟動后,默認顯示方式是豎屏,為了達到橫屏的顯示效果,可以點擊快捷鍵 command+ →將模擬器變成橫屏,需要重置時,仍然點擊相同的快捷鍵
在物理機上運行
在物理機上直接調(diào)試 Xcode 程序,是一個比較復雜的過程,它的步驟簡略的說可以分為六步:
- 在 App Store 的網(wǎng)站上,注冊一個付費用戶,需要 99 美元一年
- 利用付費賬號創(chuàng)建證書
- 將需要連接的真實設備添加到和賬號綁定的測試設備中(99 美元的賬戶最多可以綁定一百個)
- 創(chuàng)建配置文件
- 通過配置文件,將應用安裝到綁定的測試設備上
- 在真實設備上進行調(diào)試
調(diào)試方法介紹
在 Mac 上進行調(diào)試,除了 WL 平臺提供的多種調(diào)試程序的方法外,還可以使用 Xcode 進行調(diào)試。在 Xcode 中,用戶需要確認調(diào)試的默認模擬器;然后,點擊運行,在模擬器上運行程序;通過點擊斷點按鈕來激活或者廢棄斷點,完成調(diào)試過程;調(diào)試完成后,可以點擊停止 按鈕結束應用在模擬器上的運行。
結束語
在 Mac 上搭建 Worklight 的開發(fā)平臺,為方便的開發(fā)混合模式的蘋果應用做了很好的準備。通過基于 Eclipse,Xcode 和 Worklight 的整合環(huán)境,用戶可以在 Mac 機上開發(fā)應用,進行調(diào)試,而不需要像在 Windows 上一樣,把壓縮后的文件拷貝到 Mac 上,再解壓調(diào)試。這大大提高了開發(fā)的效率。
在 Mac 上搭建環(huán)境的另外一個重要意義在于,用戶在開發(fā)本地功能時,可以方便的直接在 Mac 上開發(fā)并調(diào)用模擬器進行測試,而不是分別在 Windows 和 Mac 的環(huán)境下開發(fā),然后整合。這樣便于項目的代碼管理和環(huán)境統(tǒng)一。