在iOS多人協(xié)同開(kāi)發(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,在沒(méi)有多個(gè)用戶操作項(xiàng)目的時(shí)候,是沒(méi)有的。Apple并沒(méi)有提供.xcodeproj文件的文檔,而且它也沒(méi)有準(zhǔn)備提供,更坑爹的是,xcodeproj的格式、內(nèi)容都是隨時(shí)可變的,比如一個(gè)Xcode版本上來(lái),可能其目錄就會(huì)變化,而沒(méi)有任何通知。這可苦了那些為.xcodeproj開(kāi)發(fā)每三方庫(kù)的同學(xué),不僅要一點(diǎn)一點(diǎn)摸索各個(gè)文件的內(nèi)容,修改方法,還要忍受Apple沒(méi)有任何通知地修改格式。Stackoverflow中這位就在抱怨蘋(píng)果開(kāi)發(fā)人員的傲慢:http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects/12021580#12021580 閑話少說(shuō),下面進(jìn)入正題:各個(gè)文件/目錄的作用,以及要不要提交更新。
project.pbxproj文件這個(gè)文件包含了所有此項(xiàng)目build需要的元數(shù)據(jù),setting、file reference、configuration、targets…也就是說(shuō),這個(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)單來(lái)講,workspace里面就是一個(gè)或多個(gè)projects的reference,放在一起,有時(shí)候比較好工作。這樣的話,如果項(xiàng)目里面根本就沒(méi)有workspace的概念,或者只有一個(gè)workspace+一個(gè)project,這個(gè)workspace并不會(huì)有什么變動(dòng),那這個(gè)文件就不需要提交同步。如果project很依賴(lài)workspace,沒(méi)有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的位置和大小、文件書(shū)簽等??梢钥吹竭@個(gè)文件是針對(duì)某個(gè)用戶的,可以說(shuō)是私人性質(zhì)的,跟整個(gè)項(xiàng)目沒(méi)有太大關(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目錄:大體上來(lái)說(shuō),和上面兩種一樣,也是用戶相關(guān)的文件,包含user state,folders的狀態(tài),最后打開(kāi)的文件等。因此一般來(lái)說(shuō)是不需要同步的。例外是,這個(gè)目錄里也包含了scheme相關(guān)的內(nèi)容。如果項(xiàng)目里需要同步特定的scheme,這時(shí)候,需要在Edit Scheme里,勾選Share框,然后把新生成的xcshareddata目錄提交上去。
.xccheckout我沒(méi)有碰到過(guò)這個(gè)文件。 這個(gè)文件在xcworkspace目錄里。.xccheckout文件包含了關(guān)于workspace中用到了什么repo的數(shù)據(jù)。根據(jù)說(shuō)明,它的規(guī)則和xcworkspace差不多:如果沒(méi)用過(guò),或者只是簡(jiǎn)單使用workspace,不需要同步;如果深入使用workspace,則需要同步。
總結(jié)1:.xcodeproj里的文件大體上有3種:
項(xiàng)目文件
單個(gè)用戶的文件
跟workspace相關(guān)的文件
項(xiàng)目文件,需要同步;單個(gè)用戶的文件,不需要同步;跟workspace相關(guān)的文件,視有沒(méi)有深入使用workspace而定。
總結(jié)2:
需要同步的文件:
project.pbxproj文件
xcsharedata目錄
不需要同步的文件
user.pbxuser文件
user.mode1v3/user.mode2v3文件
xcuserdata目錄
視workspace情況而定的文件:
.xcworkspace目錄
.xccheckout文件