Сборка и запуск проекта xcode через AppleScript - PullRequest
10 голосов
/ 03 октября 2009

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

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

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

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

Ответы [ 4 ]

12 голосов
/ 05 октября 2009

Вот хитрость ... вы должны установить настройку сборки 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
3 голосов
/ 04 октября 2009

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

2 голосов
/ 06 февраля 2012

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

1 голос
/ 03 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...