.xcodeproj目录中各文件作用及SVN/Git同步

在iOS多人协同开发时,一般会使用版本管理工具,比如SVN/Git。

经常的,在提交修改的时候,除了我们自己主动修改的.h、.m和资源文件之外,还会出现一些莫名其妙的文件,在.xcodeproj里面,如下图:

.xcodeproj是项目文件,包含项目配置文件,这是很多人都知道的。然而,.xcodeproj里面的各个文件都有什么用呢?提交版本时,要不要提交这些文件/目录?下面总结一下。

一个xcodeproj文件,其实是一个目录,它的格式大体上是这样的:

有的文件,比如user.mode1v3,在没有多个用户操作项目的时候,是没有的。Apple并没有提供.xcodeproj文件的文档,而且它也没有准备提供,更坑爹的是,xcodeproj的格式、内容都是随时可变的,比如一个Xcode版本上来,可能其目录就会变化,而没有任何通知。这可苦了那些为.xcodeproj开发每三方库的同学,不仅要一点一点摸索各个文件的内容,修改方法,还要忍受Apple没有任何通知地修改格式。Stackoverflow中这位就在抱怨苹果开发人员的傲慢:http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects/12021580#12021580

闲话少说,下面进入正题:各个文件/目录的作用,以及要不要提交更新。

  1. project.pbxproj文件

    这个文件包含了所有此项目build需要的元数据,setting、file reference、configuration、targets…也就是说,这个文件代表的就是这个project。

    因此,在修改了这个文件之后,需要提交上去。

  2. project.xcworkspace目录

    这个文件比较特殊。

    首先要了解的是workspace和project的概念。project应该比较清楚,那workspace是什么呢?workspace是一种Xcode documentation,可以将多个project和其它文件放到一起,这样可以work on them together。一个project也可以属于多个workspace。所以简单来讲,workspace里面就是一个或多个projects的reference,放在一起,有时候比较好工作。

    这样的话,如果项目里面根本就没有workspace的概念,或者只有一个workspace+一个project,这个workspace并不会有什么变动,那这个文件就不需要提交同步。如果project很依赖workspace,没有workspace就运行不了,活不下去了,这时候这个文件肯定是要同步的。

  3. user.pbxuser文件

    Xcode项目为每一个使用这个项目的用户创建一个user.pbxuser文件,存储了此用户对项目的偏好设置,如Xcode的位置和大小、文件书签等。可以看到这个文件是针对某个用户的,可以说是私人性质的,跟整个项目没有太大关系,所以一般不需要同步。

  4. user.mode1v3和user.mode2v3文件

    这个也是用户相关的文件,和user.pbxuser差不多,存储某用户特定的项目设置,比如Xcode中window的状态和结构,断点等等。

    因此也不需要同步。

  5. xcuserdata目录/xcshareddata目录:

    大体上来说,和上面两种一样,也是用户相关的文件,包含user state,folders的状态,最后打开的文件等。因此一般来说是不需要同步的。

    例外是,这个目录里也包含了scheme相关的内容。如果项目里需要同步特定的scheme,这时候,需要在Edit Scheme里,勾选Share框,然后把新生成的xcshareddata目录提交上去。

  6. .xccheckout

    我没有碰到过这个文件。

    .xccheckout文件包含了关于workspace中用到了什么repo的数据。

    根据说明,它的规则和xcworkspace差不多:如果没用过,或者只是简单使用workspace,不需要同步;如果深入使用workspace,则需要同步。

总结1:

.xcodeproj里的文件大体上有3种:

  • 项目文件
  • 单个用户的文件
  • 跟workspace相关的文件

项目文件,需要同步;

单个用户的文件,不需要同步;

跟workspace相关的文件,视有没有深入使用workspace而定。

总结2:

  1. 需要同步的文件:

    • project.pbxproj文件
    • xcsharedata目录
  2. 不需要同步的文件
    • user.pbxuser文件
    • user.mode1v3/user.mode2v3文件
    • xcuserdata目录
  3. 视workspace情况而定的文件:
    • .xcworkspace目录
    • .xccheckout文件

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-29 03:38:51

.xcodeproj目录中各文件作用及SVN/Git同步的相关文章

.xcodeproj目录中各文件

转自:http://blog.csdn.net/lixing333/article/details/47700687 在iOS多人协同开发时,一般会使用版本管理工具,比如SVN/Git. 经常的,在提交修改的时候,除了我们自己主动修改的.h..m和资源文件之外,还会出现一些莫名其妙的文件,在.xcodeproj里面,如下图: .xcodeproj是项目文件,包含项目配置文件,这是很多人都知道的.然而,.xcodeproj里面的各个文件都有什么用呢?提交版本时,要不要提交这些文件/目录?下面总结一

遍历目录中所有文件并统计信息

遍历目录中所有文件,并且统计文件类型. #!/bin/bash #filename: filestat.sh #set -x if [ $# -ne 1 ]; then     echo $0 basepath;    echo fi path=$1 declare -A statarray; while read line; do   ftype=`file -b "$line"`   let statarray["$ftype"]++; done< <

File类之在指定目录中查找文件

1 package IoDemo; 2 3 import java.io.File; 4 5 /** 6 * @Title:FileDemo2 7 * @Description:在指定的目录中查找文件 8 * @author Crazy-ZJ 9 * @data 2017年9月21日下午5:45:24 10 * @book 疯狂java讲义(第三版): 11 */ 12 public class FileDemo2 { 13 public static void main(String[] ar

android 打开 res raw目录 中 数据库文件

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 安卓不能直接打开 res raw 中的 数据库 文件. 通过 资源 获取资源 方法 , 然后在通过 打开资产资源方法 获得 res raw中的  输入流  对象, 然后将 输入流对象 中的数据 写入 其他目录中的相应文件中. 然后 通过 sqlite数据库的 打开或者创建数据库方法  来打开任意目录中的 sqlite

Java非递归的方式获取目录中所有文件(包括目录)

零.思路解析 对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历. 一.代码 /** * 非递归的方式获取目录中的所有文件<br> * 此方法获取的路径未按照目录->文件方式排列 * * @param dirPath 目录路径 * @return 指定目录下所有文件和目录的集合 */ public static List<File> listAllFile(String dirPat

VMware虚拟机文件夹中各文件作用详解

虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟机所创建的那个目录中. 这里列出了这些关键文件及其扩展名. 在以下说明例子中,<vmname>表示创建的虚拟机名字. -------------------------------------------------------------------- .log文件 文件类型说明:文本文件 <vmname>.log or v

Git 忽略某个目录中的文件,同时保留这个目录

类似的一个问题是项目根目录下可能有 logs 一类的目录, 我们希望他人把仓库 clone 下来的时候能够已经携带了这个目录, 但又不希望让这个目录中的日志文件进版本库. 之前看到一些项目用了一种比较 ugly 的做法: 在 logs 下建立一个 .gitkeep 空文件(git 无法版本控制没有任何文件的空目录), 然后再在项目根目录 .gitignore 中写入一行 logs/* 其实完全没有这样的必要,我们可以直接在 logs 里面写一个 .gitignore 文件,内容如下: * !.g

如何删除文件夹中的文件?--【SVN系列集锦】

背景: 某年某月某日,菜鸟小美,向服务器SVN里面上传文件,上传了之后发现没有命名好,于是改名了重新上传,结果就重复了.为了删除,她开始了不懈的努力~ 请问: SVN服务端的文件夹是可以删除的,那么文件夹中的文件如何删除呢? 经过的度娘的帮助,很容易找到了解决方案,菜鸟小美总结如下: 1)右键SVN客户端文件 .Net新生入学——选择TortoiseSVN——选择Delete,即可删除.不过仅仅这样是不足够的. 2)提交改动过后的整个文件夹,这样就ok啦! 感受: 如果不去尝试,永远都停留在半山

对目录中的文件按时间进行排序

目前有一个项目,需要对目录下的文件进行排序,并按照时间进行排列. 1. 通过ImageFilter对xls文件进行过滤 ImageFilter 类对象的任务就是提供一个accept( )的方法.回调能提高程序的灵活性. FilenameFilter filter = new FilenameFilter() {            public boolean accept(File dir, String filename) {                    return filen