在Mac上開發基于Worklight的移動應用
文章將從安裝 Xcode 入手,完成 Worklight 開發環境在 Mac 上的搭建;然后開發簡單的程序,并且通過 Xcode 在模擬器上運行基于 iPhone 的程序;最后將介紹物理機和 Mac 連接方式,完成在 Mac 上搭建 Worklight 環境的全部工作。
在 Mac 上搭建 Worklight 開發環境
在當今流行的移動終端中,蘋果的產品占有大量的市場份額,其中 iPhone 和 iPad 作為兩個重要的產品,對于手機客戶端應用的開發者來說,是必須需要考慮的環境。但是傳統的開發模式,不但需要學習 Objective-C 以及相應的 API,而且程序完成以后,蘋果公司還有嚴格的界面審查工作,只有驗證合格,才可以發布到 App Store 上。同時,iPhone 和 iPad 作為分辨率完全不同的兩種終端,需要考慮各自的界面設計,這就極大限制了開發企業級程序的能力。
Worklight 作為一個移動程序的開發平臺,通過不同的環境設置,提供了開發 iPhone 和 iPad 應用的便利模式。用戶可以在 Windows 環境中,將混合模式的應用開發完畢,然后生成相應環境的代碼,傳輸到 Mac 上,利用 Xcode 完成生成代碼的編譯和運行工作。
但是上述的形式很繁瑣,開發如果有改動,就需要在 Windows 上進行修改,然后將內容部署到 Mac 機器上,再使用 Mac 連接 Windows 端的 Worklight 服務器進 行調試。更復雜的情況是,如果應用需要一定的本地功能,就需要在 Windows 和 Mac 上依次修改代碼,這種耗時的迭代過程,是開發應用不可忍受的。所以為了更好的開發基于 Worklight 的 iPhone(iPad)應用,在 Mac 搭建一套完整的環境顯得十分重要。
本文將利用 Worklight 提供的默認配置,進行環境搭建,搭建完成后,環境的整體架構如圖 1 所示。
圖 1. Mac 上 Worklight 的架構

從架構圖可以看到,Mac 上搭建環境的優勢有以下三點:
- 開發者可以直接在 Mac 上通過 Eclipse 開發混合模式的應用,然后部署到 Xcode 上,通過 Xcode 的模擬器或者真實的機器,完成應用的開發。
- 調試多樣化:程序的調試可以在系統默認的瀏覽器上進行,也可以在 Xcode 的模擬器上運行,還可以在真機上運行,提供了多樣的調試方式。
- 部署簡潔:當系統的代碼發生變化時,通過 Eclipse 的插件,可以自動部署到 Xcode 上,這樣就簡化了手動部署帶來的問題,而且,當用戶在不同版本(iPhone 和 iPad)上切換時,Eclipse 也會自動完成這個過程。
Xcode 的安裝
為了運行相應的客戶端程序,或者和真實的終端相連,安裝 Xcode 是必須的。在安裝客戶端之前,需要先從蘋果的網站上下載安裝程序,其過程如下:
- 訪問蘋果的 開發者網站
- 注冊為 免費的開發用戶
- 利用注冊的用戶進行登錄,并且從 網頁 上下載 Xcode(本文以 4.2.1 for Lion 為基礎)
在安裝 Xcode 時,可能會碰到安裝失敗的問題,具體的問題描述,查看 鏈接。這個問題是因為安裝包下載后沒有及時安裝,簽名過期導致的,最簡單的解決辦法就是修改 Mac 的系統時間(系統偏好設置 -> 日期與時間),將系統時間往回撥一定的日期。
如果要更新系統已經安裝的 Xcode,那么需要執行如下的命令進行反安裝。
清單 1. 反安裝 Xcode
- sudo /Developer/Library/uninstall-devtools --mode=all
- rm -rf Install\ Xcode.app
在清理完成后,就可以安裝新的 Xcode 了#p#
Worklight 的安裝
在 Mac 上搭建開發環境和 Window 上類似,但是有以下幾點是不同的:
- JDBC 驅動的配置:因為一般情況下,下載的內容將被放在 Mac 的下載目錄下。這個目錄的位置,和用戶本身相關,例如當用戶名為 user1 時,相應的路徑為:/Users/user1/Downloads/${JDBC_FOLDER}/${JDBC_JAR}
- Worklight 的啟動和關閉:在路徑 /Users/user1/Applications 下,安裝了完整的 Worklight,它的目錄結構和 Windows 相似,但是啟動和關閉 Worklight 的命令,分別是 Start Server.command 和 Stop Server.command
應用程序的開發
為了更好的顯示 iPhone 和 iPad 兩種不同分辨率終端的效果,應用程序將使用不同的布局呈現頁面的內容。整個程序用于模擬顯示設定終端的偏好,在 iPhone 環境下,主菜單將首先被顯示,當某項具體的菜單被點擊后,顯示在這個菜單下可以設置的內容;用戶可以點擊回退按鈕,返回菜單頁。在 iPad 環境下,菜單顯示在頁面的左邊,當點擊菜單后,可設定的內容顯示在右邊,不提供回退按鈕。
基于 Eclipse 平臺開發的 Hybrid 程序
在 Eclipse 上開發混合模式的程序,對于 Worklight 來說,是一件很簡單的事情。但是為了提高開發 iPhone 程序的效率,在開發之前需要引入以下的內容:
- Dojo Mobile 框架:混合模式的手機應用,需要解決的一個主要問題就是讓用戶在體驗上接近本地程序,Dojo Mobile 在這方面做了很好的努力,可以參加其 主頁
- Ajax 方式:因為混合模式中,頁面的切換主要通過 Ajax 方式實現,所以用戶需要了解通過 Ajax 方式和后臺進行訪問的方法。雖然 Worklight 提供的默認訪問方式就是 Ajax,但是在示例中,將使用 Dojo 的 Ajax 方式,基礎內容可以查看 Ajax with Dojo
- Worklight 環境:因為需要區分 iPad 和 iPhone 的環境,所以在示例中必然需要設定環境參數,只有這樣,才能生成不同的部署代碼。
創建混合模式的應用過程可以參見 第一個程序 中混合模式的介紹,在本文中,因為需要創建兩個不同的環境,所以對于各自環境的設定和其目錄結構需要作一下說明:
- common/css:應用中所需公共 CSS 文件的存放目錄,其中 WorklightMacApp.css 是用于填寫公共的 CSS 屬性,在 iPhone 和 iPad 的環境中均可使用
- iPhone/css:特定環境所需 CSS 文件的存放目錄,在完整的 CSS 文件中,放在 common 的 CSS 文件之后,所以相同屬性會覆蓋 common 中的定義
- common/images:應用需要的圖片
- common/js:應用中所需公共 JS 文件的存放目錄,其中 WorklightMacApp.js 用于存放公共的 JS 方法,auth.js 用于存放權限管理的 JS 方法,messages.js 用于存放本地化的 JS 方法
- iPhone/js:用于編寫特定環境需要的 JS 方法,并且覆蓋在 common 下的同名 JS 方法
圖 2 展示了在混合模式下,開發者需要關注的內容。
圖 2. 不同環境的同名 JS 文件

從上述的文件結構中,可以看到,因為環境不同,存在三個名稱完全一致的 JS 文件。在 common 文件夾下,文件中存在一個 wlCommonInit 函數,它的清單如下:
清單 2. wlCommonInit 函數
- 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();
- }
- );
- })();
- }
這個函數用于初始化公共的內容,在本文中它的作用就是引入需要的 Dojo 內容,然后當所有的基礎內容被讀入到頁面后,Dojo Mobile 框架將會解析節點的內容,并且按照開發者的需求生成各種控件(比如視圖、標題、按鈕等等)。#p#
在 iPhone 和 iPad 文件夾下,存在著一個 wlEnvInit 函數,它的作用是按照不同的環境調用各自的初始化函數,以 iPhone 為例,它的初始化函數如下:
清單 3. iPhone 的 wlEnvInit 函數
- 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();
- }
- });
- }
- }
從清單中可以了解到,應用通過調用異步請求獲取頁面內容,將其插入瀏覽器后,調用 Dojo 的解析函數,轉化為手機應用的樣式后,再顯示。
最后需要提及的是主頁面的代碼,它最關鍵的內容如下:
清單 4. HTML 中的內容
- <body onload="WL.Client.init({})" id="content" style="display: none">
所以整個混合模式的應用初始化過程分為四步:
- 應用根據配置訪問默認頁面(就是 HTML 文檔),在 onload 函數中,Worklight 將調用環境默認的初始化函數,同時隱藏整個 body 內容
- 根據環境,相應的 wlEnvInit 函數被調用
- 在 wlEnvInit 中調用了通用的初始化函數 wlCommonInit
- 全部初始化完成后,Dojo 會解析頁面內容,完成 Dojo Mobile 的初始化后,顯示相應的頁面
基于 Xcode 模擬器的運行
在 Mac 上運行 Worklight 程序,根據開發環境的不同有兩種方式。
如果 Worklight 是在 Windows 版本的 Eclipse 上開發,需要訪問 iPhone(或者 iPad)文件夾下的 package 目錄,將下面的一個 zip 文件傳送到 Mac 上,然后解壓。解壓后的文件系統,是一個完整的本地 Xcode 程序,雙擊項目文件(.xcodeproj)后,就會在 Xcode 的 IDE 中打開一個項目,運行調試。
如果 Worklight 是在 Mac 上開發的,那么過程要簡單的多。首先,在 Worklight 上完成應用的部署,然后按住 control 鍵后點擊 iPad(iPhone)文件夾,選擇 Run As -> Xcode Project,項目就會自動被部署到 Xcode 的 IDE 中。
在 Xcode 的 IDE 中點擊運行,就會根據應用的不同,啟動不同的模擬器(iPhone 或者 iPad 版本),運行程序。圖 4 顯示了在 Mac 版本的 Eclipse 上部署到 Xcode 上的命令界面。
圖 3. 在 Mac 上部署 Xcode 應用

雖然開發應用的過程簡單,但是在實際過程中有幾點需要注意:
- 因為使用了 Dojo Mobile 來提供良好的用戶體驗,所以當項目部署到 Worklight 的服務器上時,Dojo Mobile 的包也需要被部署。完整的 Dojo 包比較大,部署時間較長,所以建議界面開發部分單獨完成,當界面完成后,才整合到 Worklight 的應用中
- 在 Eclipse 的插件庫中,有一個 Dojo 的插件,安裝后可以方便的通過拖拽方式實現界面的布局,并且會根據需要用到的模塊,自動導入相應需要的 JS 文件。建議開發者去 鏈接 上下載使用
- 在 iPad 的環境下,模擬器啟動后,默認顯示方式是豎屏,為了達到橫屏的顯示效果,可以點擊快捷鍵 command+ →將模擬器變成橫屏,需要重置時,仍然點擊相同的快捷鍵
在物理機上運行
在物理機上直接調試 Xcode 程序,是一個比較復雜的過程,它的步驟簡略的說可以分為六步:
- 在 App Store 的網站上,注冊一個付費用戶,需要 99 美元一年
- 利用付費賬號創建證書
- 將需要連接的真實設備添加到和賬號綁定的測試設備中(99 美元的賬戶最多可以綁定一百個)
- 創建配置文件
- 通過配置文件,將應用安裝到綁定的測試設備上
- 在真實設備上進行調試
調試方法介紹
在 Mac 上進行調試,除了 WL 平臺提供的多種調試程序的方法外,還可以使用 Xcode 進行調試。在 Xcode 中,用戶需要確認調試的默認模擬器;然后,點擊運行,在模擬器上運行程序;通過點擊斷點按鈕來激活或者廢棄斷點,完成調試過程;調試完成后,可以點擊停止 按鈕結束應用在模擬器上的運行。
結束語
在 Mac 上搭建 Worklight 的開發平臺,為方便的開發混合模式的蘋果應用做了很好的準備。通過基于 Eclipse,Xcode 和 Worklight 的整合環境,用戶可以在 Mac 機上開發應用,進行調試,而不需要像在 Windows 上一樣,把壓縮后的文件拷貝到 Mac 上,再解壓調試。這大大提高了開發的效率。
在 Mac 上搭建環境的另外一個重要意義在于,用戶在開發本地功能時,可以方便的直接在 Mac 上開發并調用模擬器進行測試,而不是分別在 Windows 和 Mac 的環境下開發,然后整合。這樣便于項目的代碼管理和環境統一。



















