зависает командная строка xcodebuild


На моем osx висит следующая команда:

xcodebuild -scheme myscheme clean archive -archivePath /tmp  

Эта команда выдает две выходные строки, а затем зависает:

User defaults from command line:
    IDEArchivePathOverride = /tmp
Теперь этот проект не имеет рабочей области, созданной из командной строки cordova (cordova build ios). Единственный способ обойти это-открыть xcode и закрыть его. это создает рабочую область, а затем вышеприведенная команда выполняется успешно. Испытывал ли кто-нибудь нечто подобное и знал ли выход из этого? Любой способ создать это рабочее пространство из командная строка?
4 5

4 ответа:

У меня была та же проблема, и единственным способом ее решения было открыть проект из командной строки, подождать и закрыть его снова через определенное время.

open "My Project.xcodeproj"
sleep 10
killall Xcode
xcodebuild -scheme "My Project" clean archive "build/MyProject"

Не очень приятно, но работает на меня.

Попробуйте сделать схему "общей".

Это можно сделать, перейдя в раздел ' Управление схемами...- и поставил галочку "общий доступ".

Apple документирует этот процесс здесь: https://developer.apple.com/library/ios/recipes/xcode_help-scheme_editor/Articles/SchemeShare.html

Если у вас уже есть или вы хотите сделать Ruby доступным для вашей системы сборки, вы можете Использовать это решение.

Установите 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, если вы это делаете,я просто позвонил ruby прямо из своей сборки Jenkins.

Это работает, потому что когда вы воссоздавая файлы proj, вы уничтожаете схемы, поэтому вам нужно их воссоздать.

Я считаю, что xcodebuild зависает, потому что некоторые данные отсутствуют в проекте. Вы можете сделать шаблон для того, как эти данные выглядят, и использовать крюк, чтобы заполнить его, если это необходимо.

  1. cordova добавить платформу ios
  2. Кордова билд ...
  3. открытые платформы / ios / что угодно.xcodeproj в xcode
  4. создать xcuserdata_template
  5. платформы cp-R / ios / что угодно.xcodeproj/xcuserdata xcuserdata_template /
  6. Замените уникальный идентификатор в этом шаблоне на XXXXXXXXXX
  7. обновите свой крюк, который запускает 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 ...