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