xUnique – 擺脫 XCode 的 project 文件沖突

轉(zhuǎn)自:http://www.ouvps.com/?p=1597

在開發(fā)多人合作項(xiàng)目的時(shí)候,大家是否遇到過其他成員加入或刪除一些新的文件,然后導(dǎo)致 project 文件沖突,不得不大費(fèi)周章的處理問題的時(shí)候呢。 xUnique 這個(gè)第三方庫幫助我們解決了這個(gè)問題。

問題背景

這次咱們來聊聊這個(gè)話題。 大家在合作開發(fā)一個(gè)項(xiàng)目的時(shí)候,肯定會(huì)遇到這樣一個(gè)情況。 團(tuán)隊(duì)的其他成員給項(xiàng)目中添加了一些文件。 XCode 會(huì)重新生成 project 文件, 隨后他們把更改提交到版本控制系統(tǒng)中。 你更新他們的代碼后,經(jīng)常會(huì)碰到一個(gè)叫做 project 文件沖突的問題, 這時(shí)候你的項(xiàng)目就無法在 XCode 中正常打開了, 非常頭疼。

其實(shí)這是 XCode 項(xiàng)目文件生成機(jī)制對(duì)于版本控制系統(tǒng)的一個(gè)缺陷。 我們可以打開 project 文件,看看它里面的結(jié)構(gòu):

對(duì)于每個(gè)文件的引用, XCode 都會(huì)生成一長(zhǎng)串 16 進(jìn)制數(shù), 每一個(gè)代表引用的文件。 但問題是, XCode 的這個(gè)生成算法在不同設(shè)備上對(duì)同一個(gè)文件生成的這個(gè)串是有差異的。 這就導(dǎo)致我們平時(shí)遇到的這個(gè)問題了。 另外一臺(tái)設(shè)備在提交版本控制的時(shí)候, project 文件是基于那臺(tái)設(shè)備來生成的。 而我們更新代碼后, 和我們自己設(shè)備上的 project 文件一對(duì)比, 自然會(huì)發(fā)生沖突了。 這也是很多 iOS 開發(fā)者面臨的一個(gè)問題。

xUnique

xUnique 的出現(xiàn),正是要幫助我們解決這個(gè)問題。 xUnique 其實(shí)就是一個(gè) Python 腳本, 會(huì)對(duì) XCode 生成的 project 文件做一些處理。

簡(jiǎn)單來說就是這樣, 首先 xUnique 將 project 文件轉(zhuǎn)換為 JSON 格式, 然后將文件的引用改為通過路徑形式引用。 隨后, xUnique 會(huì)對(duì)每個(gè)文件的路徑進(jìn)行 MD5 加密, 并用他們替換原來 XCode 生成的那些 16進(jìn)制 UUID。 因?yàn)槭遣捎梦募窂郊由?MD5 的方式, 就可以保證在不同設(shè)備上生成的內(nèi)容是一樣的了。

以上就是 xUnique 的基本原理了。 下面咱們來看看如何使用。

首先通過 Python 自帶的 pip 命令安裝 xUnique:

$ pip install xUnique

安裝成功后,打開一個(gè)新的命令行窗口, 輸入 xunique 就可以看到這樣的內(nèi)容了:

使用 xunique 命令加上你的 project 文件的路徑就可以進(jìn)行處理操作了:

$ xunique xxx.xcodeproj/project.pbxproj

運(yùn)行之后你會(huì)看到類似這樣的輸出:

Uniquify and Sort

Ignore uniquify, no changes made to "/Users/Documents/samples/xUniqueTest/xUniqueTest.xcodeproj/project.pbxproj

Ignore sort, no changes made to "/Users/Documents/samples/xUniqueTest/xUniqueTest.xcodeproj/project.pbxproj

Uniquify and Sort done

這樣就完成了 project 文件的處理。 當(dāng)然,我們可能會(huì)在任意時(shí)候都會(huì)添加或修改項(xiàng)目的文件結(jié)構(gòu)。 所以 xunique 命令最好能夠自動(dòng)化的運(yùn)行。 否則如果我們哪次不小心在提交到版本庫之前忘了運(yùn)行它了。 還是造成文件沖突。

git hook

讓 project 自動(dòng)化的方式很多, 假如你使用的是 git 版本庫,那么可以直接創(chuàng)建一個(gè) git hook, 在每次提交版本的時(shí)候自動(dòng)運(yùn)行一下 xunique, 執(zhí)行這個(gè)命令即可:

$ { echo '#!/bin/sh'; echo 'xunique path/to/MyProject.xcodeproj'; } > .git/hooks/pre-commit

你需要把 project 文件的路徑修改成你自己的。 然后在每次提交 git 的時(shí)候, xunique 就會(huì)自動(dòng)運(yùn)行了。

結(jié)尾

xUnique 不失為解決 XCode 項(xiàng)目文件沖突的一個(gè)折中方案。 但前提是, 你要保證團(tuán)隊(duì)成員都正確配置了 xUnique 以及它的自動(dòng)運(yùn)行機(jī)制。 如果因?yàn)闆]有配置完善,某個(gè)設(shè)備不小心提交了未經(jīng)處理的 project 文件, 還是會(huì)引起沖突。 當(dāng)然,如果做好正確配置, xUnique 能很大的提升團(tuán)隊(duì)的整體效率。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容