1. 程式人生 > >iOS:xcode 中Groups vs Folder References

iOS:xcode 中Groups vs Folder References

           前言:當xcode新增資源的時候,有倆種引用方式,分別為Groups 和 Folder Reference倆種方式。它們在xcode中顯示也不同,一個是yellow,一個是blue。

 Groups

     A.Xcode只是儲存一個對檔案(夾)的引用,在xcode中對檔案(夾)操作各種操作,只是影響xcode的目錄結構,.xcodeproj檔案而已,對它的實際儲存位置幾乎不做影響(如果引用的時候選了copy選項,實際儲存在專案工程目錄裡,也沒有影響),group是xcode內部的組織形式(目錄結構)。

         1.在xcode中隨意移動Groups的檔案(夾),只是它在xcode中目錄結構改變了,它的實際儲存位置不受影響,原來儲存什麼位置,還是那個位置。

         2.在xcode中修改Groups的資料夾的名字,group名字變了,資料夾的實際儲存名字不變,但如果修改Group的檔案的名字,實際儲存檔案的名字會變。

         3.不管該group在xcode中如何移動,它對應的實際資料夾不變。

         4.Group的資料夾都會對應盤上的一個實際儲存的資料夾位置。往這個group中新新增檔案,該檔案會儲存到group對應的實際資料夾中。

            在哪個group1中裡面new group,新的group對應的資料夾就是它所屬group1對應的資料夾。比如在xcode根目錄new group,group對應的就是project目錄。往group裡面新增檔案就是往project目錄裡新增檔案。在xcode target名字group中new group,對應的就是target的根資料夾。

            往xcode中新增資料夾同時建立的group,對應的就是該資料夾。該資料夾所儲存位置就是所屬group對應的資料夾。

      B.Group的引用方式,所屬的檔案都會參與編譯(程式碼檔案),資原始檔(圖片等)會copy到bundle包中(Xcode flattens the group hierarchy and dumps all the files in the top level of the product’s bundle. )。        

      問題

            1.當有多個target的時候,必須 set the proper target membership for each file。

            2.在finder中,專案的資料夾中可能有資料夾A,但是在x'code project中並沒有資料夾A,Because of the mismatch, locating files can get confusing。

            3.If you move a file or rename it outside of Xcode, the reference breaks and the file turns red. File management becomes a real pain。

       優點:

            1.可以自由的選擇which files on disk 新增到xcode中

            2.對target membership有個較好控制

            3.[UIImage imageNamed:@"GoPago"]  instead of  [UIImage imageNamed:@"Images/Icons/GoPago"]; 注意,不同的檔案的名字衝突。

Folder References 

      A.folder references只能作為資源,整個引用進專案,相當一個獨立體。在xcode中不能對它進行編輯。在它的儲存位置上任何改動都會立刻反應到xcode中。            1.不能往folder references資料夾中新增、刪除檔案,            2.可以刪除整個folder references資料夾。            3.在folder references儲存的資料夾中新增、刪除、重新命名檔案,xcode相應改變。       B.folder references不能編譯程式碼,也就是說,以folder形式引用進來的檔案,不能被放在complie sources列表裡面。資料夾裡面的東西都會原封不動的拷貝到 bundle 包(該資料夾以及子資料夾都會出現在bundle中)。       優點:             1.子資料夾自動新增,避免衝突:All of its files and subfolders are automatically added to the project. This keeps the project file smaller and simpler, with less chance of merge conflicts。             2.同步變化:If you rename, delete, or move a file in the file system, Xcode automatically updates the folder reference to reflect the change. File management is thus far easier。             3.xcode中目錄跟disk上的目錄一致,不會帶來混淆             4.不用當心name conflicts          缺點:             1.資料夾中所有東西都have membership,不能改動(有時也是優點)             2.不能隱藏某一個檔案(individual files) from the project navigator             3.載入一個資源,必須寫明整個路徑:參考上文             4.在IB中無法使用fole references裡面資源。When editing, IB is able to find the image file and allows you to select it, but when it generates the XIB, it strips the folder location, which prevents it from being found.

Conclusion

         The fact that Interface Builder can’t work with images in (sub)folder references is a deal breaker. And being able to select the target membership for individual files—a feature only provided by groups—can be very useful. For these reasons, you will find that groups are far more common in practice, and it is the option I recommend. You just have to live with the fact that if you move the files around on disk, you’ll have to manually update the Xcode project to match. ---------------------------- 參考: http://vocaro.com/trevor/blog/2012/10/21/xcode-groups-vs-folder-references/ http://www.th7.cn/Program/IOS/201408/269138.shtml