xcodebuild命令行挂起

时间:2015-12-06 21:30:13

标签: xcode cordova xcodebuild

以下命令挂起在我的osx上:

xcodebuild -scheme myscheme clean archive -archivePath /tmp  

此命令产生两个输出行,然后挂起:

User defaults from command line:
    IDEArchivePathOverride = /tmp

现在,该项目没有生成工作空间,因为它是从cordova命令行(cordova build ios)创建的。唯一的方法是打开xcode并关闭它。这会生成一个工作区,然后上面的命令会成功。

有没有人经历过类似的事情并知道如何解决这个问题?有没有办法从命令行生成该工作区?

4 个答案:

答案 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会挂起,因为项目中缺少一些数据。您可以为此数据的外观制作模板,并在必要时使用钩子填充它。

  1. cordova add platform ios
  2. cordova build ...
  3. 在xcode中打开平台/ ios / Whatever.xcodeproj
  4. 创建xcuserdata_template
  5. cp -R platforms / ios / Whatever.xcodeproj / xcuserdata xcuserdata_template /
  6. 使用XXXXXXXXXX
  7. 替换该模板中的唯一ID
  8. 更新运行xcodebuild的挂钩
  9. 第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 ...