在iOS多人協(xié)同開發(fā)時(shí)箕母,一般會(huì)使用版本管理工具盒让,比如SVN/Git。經(jīng)常的司蔬,在提交修改的時(shí)候邑茄,除了我們自己主動(dòng)修改的.h、.m和資源文件之外俊啼,還會(huì)出現(xiàn)一些莫名其妙的文件肺缕,在.xcodeproj里面,
.xcodeproj是項(xiàng)目文件授帕,包含項(xiàng)目配置文件同木,這是很多人都知道的。然而跛十,.xcodeproj里面的各個(gè)文件都有什么用呢彤路?提交版本時(shí),要不要提交這些文件/目錄芥映?下面總結(jié)一下洲尊。
一個(gè)xcodeproj文件,其實(shí)是一個(gè)目錄奈偏,它的格式大體上是這樣的:
有的文件坞嘀,比如user.mode1v3,在沒有多個(gè)用戶操作項(xiàng)目的時(shí)候惊来,是沒有的丽涩。Apple并沒有提供.xcodeproj文件的文檔,而且它也沒有準(zhǔn)備提供裁蚁,更坑爹的是矢渊,xcodeproj的格式、內(nèi)容都是隨時(shí)可變的枉证,比如一個(gè)Xcode版本上來矮男,可能其目錄就會(huì)變化,而沒有任何通知刽严。這可苦了那些為.xcodeproj開發(fā)每三方庫(kù)的同學(xué)昂灵,不僅要一點(diǎn)一點(diǎn)摸索各個(gè)文件的內(nèi)容避凝,修改方法,還要忍受Apple沒有任何通知地修改格式眨补。Stackoverflow中這位就在抱怨蘋果開發(fā)人員的傲慢:http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects/12021580#12021580 閑話少說管削,下面進(jìn)入正題:各個(gè)文件/目錄的作用,以及要不要提交更新撑螺。
project.pbxproj文件這個(gè)文件包含了所有此項(xiàng)目build需要的元數(shù)據(jù)含思,setting、file reference甘晤、configuration含潘、targets…也就是說,這個(gè)文件代表的就是這個(gè)project线婚。因此遏弱,在修改了這個(gè)文件之后,需要提交上去塞弊。
project.xcworkspace目錄這個(gè)文件比較特殊漱逸。首先要了解的是workspace和project的概念。project應(yīng)該比較清楚游沿,那workspace是什么呢饰抒?workspace是一種Xcode documentation,可以將多個(gè)project和其它文件放到一起诀黍,這樣可以work on them together袋坑。一個(gè)project也可以屬于多個(gè)workspace。所以簡(jiǎn)單來講眯勾,workspace里面就是一個(gè)或多個(gè)projects的reference枣宫,放在一起,有時(shí)候比較好工作咒精。這樣的話镶柱,如果項(xiàng)目里面根本就沒有workspace的概念,或者只有一個(gè)workspace+一個(gè)project模叙,這個(gè)workspace并不會(huì)有什么變動(dòng),那這個(gè)文件就不需要提交同步鞋屈。如果project很依賴workspace范咨,沒有workspace就運(yùn)行不了,活不下去了厂庇,這時(shí)候這個(gè)文件肯定是要同步的渠啊。
user.pbxuser文件Xcode項(xiàng)目為每一個(gè)使用這個(gè)項(xiàng)目的用戶創(chuàng)建一個(gè)user.pbxuser文件,存儲(chǔ)了此用戶對(duì)項(xiàng)目的偏好設(shè)置权旷,如Xcode的位置和大小替蛉、文件書簽等。可以看到這個(gè)文件是針對(duì)某個(gè)用戶的躲查,可以說是私人性質(zhì)的它浅,跟整個(gè)項(xiàng)目沒有太大關(guān)系,所以一般不需要同步镣煮。
user.mode1v3和user.mode2v3文件這個(gè)也是用戶相關(guān)的文件姐霍,和user.pbxuser差不多,存儲(chǔ)某用戶特定的項(xiàng)目設(shè)置典唇,比如Xcode中window的狀態(tài)和結(jié)構(gòu)镊折,斷點(diǎn)等等。因此也不需要同步介衔。
xcuserdata目錄/xcshareddata目錄:大體上來說恨胚,和上面兩種一樣,也是用戶相關(guān)的文件炎咖,包含user state赃泡,folders的狀態(tài),最后打開的文件等塘装。因此一般來說是不需要同步的急迂。例外是,這個(gè)目錄里也包含了scheme相關(guān)的內(nèi)容蹦肴。如果項(xiàng)目里需要同步特定的scheme僚碎,這時(shí)候,需要在Edit Scheme里阴幌,勾選Share框勺阐,然后把新生成的xcshareddata目錄提交上去。
.xccheckout我沒有碰到過這個(gè)文件矛双。 這個(gè)文件在xcworkspace目錄里渊抽。.xccheckout文件包含了關(guān)于workspace中用到了什么repo的數(shù)據(jù)。根據(jù)說明议忽,它的規(guī)則和xcworkspace差不多:如果沒用過懒闷,或者只是簡(jiǎn)單使用workspace,不需要同步栈幸;如果深入使用workspace愤估,則需要同步。
總結(jié)1:.xcodeproj里的文件大體上有3種:
項(xiàng)目文件
單個(gè)用戶的文件
跟workspace相關(guān)的文件
項(xiàng)目文件速址,需要同步玩焰;單個(gè)用戶的文件,不需要同步芍锚;跟workspace相關(guān)的文件昔园,視有沒有深入使用workspace而定蔓榄。
總結(jié)2:
需要同步的文件:
project.pbxproj文件
xcsharedata目錄
不需要同步的文件
user.pbxuser文件
user.mode1v3/user.mode2v3文件
xcuserdata目錄
視workspace情況而定的文件:
.xcworkspace目錄
.xccheckout文件