XCode ios iphone 變態的資源管理


概述

XCode項目中的文件夾分成兩類: group 和 directory reference, 分別是虛結構和實結構. 黃色的 group 是默認的格式, 它的結構和磁盤上的文件夾毫無關系, 僅僅表示資源的邏輯組織結構, 這在管理源文件是非常方便. 同一段代碼可以被很多項目使用, 也可能只使用一個目錄的部分文件, 它不需要被拷貝到當前項目中, 但可以在當前項目中保持一個清晰的邏輯結構. 而且引用頭文件時不需要指明復雜的層次結構, 因為這些文件在XCode看來是 flat 的, 即它們處在同一層文件夾里. 

但是 group 帶來便利的同時也導致更加棘手的麻煩, 文件重名沖突問題; 尤其當你要使用上千個資源文件時, 這種問題已經極難避免; 而且, 資源文件一般是要拷貝到目標程序中的, 雖然它們在項目中可以有結構的組織, 但是復制到程序中時將會 flat 地輸出到程序的根目錄中, 這將是怎樣的一個災難! 同時, 如果你在外部向文件夾中加入了上百幅圖片, 你不得不把它們再向xcode中加入一遍. 歸根結底, 還要求助於我們傳統的藍色的 directory reference. 

但是, XCode 偏偏還要抽風, 就是不讓你用的安穩. 存在的問題有兩點. 其一, Interface Builder(IB) 不支持directory reference! 尼瑪, 幾乎所有的 IDE 都采用的默認項目管理方式, 非但設成非缺省模式, 而且 IB 壓根就不支持. 放狗去搜"interface builder directory reference", 答案只有一個, "it is impossible!" 其二, build 程序是, 資源只會 只增式拷貝! 什么意思? 當你在資源文件中加入一個圖片時, ok, 沒有任何問題; 可是當你試圖刪除哪怕修改一個資源時, no no no, you cannot do that! 所以當你調了半個小時還沒明白, 卧槽, 圖片明明換了, 怎么還是這個樣子? 當然了, 解決方案是乖乖的 clean build directory, 然后再 build. 差異檢測就這么難么? 感謝 David Frampton 為我們在這個問題上畫了個較為圓滿的句號: 在項目生成步驟中復制資源前增加一個腳本

Touch -cm ${SRCROOT}/(你的資源文件夾)

更新資源文件夾的 modification timestamp, 保證資源強制更新.

那么最終有沒有好的解決方案涅?

完美的方式 - 沒有

但有兩個曲線救國的方針:

方案一:

同時維護 Real資源文件夾(directory reference)+Virtual資源文件夾(group) , 前者是所有資源所處的目錄, 為代碼編程地加載資源使用; 后者只維護 IB 中使用的資源. 這種方式的缺點是, 后一個文件夾里的資源會在輸出項目中存在兩份, 增加程序體積.

方案二:

只維護一個 Real資源文件夾(directory reference), 在 IB 中使用嵌套路徑加載資源; 在 XCode 開發時, 你無法從 IB 中看到加載的資源效果, 但在運行時就沒有問題了.

魚與熊掌, 不可兼得.

 

參考資料:

http://stackoverflow.com/questions/1812731/iphone-interface-builder-moved-resources-to-sub-directory-now-ib-cant-see-th

http://maniacdev.com/2010/08/how-to-use-xcodes-folder-references/

http://majicjungle.com/blog/123/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM