2016-01-27 11 views
15

Ich habe derzeit ein Projekt mit 3 verschiedenen Versionen der gleichen App (anderes Branding und solche), die gerade gut funktioniert. Seitdem habe ich 3 neue Apple Watch-Ziele hinzugefügt (1 für jede App- "Version"), wobei 2 davon auf die Dateien im "Master" -Apple Watch-Ziel verweisen.Apple Watch Pre-Build-Aktion zum Storyboard ändern customModule Referenzen

Alles funktioniert gut, solange ich daran denke, die Modulreferenz für jede Storyboardansicht zu ändern, damit sie dem richtigen Schnittstellencontroller im entsprechenden Ziel der Watchkit-Erweiterung zugeordnet wird.

Die Erinnerung daran, dies jedes Mal zu wechseln, wenn ich eine App-Version/Ziel ausführen/erstellen muss, ist ein Schmerz und nicht wirklich eine langfristige Lösung.

Ich habe den folgenden Befehl erstellt, der zur richtigen Zeit ausgeführt werden soll, sodass die Storyboardreferenzen geändert werden, bevor sie kompiliert wird.

perl -pi.bak -e 's/customModule=\"(.*?)\">/customModule=\"watchMyTarget_Extension\">/g' ${SRCROOT}/watch/Base.lproj/Interface.storyboard 

ich auch zu dem Schluss, dass ich wahrscheinlich zurücksetzen möchte wurde die Änderung nach der App erstellt, da ich eine Datei ändern für git haben wollen sich nicht beschweren. Aus diesem Grund erstellt das oben genannte Skript eine .bak-Datei. So nach der Kompilierung durchgeführt wird und verpackt/lief auf dem Gerät oder was auch immer, ich will

mv ${SRCROOT}/watch/Base.lproj/Interface.storyboard.bak ${SRCROOT}/watch/Base.lproj/Interface.storyboard 

Ich habe versucht laufen die Skripte in dem (watchTarget, nicht appTarget) Ziel Platzierung bauen Schema, Build->Pre/Post Actions, die nicht tat scheinen irgendeinen Effekt zu haben. Und ich habe versucht, es in Run->Pre/Post Actions zu setzen, die zu einem gewissen Grad funktioniert hat, aber es schien wie die Post-Aktion, bevor die App in den Simulator geschoben wurde und damit die Anwendung abstürzte ("konnte nicht Geräteprotokolle anzeigen" oder so etwas).

Also wo auf der Erde muss ich diese Skripte setzen, um sie zum richtigen Zeitpunkt im Build-Prozess laufen zu lassen?

Antwort

2

Sie Ihr Ziel Neue Run Script Phase in Build Phasen hinzufügen verwenden sollten, legen Sie sie vor dem Compile Sources

Schritte: (von Apple)

  1. Im Projekt-Editor, wählen Sie das Ziel, zu dem Sie möchten eine Run Script Build Phase hinzufügen.
  2. Klicken Sie oben im Projekteditor auf "Phasen erstellen".
  3. Wählen Sie Editor> Build-Phase hinzufügen> Run Script Build-Phase hinzufügen.
  4. Legen Sie den Abschnitt Skript ausführen im Projekteditor offen.
  5. Konfigurieren Sie das Skript in der Skriptvorlage ausführen.
+0

Ich habe dies ohne Erfolg versucht.Ich brauche es vor und nach dem Build zu laufen.Da das Uhr-Storyboard geändert werden muss, bevor ich das Watch-Ziel baue und es dann zurückstelle, nachdem es erstellt wurde – tskulbru

+0

@tskulbu die Bereinigung sollten Sie es nach dem Archivieren tun, legen Sie den Bereinigungsbefehl in den Post-Aktionen des Archivs . – Allen

+0

Ich versuchte Post-Aktion von Build/Archiv usw. aus meinem Haupt-App-Build-Schema zu bereinigen, aber aus irgendeinem Grund schien es nicht spät genug zu sein und die Änderungen wurden wieder in die Watch-App aufgenommen, die dann nicht installiert werden konnte habe die richtigen Änderungen. – tskulbru

0

Meine Lösung ist die Build-Einstellungen jede Uhr Erweiterungsziel zu gehen, die Einstellung des Produktmodulnamen auf den gleichen Wert, beispielsweise xxx_watch_extension. Dann sollten wir in der Lage sein, dieses Modul für benutzerdefinierte Klassen auf dem Storyboard auszuwählen.

Es funktioniert gut für mich.