iPhone所開發的iOS是否也是同樣架構?

啟稿: 2014/12/27

完稿: 2014/12/31

 

QT CueTai線索台

QT跨平台實作04-跨平台實作進階:採用外部資源檔,iOS下之實例

 

研究過Mac OS Xapp封裝結構後,接下來我們來看同樣是Apple公司為iPhone所開發的iOS是否也是同樣架構?

 

l   iOS app封裝結構

各位可以找到原來我們在"跨平台實作01"iOS所建置的程式來研究看看;以我的例子建置的程式放在以下的目錄;

/Users/apple/Documents/QtWork/build-analogclock-iphonesimulator_clang_Qt_5_3_0_for_iOS-Release/Release-iphonesimulator

程式與Mac OS X下命名一樣,都叫analogclock.app,兩指點選在出現隱藏式選單下選取顯示套件內容就會出現封裝的路徑結構如下圖,驚訝的是它根本沒有Mac OS XResources/MacOS/兩目錄,所有的檔案都放在封裝後的根目錄.

   

 

l   QT下建置iOS封裝結構

我們可以將所有需要的資源檔放在在封裝後的根目錄,或是仿造Mac OS Xapp封裝結構,建立一個Resources/目錄來放置;在此我們選擇了後者,因為iOS 封裝後結構與Mac OS 較為一致,也比較有結構化分類管理!只是改為小寫無sresource/目錄而已!

 

我們在QT說明畫面的搜尋欄位曾經找過"Mac deployment",找到相當有用的訊息,是否QT說明畫面也有同樣的"iOS deployment"呢?試著在QT說明畫面的搜尋欄位輸入keyword "iOS deployment" ,很可惜,沒有太多有用訊息;網路上Google得到說法則類似Mac做法,所以我們在此就保留原來在analogclock.pro的巨集方法如下:

 

ResourcesFiles.files=\

        ../analogclock/audio/alarm.wav\

        ../analogclock/audio/bird.wav\

        ../analogclock/audio/cricketnight.wav\

        ../analogclock/audio/dolphin.wav\

        ../analogclock/audio/hour.wav\

        ../analogclock/audio/laser.wav\

        ../analogclock/audio/water.wav

 

ResourcesFiles.path=resource

QMAKE_BUNDLE_DATA+=ResourcesFiles

 

l   修改程式

現在資源檔就會在建置時打包到resource目錄下,所以我們在程式中取用的時候就該寫成以下的形式:

    soundQuarter=newQSound("resource/alarm.wav");

同樣的問題!程式在執行時所在目錄位置到底在哪兒?ㄧ樣也可以寫個小程式來dump出來current path,你就會發現當切為iOS模式,QT開發平台debug/release執行時與建置後正式執行app所在目錄位置是完全一樣的在封裝後的根目錄!因此使用上就變得很容易,不需要在原始碼中判斷目前的狀態就可以用相對與路徑取用:

 

    clock.D_Current=QDir::current();

        clock.S_CurrentPath=clock.D_Current.path()+"/";

        clock.S_ResPath="resource/";

    clock.S_AbsPath=clock.S_CurrentPath;

    QDir::setCurrent(clock.S_AbsPath);

 

若要取資源檔,都是往resource/目錄下取檔案即可!所以用法與之前一樣:

        soundQuarter=newQSound(S_ResPath+"alarm.wav");

 

l   建置與執行

雖然在QT開發平台不用在意是debug/release狀態下還是正式執行,不過我們還是在最前端加入以下一行程式:

    clock.OpNow=clock.DEBUG_;                     //APP_,DEBUG_,RELEASE_

要建置正式執行app則改為:

    clock.OpNow=clock.APP_;                       //APP_,DEBUG_,RELEASE_

如此就大功告成,檢查一下建置的,真的在resource/目錄下放置所有的檔案

 

Note: 若執行是沒有聲音,就表示路徑不對了!

 

l   延伸問題

是否其他平台也一樣呢?

文章標籤
全站熱搜
創作者介紹
創作者 Philip4G 的頭像
Philip4G

Philip4G四眼仙機的部落格

Philip4G 發表在 痞客邦 留言(0) 人氣(87)