2015-12-06 6 views
5

Die folgenden Befehl hängt an meinem osx:xcodebuild Kommandozeile hängt

xcodebuild -scheme myscheme clean archive -archivePath /tmp 

Mit dieser Befehl erhält man zwei Ausgangsleitungen und legt dann:

User defaults from command line: 
    IDEArchivePathOverride = /tmp 

Nun hat dieses Projekt einen Arbeitsbereich nicht generiert haben wie es von einer Cordova-Befehlszeile erstellt wurde (cordova build ios). Der einzige Weg ist es, xcode zu öffnen und zu schließen. Dies erzeugt einen Arbeitsbereich und dann ist der obige Befehl erfolgreich.

Hat jemand etwas ähnliches erlebt und einen Ausweg gefunden? Gibt es eine Möglichkeit, diesen Arbeitsbereich über die Befehlszeile zu generieren?

+0

Ist es mit CPU? – trojanfoe

+0

nein. hängt einfach. – Tal

Antwort

14

Ich hatte das gleiche Problem und die einzige Möglichkeit, es zu beheben, war das Projekt über die Befehlszeile zu öffnen, zu warten und nach einer bestimmten Zeit wieder zu schließen.

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

Nicht nett, aber funktioniert für mich.

+7

das ist bei weitem die hässlichste Problemumgehung, die ich jemals codiert habe :) – Tal

+0

Ich könnte nicht mehr zustimmen! – Anytoe

+0

Wirklich schrecklich, aber nur das funktioniert so weit. :(Hinweis: Auch für Cordova Builds müssen Sie ENABLE_BITCODE = NO zur Konfiguration hinzufügen –

9

Versuchen Sie, das Schema auf 'shared' zu setzen.

Dies kann getan werden, indem Sie zu 'Schemata verwalten ...' gehen und das Kontrollkästchen 'Freigegeben' markieren.

Apple-Dokumente dieser Prozess hier: https://developer.apple.com/library/ios/recipes/xcode_help-scheme_editor/Articles/SchemeShare.html

+0

Ich habe es gerade ausprobiert und es funktioniert, das Problem ist, dass wenn Sie in einem cordova/ionischen Kontext arbeiten, der xcodeproj gelöscht werden kann wiederhergestellt (ionische Zustand wiederherstellen) und die vorherige Konfiguration ist verloren. –

+0

Auch bestätigt, das funktioniert. Die Antwort von @anytoe hat nicht für mich funktioniert. –

+0

Nizza finden, aber immer noch manuelle Arbeit für jedes Projekt. So könnte man auch dann öffne es in Xcode manuell und dann ist es sortiert. Aber sobald du die Plattform iOS entfernst und es wieder hinzufügst, musst du diesen Schritt wiederholen. – Anytoe

2

Wenn Sie bereits haben, oder sind bereit zu machen, Ruby Ihr Build-System verfügbar ist, dann könnten Sie use this solution.

Installieren Sie das xcodeproj Juwel auf dem Build-System

sudo gem install xcodeproj 

und dann den folgenden Ruby-Skript in Ihr Projekt integrieren (Ihre xcodeproj Pfad umbenennen).

#!/usr/bin/env ruby 
require 'xcodeproj' 
xcproj = Xcodeproj::Project.open("platforms/ios/schemedemo.xcodeproj") 
xcproj.recreate_user_schemes 
xcproj.save 

Der Artikel erklärt, wie es ein Teil eines cordova Haken machen, wenn Sie das tun, habe ich einfach Rubin genannt direkt von meinem Jenkins bauen.

Das funktioniert, weil Sie die Schemas zerstören, wenn Sie die Proj-Dateien neu erstellen, also müssen Sie sie neu erstellen.

0

Ich glaube, xcodebuild hängt, weil einige Daten aus dem Projekt fehlen. Sie können eine Vorlage für das Aussehen dieser Daten erstellen und sie ggf. mit einem Hook füllen.

  1. cordova hinzufügen Plattform ios
  2. cordova build ...
  3. offene Plattformen/ios/Whatever.xcodeproj in Xcode
  4. xcuserdata_template
  5. cp -R Plattformen/ios/Was auch immer erstellen.xcodeproj/xcuserdata xcuserdata_template/
  6. ersetzen Sie die eindeutige ID in dieser Vorlage mit XXXXXXXXXX
  7. Update Ihr Haken, der xcodebuild läuft

Schritt 7 Beispiel:

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 ...