Finden Sie verlorene Dateien in mehreren Xcode-Zielen

Hallo, ich bin Sanya - iOS-Entwickler und in diesem Artikel werde ich Ihnen zeigen, wie Sie die Kopfschmerzen lösen können, die bei der Arbeit an einem Projekt mit mehreren Zielen auftreten.



Ich sehe die Frage "Warum brauchen Sie mehrere Ziele in dem Projekt, Sanya?" Ich antworte: An dem Projekt, an dem ich einmal gearbeitet habe, war ein Ziel mit dem Kundenkonto verknüpft.


  • Wir hatten keinen Zugriff auf dieses Konto.
  • Es gab keine Möglichkeit, Bereitstellungsprofile und Vertriebszertifikate zu erstellen.
  • Das Schlimmste war, dass es nicht möglich war, neue Geräte zu den Bereitstellungsprofilen hinzuzufügen.

Daher haben wir beim Kauf neuer Geräte im Studio auf eine ganze Reihe von Verhandlungen mit dem Kunden gewartet, um diese Ihrem Konto hinzuzufügen und die Möglichkeit zu erhalten, sie zu testen.


Die Lösung lag auf der Hand: Es sollte ein zweites Ziel erstellt werden, das dem Hauptziel ähnelt, jedoch eine andere Bundle-ID aufweist und das vollständig mit unserem Studio-Account verknüpft ist. Gesagt, getan! Mit dem zweiten Ziel konnten wir unabhängig von den Entwicklern auf Kundenseite eine umfassende Entwicklung durchführen, wodurch der Entwicklungsprozess mehrmals gespart wurde, beispielsweise, als die Entwickler des Kunden alle unsere Geräte im Bereitstellungsprofil des Hauptziels entfernten und wir die Anwendung nicht auf ihren Geräten ausführen konnten.


In Ihrem Projekt können bei Bedarf noch mehrere Ziele angezeigt werden, zum Beispiel:


  • Sammeln Sie mehrere Anwendungen aus einer Codebasis, jedoch mit unterschiedlichen Ressourcen.
  • Behalten Sie mehrere Instanzen der Anwendung auf einem Gerät.

Die Arbeit an mehreren Zielen führt jedoch zu den Nachteilen. Die Hauptsache ist, dass der Prozess des Hinzufügens neuer Dateien zum Projekt streng kontrolliert werden muss. Beide sind identisch. Wenn Sie dem Projekt eine neue Datei hinzufügen, müssen Sie beide Ziele mit einem Häkchen versehen.



Dies ist sehr schwierig, wenn Sie in einem großen, mehrstufigen Team arbeiten, sowohl fachlich als auch nach Treu und Glauben.


Wenn Sie dieser einfachen Regel nicht folgen, stellen Sie nach dem nächsten Zusammenführen möglicherweise fest, dass eines der Ziele nicht mehr erfasst wird, und Xcode schwört, dass es die eine oder andere Klasse nicht finden kann. Das Interessanteste ist jedoch, dass Sie einen solchen Fehler nur zur Laufzeit feststellen können, wenn niemand eine Datei aus "Bundle-Ressourcen kopieren" zu beiden Zielen hinzugefügt hat (z. B. XIB-Zellen).


Nach einem weiteren Problem mit dem Debug-Ziel haben wir beschlossen, die Konsistenz der Skriptziele zu steuern. Wir haben die Ruby-Sprache als Werkzeug gewählt, da sie ein exzellentes xcodeproj- Juwel enthält, das fast der Standard für das Schreiben von Werkzeugen für die iOS-Entwicklung ist (siehe fastlane, generamba usw.).


Als Ergebnis haben wir ein Skript entwickelt, das die folgende Arbeitslogik implementiert:


  • Der Pfad zur Projektdatei und die Namen der getesteten Ziele werden in die Eingabe eingegeben.
  • Auf dem Weg zum Projekt findet das Skript das Projekt selbst;
  • wählt die gewünschten Ziele aus und sammelt daraus Dateien (Compile Sources, Copy Bundle Resources und Frameworks);
  • Suchen nach dem Unterschied zwischen Dateilisten;
  • Wir werfen Dateien aus unserer Whitelist aus diesem Unterschied heraus. Zum Beispiel Dateien mit Konstanten, die sich je nach Ziel unterscheiden (baseUrl, wenn Sie das Projekt so organisieren, dass Anwendungen von verschiedenen Zielen auf verschiedene Server zugreifen), oder GoogleService-Info.plist-Dateien, die für verschiedene Ziele unterschiedlich sind.

Wenn das Skript einen Unterschied findet, haben wir ein Problem. Dies bedeutet, dass diese oder jene Datei / dieses Framework zu einem Ziel hinzugefügt wurde, aber nicht zu einem anderen.


Somit können Sie mit dem Skript:


  • Stellen Sie sicher, dass alle Dateien aus Compile Sources und Copy Bundle Resources beiden Zielen korrekt hinzugefügt wurden.
  • Die Identität der Listen der hinzugefügten Frameworks wird ebenfalls überprüft. Dies ist sehr wichtig, wenn Ihr Projekt über eine Architektur mit mehreren Modulen verfügt.
  • Durch die Integration des Skripts in die Erstellungsphase können Sie das Problem bereits vor der Erstellungsphase des Projekts identifizieren.
  • und wenn Sie zuvor beide Ziele für dieses CI gesammelt haben, können Sie die Assembly jetzt nur einem überlassen, wodurch sich die Assembly-Zeit für CI um die Hälfte verringert.

Im Fehlerfall können Sie in Xcode folgende Meldung beobachten:



Im Erfolgsfall finden Sie Einhörner:



Detaillierte Anweisungen zum Hinzufügen zum Projekt, zu den Einstellungen sowie zum Beispielprojekt im Repository .


Das daraus resultierende Dienstprogramm zeigt perfekt, dass Sie selbst als iOS-Entwickler Ihrer täglichen Arbeit ein kleines Stück Kreativität hinzufügen und Automatisierung und Skripterstellung durchführen können, die Ihr Leben vereinfachen!


Vielen Dank für Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de480960/


All Articles