2009-10-03 11 views
10

xcodeプロジェクトをビルドして、AppleScriptでiPhone Simulatorで実行しようとしています。私はxcodebuildを認識していますが、あなたはシミュレータでアプリを実行させることはできません。私は...AppleScriptでxcodeプロジェクトをビルドして実行する

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プロパティに従うようには見えません

特定のSDKを使用するようにビルドコマンドに指示する方法はありますか?たとえば、iPhoneOS3.0の代わりにiPhonesimulator3.0を使用します。私はSnow Leopardでxcode 3.2を使用しています。

+0

使用しているXcodeのバージョンが記載されている場合があります。 Xcode 3.2でAppleScript経由でアクティブなSDKを設定するのに問題はありませんでした。 –

+0

私はまた、Xcodeの3.2を使用していますが、(私はXcodeの内のベースSDKをするiphonesimulator3.1を設定しない限り)それは動作しません – probablyCorey

+0

私がやったのAppleScriptのこれらのタイプは、もはやXcodeの4 – ThomasW

答えて

12

ここではトリックです... 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 
+0

"狂った"コメントのせいでできたら、私はもっとあなたに投票します。 – rein

+0

これは、元気なMac OS(AppleScriptの起源)でパスがどのように指定されたかということだけではありません。 Unixとは反対に、相対パスは先頭のコロン(絶対パスなし)で指定され、親パスは空のセグメント(_e.g._、 ":: src" == "../src" )。 – fraveydank

1

set active SDKコマンドが期待通りに機能しない場合は、「Debug-Simulator」(プロジェクト設定のXcode)という別のビルド構成を作成し、新しい構成のベースSDKをiphonesimulator3に設定する.0。これにより、ビルド設定(AppleScriptで動作する場合)を選択してSDKを選択することができます。

3

もう1つの方法として、AppleScriptを使用してxcodebuildプログラムを実行するシェルスクリプトを起動する方法があります。 xcodebuildは、特定のターゲット、設定、sdkなどのようなものを指定することができます。ビルドサーバーにSSHしてプロジェクトを再構築する必要があるときは、これを常に使用します。

+0

では動作しないことが表示されますそれはiPhone Simulatorでアプリケーションを実行する問題を解決しません。それはxcodeだけがそれを行うことができるようです。 – probablyCorey

2

iphonesimプロジェクトは、あなたのiPhoneシミュレータ用のコマンドラインランチャーを与えます。

関連する問題