以下命令挂起在我的osx上:
xcodebuild -scheme myscheme clean archive -archivePath /tmp
此命令产生两个输出行,然后挂起:
User defaults from command line:
IDEArchivePathOverride = /tmp
现在,该项目没有生成工作空间,因为它是从cordova命令行(cordova build ios
)创建的。唯一的方法是打开xcode并关闭它。这会生成一个工作区,然后上面的命令会成功。
有没有人经历过类似的事情并知道如何解决这个问题?有没有办法从命令行生成该工作区?
答案 0 :(得分:15)
我遇到了同样的问题,修复它的唯一方法是从命令行打开项目,等待,并在一段时间后再次关闭它。
open "My Project.xcodeproj"
sleep 10
killall Xcode
xcodebuild -scheme "My Project" clean archive "build/MyProject"
不好,但适合我。
答案 1 :(得分:9)
尝试将方案设置为“共享”。
这可以通过转到“管理方案...”并选中“共享”复选框来完成。
Apple在此处记录了此过程:https://developer.apple.com/library/ios/recipes/xcode_help-scheme_editor/Articles/SchemeShare.html
答案 2 :(得分:2)
如果您已经拥有或者愿意为您的构建系统提供Ruby,那么您可以use this solution。
在构建系统上安装xcodeproj gem
SELECT CAST('6.19e+014' AS FLOAT)
然后将以下ruby脚本集成到您的项目中(重命名您的xcodeproj路径)。
sudo gem install xcodeproj
这篇文章解释了如何将它作为cordova钩子的一部分,如果你这样做的话,我只是直接从我的Jenkins构建中调用ruby。
这是有效的,因为当您重新创建proj文件时,会破坏这些方案,因此您需要重新创建它们。
答案 3 :(得分:0)
我相信xcodebuild会挂起,因为项目中缺少一些数据。您可以为此数据的外观制作模板,并在必要时使用钩子填充它。
第7步示例:
XCODE_PROJ=path/to/Whatever.xcodeproj
# get the mysterious id
ID=`grep "Whatever \*\/ = {" $XCODE_PROJ/project.pbxproj | \
grep -io "[-A-Z0-9]\{24\}"`
mkdir -p $XCODE_PROJ/xcuserdata
XCUSERDATAD=$XCODE_PROJ/xcuserdata/`whoami`.xcuserdatad
if [ ! -d "$XCUSERDATAD" ]; then
cp -R path/to/xcuserdata_template/username.xcuserdatad \
$XCUSERDATAD
find $XCUSERDATAD -type f -exec sed -i '' -e "s/XXXXXXXXXX/$ID/g" {} \;
fi
xcodebuild ...