我的问题
最近在做一个新的sdk项目, 需要最终打包.a静态库文件。写好了shell打包脚本之后,本地跑脚本打包一切ok,但是在jinkens服务器上创建项目自动打包,走到脚本里面执行下列命令的时候就卡住,一直不能往下走,导致最后编译失败。。。
xcodebuild -workspace $projectName.xcworkspace -scheme $projectLibName -configuration Release -sdk iphoneos -arch armv7 clean build TARGET_BUILD_DIR=$LibDir BUILT_PRODUCTS_DIR=$LibDir
一直也不报错,就是卡在那里不动,然后让我其他同事拉代码,本地执行脚本,也不能打包成功,如果他们先build一下静态库,再重新打包就ok。这就说明是Xcode的一些配置信息在我的电脑这里有,而他们那是没有的,进而确定了原因是出在一些环境配置上的,接着google一下xcodebuild -workspace相关的问题,发现这篇文章xcodebuild says does not contain scheme,研究了一下,就找到问题的所在,大喜!!!
大概是说在编译workspace的时候会到工程的xcshareddata/xcschemes目录下面去找,找到对应的scheme才可以正常编译,检查一下我自己的项目
- 没有share需要编译的静态库scheme
- 在.gitignore文件忽略了*.xcshareddata/文件夹
就是这个原因,所以jinkens服务器和其他人的电脑,找不到这个scheme,所以就编译失败啦!
这里大致说一下xcshareddata文件夹:
项目一开始时,是没有“xcshareddata”文件夹的。当manage scheme 下的 “shared”复选框被选中,则会把 “xcuserdata”里相应的xcscheme文件移动到本目录的xcschemes文件夹下,这时才会创建此文件夹。
多人开发时,为了支持共享xcscheme,一般会勾选“shared”,这样,相应的“*.xcscheme”就会被移动到该目录下。
所以在多人开发时,应该把此目录放到git里去同步,同时注意,被共享的“*.xcscheme”也会影响到队友,要慎重修改。注意:删除此目录后,重新打开项目也不会重建的,删之要慎重~
如果删除此目录,而“xcuserdata”文件夹下也没有xcscheme文件,那么你打开项目,就是无法编译了;
如果出现了这样的情况,那么你把”xcuserdata”文件夹给删除掉,重启项目,Xcode会重新创建xcuserdata文件夹和默认的xcscheme文件。