2009-10-03 3 views
10

Я пытаюсь построить проект xcode и запустить его через iPhone Simulator через applescript. Я знаю xcodebuild, но он не позволяет запускать приложение в симуляторе. Я получил довольно близко с ниже сценария ...Создайте и запустите проект xcode через AppleScript

tell application "Xcode" 
    set targetProject to project of active project document 

    tell targetProject 
    set active build configuration type to build configuration type "Debug" 
    set active SDK to "iphonesimulator3.0" 
    end tell 

    if (build targetProject) is equal to "Build succeeded" then 
    launch targetProject 
    end if 
end tell 

... но команда сборки, кажется, не подчиняться активной SDK свойство , всегда по умолчанию настройки базы SDK проекта (например, iPhoneOS3.0 вместо iPhonesimulator3.0)

Есть ли способ сообщить команде build использовать конкретный SDK? Я использую xcode 3.2 на снежном барсе.

+0

Вы можете указать, какую версию Xcode вы используете. У меня не было проблем с настройкой активного SDK через AppleScript в Xcode 3.2. –

+0

Я также использую xcode 3.2, но он не работает (если я не установил iphonesimulator3.1 как базовый SDK в xcode) – probablyCorey

+0

Похоже, что эти типы AppleScripts больше не работают с Xcode 4. – ThomasW

ответ

12

Вот трюк ... вам нужно установить настройку сборки SDKROOT. Вот сценарий zsh, который я использую, чтобы найти проект xcode в текущей иерархии, построить его и запустить через xcode.

#!/bin/zsh 

BUILD_PATH=$(dirname $0) 

while [[ -z $BUILD_FILE && $BUILD_PATH != "/" ]]; do 
    BUILD_FILE=$(find $BUILD_PATH -name '*.xcodeproj' -maxdepth 1) 
    BUILD_PATH=$(dirname $BUILD_PATH) 
done 

if [[ -z $BUILD_FILE ]]; then 
    echo "Couldn't find an xcode project file in directory" 
    exit 1 
fi 

# Applescript likes's : instead of/(because it's insane) 
BUILD_FILE=${BUILD_FILE//\//:} 

# Find the latest Simulator SDK 
SIMULATOR_SDKS=(/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/*.sdk) 

SIMULATOR_SDK=${SIMULATOR_SDKS[-1]} 
SIMULATOR_SDK_STRING=$(basename ${(L)SIMULATOR_SDK%.[a-z]*}) 

if [[ -z $SIMULATOR_SDK ]]; then 
    echo "Couldn't find a simulator SDK" 
    exit 1 
fi 


osascript <<SCRIPT 
application "iPhone Simulator" quit 
application "iPhone Simulator" activate 

tell application "Xcode" 
    open "$BUILD_FILE" 
    set targetProject to project of active project document 

    tell targetProject 
     set active build configuration type to build configuration type "Debug" 
     set active SDK to "$SIMULATOR_SDK_STRING" 
     set value of build setting "SDKROOT" of build configuration "Debug" of active target to "$SIMULATOR_SDK" 

     if (build targetProject) is equal to "Build succeeded" then 
      launch targetProject 
     else 
      application "iPhone Simulator" quit 
     end if 
    end tell 
end tell 
SCRIPT 
+0

Я бы проголосовал за вас больше, если мог, из-за «безумного» комментария. – rein

+0

Это не безумие, это именно то, как были указаны пути в исходной Mac OS (откуда происходит AppleScript). Обратите внимание: напротив Unix относительные пути указываются _with_ ведущий двоеточие (абсолютные пути без одного), а родительские пути задаются пустым сегментом (_e.g._, ":: src" == "../src"). – fraveydank

1

Если команда set active SDK не работает должным образом, обходным решением будет создание другой конфигурации сборки с именем «Debug-Simulator» (в Xcode в настройках проекта) и для установки базового SDK в новой конфигурации на iphonesimulator3 +0,0. Это позволит вам выбрать SDK, выбрав конфигурацию сборки (если это работает в AppleScript).

3

Другим вариантом является использование Applescript для запуска сценария оболочки, который выполняет программу xcodebuild. xcodebuild позволяет указывать такие объекты, как конкретная цель, конфигурация, sdk и т. Д. Я использую это все время, когда у меня есть SSH на сервер сборки и перестраивает проект.

+0

Я сделал это, но это не решает проблему запуска приложения в iPhone Simulator. Кажется, только xcode способен это сделать. – probablyCorey

2

iphonesim проект дает вам командную строку запуск для симулятора iPhone.

Смежные вопросы