xcodebuild 命令行挂起
xcodebuild command line hangs
以下命令挂在我的osx上:
xcodebuild -scheme myscheme clean archive -archivePath /tmp
此命令产生两行输出,然后挂起:
User defaults from command line:
IDEArchivePathOverride = /tmp
现在,这个项目没有生成工作区,因为它是从 cordova 命令行创建的 (cordova build ios
)。绕过它的唯一方法是打开 xcode 然后关闭它。这将生成一个工作区,然后上述命令成功。
有没有人经历过类似的事情并且知道解决办法?有什么方法可以从命令行生成该工作区?
我遇到了同样的问题,解决它的唯一方法是从命令行打开项目,等待,然后在一定时间后再次关闭它。
open "My Project.xcodeproj"
sleep 10
killall Xcode
xcodebuild -scheme "My Project" clean archive "build/MyProject"
不太好,但适合我。
尝试将方案设置为 'shared'。
这可以通过转到 'Manage Schemes...' 并选中 'Shared' 复选框来完成。
Apple 在此处记录了此过程:https://developer.apple.com/library/ios/recipes/xcode_help-scheme_editor/Articles/SchemeShare.html
如果您已经拥有或愿意为您的构建系统提供 Ruby,那么您可以 use this solution。
在您的构建系统上安装 xcodeproj gem
sudo gem install xcodeproj
然后将以下 ruby 脚本集成到您的项目中(重命名您的 xcodeproj 路径)。
#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("platforms/ios/schemedemo.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save
这篇文章解释了如何使它成为 cordova 挂钩的一部分,如果你这样做的话,我只是直接从我的 Jenkins 构建中调用 ruby。
这是可行的,因为当您重新创建项目文件时,您会破坏方案,因此您需要重新创建它们。
我认为 xcode构建挂起是因为项目中缺少一些数据。您可以为这些数据制作一个模板,并在必要时使用挂钩来填充它。
- cordova 添加平台 ios
- cordova 构建 ...
- 在 xcode
中打开 platforms/ios/Whatever.xcodeproj
- 创建xcuserdata_template
- cp -R platforms/ios/Whatever.xcodeproj/xcuserdata xcuserdata_template/
- 将该模板中的唯一 ID 替换为 XXXXXXXXXX
- 更新运行 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 ...
以下命令挂在我的osx上:
xcodebuild -scheme myscheme clean archive -archivePath /tmp
此命令产生两行输出,然后挂起:
User defaults from command line:
IDEArchivePathOverride = /tmp
现在,这个项目没有生成工作区,因为它是从 cordova 命令行创建的 (cordova build ios
)。绕过它的唯一方法是打开 xcode 然后关闭它。这将生成一个工作区,然后上述命令成功。
有没有人经历过类似的事情并且知道解决办法?有什么方法可以从命令行生成该工作区?
我遇到了同样的问题,解决它的唯一方法是从命令行打开项目,等待,然后在一定时间后再次关闭它。
open "My Project.xcodeproj"
sleep 10
killall Xcode
xcodebuild -scheme "My Project" clean archive "build/MyProject"
不太好,但适合我。
尝试将方案设置为 'shared'。
这可以通过转到 'Manage Schemes...' 并选中 'Shared' 复选框来完成。
Apple 在此处记录了此过程:https://developer.apple.com/library/ios/recipes/xcode_help-scheme_editor/Articles/SchemeShare.html
如果您已经拥有或愿意为您的构建系统提供 Ruby,那么您可以 use this solution。
在您的构建系统上安装 xcodeproj gem
sudo gem install xcodeproj
然后将以下 ruby 脚本集成到您的项目中(重命名您的 xcodeproj 路径)。
#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("platforms/ios/schemedemo.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save
这篇文章解释了如何使它成为 cordova 挂钩的一部分,如果你这样做的话,我只是直接从我的 Jenkins 构建中调用 ruby。
这是可行的,因为当您重新创建项目文件时,您会破坏方案,因此您需要重新创建它们。
我认为 xcode构建挂起是因为项目中缺少一些数据。您可以为这些数据制作一个模板,并在必要时使用挂钩来填充它。
- cordova 添加平台 ios
- cordova 构建 ...
- 在 xcode 中打开 platforms/ios/Whatever.xcodeproj
- 创建xcuserdata_template
- cp -R platforms/ios/Whatever.xcodeproj/xcuserdata xcuserdata_template/
- 将该模板中的唯一 ID 替换为 XXXXXXXXXX
- 更新运行 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 ...