通过 AppleScript 构建并运行一个 xcode 项目

Posted

技术标签:

【中文标题】通过 AppleScript 构建并运行一个 xcode 项目【英文标题】:Build and Run an xcode project via AppleScript 【发布时间】:2009-10-03 17:13:14 【问题描述】:

我正在尝试构建一个 xcode 项目并通过 AppleScript 通过 iPhone 模拟器运行它。我知道 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。

【问题讨论】:

您可能会提到您正在使用的 Xcode 版本。我在 Xcode 3.2 中通过 AppleScript 设置活动 SDK 没有问题。 我也在使用 xcode 3.2,但它不起作用(除非我将 iphonesimulator3.1 设置为 xcode 中的基础 SDK) 这些类型的 AppleScripts 似乎不再适用于 Xcode 4。 【参考方案1】:

这是诀窍...您必须设置 SDKROOT 构建设置。这是我用来在当前层次结构中查找 xcode 项目、构建它并通过 xcode 运行它的 zsh 脚本。

#!/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

【讨论】:

如果可以的话,我会更多地投票给你,因为“疯狂”的评论。 这并不疯狂,它只是在原始 Mac OS 中指定路径的方式(AppleScript 的起源)。请注意,与 Unix 相反,相对路径用 前导冒号指定(绝对路径不带一个),父路径由空段指定(例如、“:: src" == "../src").【参考方案2】:

另一个需要考虑的选项是使用 Applescript 启动一个 shell 脚本来执行 xcodebuild 程序。 xcodebuild 允许您指定特定目标、配置、sdk 等内容。当我必须通过 SSH 连接到构建服务器并重新构建项目时,我一直使用它。

【讨论】:

我已经做到了,但它并没有解决在 iPhone 模拟器中运行应用程序的问题。似乎只有 xcode 能够做到这一点。【参考方案3】:

iphonesim 项目为您提供了一个用于 iPhone 模拟器的命令行启动器。

【讨论】:

【参考方案4】:

如果set active SDK 命令未按预期工作,解决方法是创建另一个名为“Debug-Simulator”的构建配置(在 Xcode 中的项目设置中),并将新配置中的基础 SDK 设置为iphone模拟器3.0。这将允许您通过选择构建配置(如果适用于 AppleScript)来选择 SDK。

【讨论】:

以上是关于通过 AppleScript 构建并运行一个 xcode 项目的主要内容,如果未能解决你的问题,请参考以下文章

Applescript 在 Mavericks 上通过 ssh 启动时失败并出现错误 (-600)

使用高CPU时通知。通过AppleScript或Automator?

从 Java 运行 AppleScript 时出现“不允许辅助访问”错误

Applescript 在 iTunes 中超时

通过applescript设置鼠标跟踪速度

应用程序无法正确启动 (0xc000007b)