XCode ios iphone 變態(tài)的資源管理
概述
XCode項(xiàng)目中的文件夾分成兩類: group 和 directory reference, 分別是虛結(jié)構(gòu)和實(shí)結(jié)構(gòu). 黃色的 group 是默認(rèn)的格式, 它的結(jié)構(gòu)和磁盤上的文件夾毫無關(guān)系, 僅僅表示資源的邏輯組織結(jié)構(gòu), 這在管理源文件是非常方便. 同一段代碼可以被很多項(xiàng)目使用, 也可能只使用一個(gè)目錄的部分文件, 它不需要被拷貝到當(dāng)前項(xiàng)目中, 但可以在當(dāng)前項(xiàng)目中保持一個(gè)清晰的邏輯結(jié)構(gòu). 而且引用頭文件時(shí)不需要指明復(fù)雜的層次結(jié)構(gòu), 因?yàn)檫@些文件在XCode看來是 flat 的, 即它們處在同一層文件夾里.
但是 group 帶來便利的同時(shí)也導(dǎo)致更加棘手的麻煩, 文件重名沖突問題; 尤其當(dāng)你要使用上千個(gè)資源文件時(shí), 這種問題已經(jīng)極難避免; 而且, 資源文件一般是要拷貝到目標(biāo)程序中的, 雖然它們?cè)陧?xiàng)目中可以有結(jié)構(gòu)的組織, 但是復(fù)制到程序中時(shí)將會(huì) flat 地輸出到程序的根目錄中, 這將是怎樣的一個(gè)災(zāi)難! 同時(shí), 如果你在外部向文件夾中加入了上百幅圖片, 你不得不把它們?cè)傧騲code中加入一遍. 歸根結(jié)底, 還要求助于我們傳統(tǒng)的藍(lán)色的 directory reference.
但是, XCode 偏偏還要抽風(fēng), 就是不讓你用的安穩(wěn). 存在的問題有兩點(diǎn). 其一, Interface Builder(IB) 不支持directory reference! 尼瑪, 幾乎所有的 IDE 都采用的默認(rèn)項(xiàng)目管理方式, 非但設(shè)成非缺省模式, 而且 IB 壓根就不支持. 放狗去搜"interface builder directory reference", 答案只有一個(gè), "it is impossible!" 其二, build 程序是, 資源只會(huì) 只增式拷貝! 什么意思? 當(dāng)你在資源文件中加入一個(gè)圖片時(shí), ok, 沒有任何問題; 可是當(dāng)你試圖刪除哪怕修改一個(gè)資源時(shí), no no no, you cannot do that! 所以當(dāng)你調(diào)了半個(gè)小時(shí)還沒明白, 臥槽, 圖片明明換了, 怎么還是這個(gè)樣子? 當(dāng)然了, 解決方案是乖乖的 clean build directory, 然后再 build. 差異檢測就這么難么? 感謝 David Frampton 為我們?cè)谶@個(gè)問題上畫了個(gè)較為圓滿的句號(hào): 在項(xiàng)目生成步驟中復(fù)制資源前增加一個(gè)腳本
Touch -cm ${SRCROOT}/(你的資源文件夾)
更新資源文件夾的 modification timestamp, 保證資源強(qiáng)制更新.
那么最終有沒有好的解決方案涅?
完美的方式 - 沒有
但有兩個(gè)曲線救國的方針:
方案一:
同時(shí)維護(hù) Real資源文件夾(directory reference)+Virtual資源文件夾(group) , 前者是所有資源所處的目錄, 為代碼編程地加載資源使用; 后者只維護(hù) IB 中使用的資源. 這種方式的缺點(diǎn)是, 后一個(gè)文件夾里的資源會(huì)在輸出項(xiàng)目中存在兩份, 增加程序體積.
方案二:
只維護(hù)一個(gè) Real資源文件夾(directory reference), 在 IB 中使用嵌套路徑加載資源; 在 XCode 開發(fā)時(shí), 你無法從 IB 中看到加載的資源效果, 但在運(yùn)行時(shí)就沒有問題了.
魚與熊掌, 不可兼得.
參考資料:
http://maniacdev.com/2010/08/how-to-use-xcodes-folder-references/
posted on 2012-04-11 04:10 大寶pku 閱讀(5882) 評(píng)論(2) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)