Создание и запуск проекта xcode с помощью AppleScript

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

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 на снежном барсе.

Ответ 1

Вот трюк... вам нужно установить настройку сборки SDKROOT. Вот zsh script Я использую, чтобы найти проект 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 : instead of / (because it 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

Ответ 2

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

Ответ 3

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

Ответ 4

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