你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> xUnique

xUnique

編輯:IOS開發基礎

在開發多人合作項目的時候,大家是否遇到過其他成員加入或刪除一些新的文件,然後導致 project 文件沖突,不得不大費周章的處理問題的時候呢。 xUnique 這個第三方庫幫助我們解決了這個問題。

問題背景

這次咱們來聊聊這個話題。 大家在合作開發一個項目的時候,肯定會遇到這樣一個情況。 團隊的其他成員給項目中添加了一些文件。 XCode 會重新生成 project 文件, 隨後他們把更改提交到版本控制系統中。 你更新他們的代碼後,經常會碰到一個叫做 project 文件沖突的問題, 這時候你的項目就無法在 XCode 中正常打開了, 非常頭疼。

其實這是 XCode 項目文件生成機制對於版本控制系統的一個缺陷。 我們可以打開 project 文件,看看它裡面的結構:

1.png

對於每個文件的引用, XCode 都會生成一長串 16 進制數, 每一個代表引用的文件。 但問題是, XCode 的這個生成算法在不同設備上對同一個文件生成的這個串是有差異的。 這就導致我們平時遇到的這個問題了。 另外一台設備在提交版本控制的時候, project 文件是基於那台設備來生成的。 而我們更新代碼後, 和我們自己設備上的 project 文件一對比, 自然會發生沖突了。 這也是很多 iOS 開發者面臨的一個問題。

xUnique

xUnique 的出現,正是要幫助我們解決這個問題。 xUnique 其實就是一個 Python 腳本, 會對 XCode 生成的 project 文件做一些處理。

簡單來說就是這樣, 首先 xUnique 將 project 文件轉換為 JSON 格式, 然後將文件的引用改為通過路徑形式引用。 隨後, xUnique 會對每個文件的路徑進行 MD5 加密, 並用他們替換原來 XCode 生成的那些 16進制 UUID。 因為是采用文件路徑加上 MD5 的方式, 就可以保證在不同設備上生成的內容是一樣的了。

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

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

$ pip install xUnique

安裝成功後,打開一個新的命令行窗口, 輸入 xunique 就可以看到這樣的內容了:

2.png

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

$ xunique xxx.xcodeproj/project.pbxproj

運行之後你會看到類似這樣的輸出:

Uniquify and SortIgnore uniquify, no changes made to "/Users/Documents/samples/xUniqueTest/xUniqueTest.xcodeproj/project.pbxprojIgnore sort, no changes made to "/Users/Documents/samples/xUniqueTest/xUniqueTest.xcodeproj/project.pbxprojUniquify and Sort done

這樣就完成了 project 文件的處理。 當然,我們可能會在任意時候都會添加或修改項目的文件結構。 所以 xunique 命令最好能夠自動化的運行。 否則如果我們哪次不小心在提交到版本庫之前忘了運行它了。 還是造成文件沖突。

git hook

讓 project 自動化的方式很多, 假如你使用的是 git 版本庫,那麼可以直接創建一個 git hook, 在每次提交版本的時候自動運行一下 xunique, 執行這個命令即可:

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

你需要把 project 文件的路徑修改成你自己的。 然後在每次提交 git 的時候, xunique 就會自動運行了。

結尾

xUnique 不失為解決 XCode 項目文件沖突的一個折中方案。 但前提是, 你要保證團隊成員都正確配置了 xUnique 以及它的自動運行機制。 如果因為沒有配置完善,某個設備不小心提交了未經處理的 project 文件, 還是會引起沖突。 當然,如果做好正確配置, xUnique 能很大的提升團隊的整體效率。

如果你覺得這篇文章有幫助,還可以關注微信公眾號 swift-cafe,會有更多我的原創內容分享給你

文章轉自 SwiftCafe

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved