一劳永逸解决Xcode项目文件合并“梦魇”

作者:SeganW

链接:https://zhuanlan.zhihu.com/p/19814677

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

xUnique

最近版本更新频繁,最新功能以README.rst为准

=======================

https://raw.github.com/truebit/xUnique/gif/xUnique_Build_Post_Action.gif

打开上面图片看gif动画

想必使用Xcode做ObjectiveC开发的同学都有这种经历:pull同事的代码后准备提交自己代码的时候,发现project.pbxproj文件冲突。嘟囔一声”我擦“,开始不情愿的文件人肉搜索>>>,<<<以及===并进行人肉替换。如果是一个很久没上传代码的同事刚刚提交过的话,你估计会找TA“聊聊人生”……

现在,有了xUnique,妈妈再也不用担心ObjectiveC的合并问题啦~

以下内容基本翻译自我写的README.rst

xUnique都做了什么

替换所有UUID为项目内永久不变的MD5 digest

删除所有多余的节点(一般是合并的时候疏忽导致的)

用Python重写了我修改过的的sort-Xcode-project-file的排序功能,修改版相较原版增加了以下功能:

对PBXFileReference和PBXBuildFile区块的排序

使用脚本后如果内容没有变化不会生成新文件,避免一次不必要的commit

xUnique安装

$ pip install xUnique

xUnique使用方法

把xUnique.py放到你的工程里面去,最好加到Git/SVN中

在命令行中把此脚本变成pre-commit的钩子,以Git为例;SVN不熟,自行搜索:

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

把pre-push的钩子变成可执行权限:

$ chmod555.git/hooks/pre-commit

在项目所有分支执行此脚本,两种方法:

通过触发钩子:因为是pre-commit,所以随便修改点东西,commit后,执行push操作之前会执行该脚本。(不使用pre-commit是为了怕污染commit,很方便的回滚)

直接执行脚本:

python2 -mxUnique path/to/MyProject.xcodeproj

说明

目前支持以下经过测试的类型,其他子类型应该也支持,但是没有试验过,不敢保证:

PBXProject

XCConfigurationList

PBXNativeTarget

PBXTargetDependency

PBXContainerItemProxy

XCBuildConfiguration

PBXSourcesBuildPhase

PBXFrameworksBuildPhase

PBXResourcesBuildPhase

PBXFrameworksBuildPhase

PBXCopyFilesBuildPhase

PBXHeadersBuildPhase

PBXShellScriptBuildPhase

PBXBuildRule

PBXBuildFile

PBXReferenceProxy

PBXFileReference

PBXGroup

PBXVariantGroup

项目中有一个人用了xUnique,所有人都要用,不然就乱套了。你懂的。

因为我就只试验过一个普通工程文件和一个带有一个子工程的工程文件,其他类型都没试过,所有可能有问题。请大家发Issue或者提交Pull Request

你可能感兴趣的:(一劳永逸解决Xcode项目文件合并“梦魇”)