34 Stimmen

Wie automatisiert man die Erstellung neuer Xcode-Ziele aus Applescript/Automator/Shell Script

Ich arbeite derzeit an einer Möglichkeit, den Prozess des Hinzufügens neuer Ziele zu meinen Xcode-Projekten zu automatisieren. Ein Ziel muss zu mehreren Xcode-Projekten hinzugefügt werden, und jedes Ziel in den verschiedenen Projekten benötigt die gleichen Quelldateien, um hinzugefügt zu werden, die gleichen Gruppen, um die Quelldateien im Xcode-Projekt zu speichern, und die gleichen Build-Einstellungen. Dies manuell zu tun kann eine Weile dauern und ist sehr anfällig für menschliche Fehler, und ich habe diese Aufgabe ziemlich oft zu tun. Ich habe bereits ein Skript geschrieben, um neue Quelldateien zu erzeugen, sie in Systemordner zu kopieren, Quelldateien mit neuen Informationen zu bearbeiten usw., aber jetzt muss ich den Xcode-Teil automatisieren.

Das bringt auf den Punkt, was ich mit meiner Automatisierung erreichen möchte:

Öffnen Sie ein Xcode-Projekt unter /this/path/project.xcodeproj

Duplizieren Sie ein bestehendes Ziel und benennen Sie es um

Bearbeiten Sie die Build-Einstellungen des neuen Ziels

Fügen Sie dem Abschnitt "Quelle und Ressourcen" eine Gruppe hinzu und benennen Sie sie dann um

Fügen Sie die Quelldateien zu den Gruppen hinzu, und fügen Sie die Datei zum neuen Ziel hinzu

Xcode schließen

Im Idealfall möchte ich, dass dies von meinem Bourne-Shell-Skript aus läuft, ich weiß, dass man Automator-Workflows von dort aus starten kann. Was ist der beste Ansatz, um dies zu erreichen?

2voto

Dyno Fu Punkte 8309

Lassen Sie mich mit diesem Skript (für Xcode 4.2.1) beginnen,

  • Öffnen Sie ein XCode-Projekt unter /this/path/project.xcodeproj (fertig)
  • Ein bestehendes Ziel duplizieren und umbenennen (nicht implementiert)
  • Bearbeiten Sie die Build-Einstellungen des neuen Ziels (fertig)
  • Fügen Sie eine Gruppe zum Abschnitt Quelle und Ressourcen hinzu und benennen Sie sie um (fertig)
  • Hinzufügen von Quelldateien zu den Gruppen und Hinzufügen der Datei zu dem neuen Ziel (teilweise)
  • XCode schließen (fertig)

!/usr/bin/osascript

# Reference: AppleScript Editor -> File -> Open Directory ... -> Xcode 4.2.1

# http://vgable.com/blog/2009/04/24/how-to-check-if-an-application-is-running-with-applescript/
on ApplicationIsRunning(appName)
    tell application "System Events" to set appNameIsRunning to exists (processes where name is appName)
    return appNameIsRunning
end ApplicationIsRunning

if not ApplicationIsRunning("Xcode") then
    log ("Launching Xcode ...")
    launch application id "com.apple.dt.Xcode"
    delay 5
else
    log("Xcode is already running ...")
end if

set project_path to "/PATH/TO/YOUR_PROJECT.xcodeproj"
log ("Open an XCode project at " & project_path)

set _project_name to (do shell script "echo $(basename " & project_path & ") | sed -e 's/.xcodeproj//'")
log ("project_name set to " & _project_name)

set _target_name to "YOUR_TARGET"

tell application id "com.apple.dt.Xcode"
    set _project_file to (POSIX file project_path as alias)
    open _project_file
    # load documentation set with path path_to_project display yes
    set _workspace to active workspace document
    set _project to first item of (projects of _workspace whose name = _project_name)
    set _target to first item of (targets of _project whose name = _target_name)

    # as this won't work, cannot event resort to system event
    # duplicate _target with properties {name:_target_name & "_clone"}
    # make new build configuration with data build configurations of _target with properties {name:_target_name & "_clone"}
    # activate

    log ("Edit the Build Settings of the new target")
    set _build_configuration to first item of (build configurations of _target whose name = "Debug")
    set value of build setting "PRODUCT_NAME" of _build_configuration to "KeySING"

    # http://lists.apple.com/archives/xcode-users//2008/Feb/msg00497.html
    log ("Add a group to the Source and Resources section, then rename them")
    set _new_group_name to "groupX"
    tell root group of _project
        set _groups to (get groups whose name = _new_group_name)
        if (length of _groups) = 0 then
            set _new_group to make new group with properties {name:_new_group_name, path:_new_group_name, path type:group relative}
        else
            set _new_group to first item of _groups
        end if

        log ("Add source files to the groups, and add the file to the new Target")
        tell _new_group
            set _new_file_name to "whatever.h"
            set _new_files to get (file references whose name = _new_file_name)
            if (length of _new_files) = 0 then
                # Xcode crashes
                # make new file reference with properties ¬
                #     {name:_new_file_name, file encoding:utf8, path type:group relative,¬
                #      path:_new_file_name}
            end if
        end tell
    end tell

    log ("Close XCode")
    quit

end tell

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X