Testprojekte ohne Schmerzen. Yandex-Bericht

Wir im Yandex.Maps-Team für iOS erstellen Testprojekte mit einem kleinen Plugin für CocoaPods und mehreren Dienstprogrammklassen. Das Erstellen eines Projekts ist schnell und zuverlässig. Aber vielleicht stören wir uns zu sehr und es ist nicht so schwierig, ein Projekt manuell mit den erforderlichen Einstellungen und Abhängigkeiten zusammenzustellen? In dem Bericht ging ich vom Gegenteil aus: Zuerst habe ich mir den manuellen Prozess angesehen, dann unseren.


- Zunächst ein kleiner Hintergrund. Yandex.Maps werden länger als eine Minute gesammelt. Auf meinem Computer dauert das Erstellen der Anwendung etwas mehr als drei Minuten. Wir entwickeln in Testprojekten, um weniger Zeit für jede Baugruppe aufzuwenden. Wir haben genug Modularität und für jedes Modul führen wir ein Testprojekt durch. In diesem Testprojekt werden Funktionen entwickelt.

Das Erstellen eines Testprojekts dauert jetzt 15 Minuten bis eine Stunde. Dies liegt daran, dass das Projekt konfiguriert werden muss. Das heißt, Sie müssen das Signieren konfigurieren, damit wir auf denselben Geräten entwickeln können, wie wir es gewohnt sind. Es ist notwendig, die erforderlichen Bibliotheken zu konfigurieren. Während der Entwicklung des Features selbst kommen wir ständig zurück und beenden das Testprojekt, damit es unseren Anforderungen entspricht.

Warum brauchen wir Testprojekte? So sparen Sie Zeit bei der Montage. Je kleiner das Projekt ist, desto schneller wird es zusammengestellt, desto häufiger können wir unsere Anwendung auf dem Gerät starten und desto komfortabler ist die Entwicklung für uns.



Was soll im Testprojekt sein? Wir sollten in der Lage sein, unsere Anwendung auf denselben Geräten zu starten, zu debuggen, auf denen wir unsere Hauptanwendung starten und debuggen.

Das Projekt sollte so ähnlich wie möglich zum Hauptprojekt konfiguriert sein, damit beim Übertragen von Features vom Testprojekt zum Hauptprojekt keine Überraschung auftritt. Oder zumindest die Anzahl der erhaltenen Überraschungen auf ein Minimum reduziert.

Wir benötigen außerdem eine minimale Umgebung im Testprojekt, damit wir keine Zeit damit verschwenden, UIWindows zu erstellen, Bibliotheken einzurichten, den Aufruf zum Öffnen der Anwendung für die Bibliothek, die sich mit der Autorisierung befasst, zu öffnen usw.

CocoaPods app_spec


Meine ganze Geschichte heute wird sich um die CocoaPods-Funktion namens app_spec drehen.



App_spec ähnelt einer normalen Unterspezifikation, generiert jedoch kein Framework, das verbunden werden kann, sondern eine Anwendung, die auf dem Gerät gestartet werden kann.



Mit CocoaPods können wir Info.plist und xcconfig sofort in app_spec verschieben. Dadurch können wir unser Projekt bereits recht gut einrichten.

Wenn wir jedoch in jeder pods_spec riesige Wörterbücher mit Werten für Info.plist und xcconfig schreiben, werden wir selbst podspec erweitern und es wird unpraktisch sein, sie zu ändern. Wenn wir etwas ändern müssen, müssen wir in jede Podspec-Datei gehen und etwas mit Stiften bearbeiten. In jedem Fall ist dies unpraktisch.



Um dies zu beseitigen, haben wir ein sehr einfaches lokales Plugin für CocoaPods erstellt. Es passt sogar ganz in eine Folie. Und er macht das Einzige: Er gibt uns die DSL-Berechtigung CocoaPods, die app_spec mit bereits verstopften Werten in Info.plist und xcconfig erstellt. Auf diese Weise können wir bereits die Signatur konfigurieren und die wichtigen Dinge konfigurieren, die in unserem Testprojekt konfiguriert werden sollen.



Frage: Wie übertrage ich den Pfad zu Berechtigungen, genauer gesagt, wo Berechtigungen gespeichert werden, damit wir den Pfad in Plug-Ins fest codieren können?

Es gibt zwei Möglichkeiten. Oder geben Sie den Pfad für eine Datei an, die sich einfach in unserem Repository befindet, z. B. zu den Berechtigungen des Hauptprojekts. Oder speichern Sie im Plugin eine spezielle Berechtigungsdatei für Testprojekte. Und kopieren Sie es mit demselben Plugin auf unseren Developmentpod.



Wir haben den ersten Weg gewählt und hier hatten wir einige Schwierigkeiten. Tatsache ist, dass sich in unserem Repository Entwicklungspods in verschiedenen Unterordnern befinden. Daher können wir keinen relativen Pfad für sie vom Entwicklungspod zur Berechtigungsdatei angeben.

Es ist wichtig zu betonen, dass Sie einen relativen Pfad angeben müssen, da dieser Pfad in pods_spec verbleibt. Dies bedeutet, dass er an der Berechnung des Scheckbetrags teilnimmt, der in Podfile.lock gespeichert ist. Und wenn es einen absoluten Pfad gibt, wirkt sich dies auf den Scheckbetrag aus. Dies bedeutet, dass der Prüfbetrag abhängig davon variiert, von welchem ​​Ordner aus $ pod install aufgerufen werden soll, von wo aus Sie das Repository haben und auf welchem ​​Computer Sie $ pod install ausführen. Dies führt im Allgemeinen zu Konflikten.



Jetzt werde ich eine weitere kleine Erweiterung desselben Plugins zeigen, mit der wir den relativen Pfad zu diesen Berechtigungen berechnen können.

Wir kennen den relativen Pfad von unserem Plugin zur Datei mit den Berechtigungen, wenn sie sich im selben Repository befinden. Und auch während des Starts von $ pod install kennen wir den Weg zu unserem Developmentpod. Die ganze Magie, die in diesem Code enthalten ist, ist eine hervorgehobene Linie, in der wir einfach den relativen Pfad zählen und diese beiden absoluten Pfade kennen.



Was haben wir also bekommen, als wir app_spec bereits auf diese Weise konfiguriert hatten? Wir können unser Testprojekt sofort auf denselben Geräten ausführen. Wir haben eine Vielzahl von Einstellungen, einschließlich Berechtigungen, die wir benötigen.

Umgebung


Das nächste, worüber ich sprechen möchte, ist die Umgebung, die minimal notwendige Umgebung, die wir benötigen, um sofort mit dem Schreiben von Code zu beginnen.



In unserem Fall benötigen wir MapKit, das bereits konfiguriert ist und dessen Schlüssel übertragen wurden, mit Anrufweiterleitung im AccountManager. Dies ist unsere Berechtigungsbibliothek. Sie muss auch Systemaufrufe auslösen, sie muss auch Schlüssel übertragen, einschließlich des Öffnens der Anwendung als Referenz.

Wir benötigen außerdem einen Startbildschirm mit einer Karte und einem Navigationsstapel, damit wir denselben Navigationsstapel wie in Karten verwenden können und es einfacher ist, Funktionen aus dem Testprojekt auf das Hauptprojekt zu übertragen. Und der Einstiegspunkt, damit wir ohne nachzudenken sofort mit dem Schreiben von nützlichem Code beginnen können.



In Ihrem Fall kann dies beispielsweise das Einrichten des Facebook SDK sein, in das Sie auch Schlüssel übertragen müssen. Ihre Bibliotheken für die Anmeldung, die Sie mit ziemlicher Sicherheit benötigen, um den Link zum Öffnen der Anwendung zu überspringen. Eine Art Start-Windows-Startcontroller und derselbe Einstiegspunkt zum Ausführen des Hauptskripts, das Sie in Ihrem Testprojekt entwickeln möchten.



Wie haben wir das gemacht? Durch Erstellen einer einzelnen AppDelegate-Vorlage. Dort initialisieren wir alle notwendigen Umgebungen, Bibliotheken. Wir leiten alle notwendigen Anrufe weiter, übertragen die notwendigen Schlüssel. Beim Erstellen eines Testprojekts bleibt es uns überlassen, ein neues AppDelegate für das Testprojekt zu erstellen und von der Vorlage zu erben.

Danach überschreiben wir die einzige Methode, die aufgerufen wird, nachdem die Vorlage AppDelegate alles Notwendige getan hat. Und dort haben wir bereits den Start-ViewController und darüber können wir unser Skript ausführen, das wir im Testprojekt debuggen möchten.

War / wurde


Wie kann ich ein Testprojekt in der Stirn erstellen und wie kann ich es mit der heute beschriebenen Methode erstellen?

Erstellen eines Testprojekts in der Stirn:

- Wir gehen zu Xcode und erstellen ein neues Projekt (Datei> Neues Projekt).

- Geben Sie den Namen ein, vorzugsweise ohne Fehler, und unterschreiben Sie die Bundle-ID. Wir bauen dieses Projekt auf.

- Ändern Sie die Version von Swift, ändern Sie die Zielversion. Wir versuchen, alles auf dem Gerät auszuführen, die Signatur zu bearbeiten und so weiter. Dies ist ein ziemlich trostloser Prozess.

- Als nächstes erstellen wir eine Poddatei, verbinden dort Abhängigkeiten und installieren Pods.

- Danach beginnen wir sehr mühsam und behutsam mit der Konfiguration unseres AppDelegate und übertragen die Initialisierungselemente der benötigten Bibliotheken.

- Erstellen Sie mit unserem ViewController ein Start-UIWindows

Und erst danach können wir den nützlichen Code starten. Ziemlich unangenehmes Verfahren, stimme zu.

Wie können wir ein Testprojekt mit den Best Practices erstellen, die ich im heutigen Bericht beschrieben habe?

- Wir erstellen sample_app_spec mit der Erweiterung für CocoaPods, mit der wir begonnen haben.

- Erstellen Sie ein AppDelegate und erben Sie es von der Vorlage AppDelegate.

Danach können wir mit dem Schreiben von nützlichem Code beginnen.

Das Erstellen eines Testprojekts auf diese Weise ist viel schneller und zuverlässiger. Wir werden definitiv keinen Fehler bei den Signatureinstellungen machen, wir werden definitiv keinen Fehler bei den Projekteinstellungen machen. Das gesamte Umfeld, das für den Arbeitsbeginn erforderlich ist, kommt sofort auf uns zu.

Kann es einfacher sein?


Sie können eine Frage stellen - kann dies einfacher gemacht werden? Na sicher.



Ich habe drei Schwierigkeitsgrade identifiziert. Das erste ist, worüber ich heute auf einmal gesprochen habe, als wir ein Plug-In für CocoaPods, das Pfade zu Berechtigungen reparieren kann, und eine Vorlage AppDelegate erstellen.

Die zweite Methode ist ideal im Verhältnis von Aufwand zu Gewinn. Es enthält nur das Plugin für CocoaPods, das das erste in der heutigen Geschichte war. Das heißt, es ersetzt einfach die Werte in Info.plist und xcconfig. Es macht das Leben schon viel einfacher.

Wenn Sie Ihre Berechtigungsdatei in Ihren Testanwendungen nicht benötigen, wenn sich Ihre Testanwendungen stark voneinander unterscheiden und keine gemeinsamen Komponenten benötigen, ist diese Methode sehr gut für Sie geeignet.

Die dritte Methode ist die einfachste und erfordert keine Vorbereitung. Starten Sie einfach app_spec. Das aus app_spec generierte Projekt wird im selben Arbeitsbereich wie Ihr Hauptprojekt erstellt. Daher erbt es bereits Swift, die Zielversion und alle Einstellungen, die Sie in Workspace haben. Es wird für Sie viel einfacher sein, mit ihm zu arbeiten. Das ist alles, danke für Ihre Aufmerksamkeit. Heute werde ich Ihnen erklären, wie Sie Testprojekte ohne Schmerzen erstellen und wie wir Testprojekte in Yandex.Maps erstellen.

- Zunächst ein kleiner Hintergrund. Yandex.Maps werden länger als eine Minute gesammelt. Auf meinem Computer dauert das Erstellen der Anwendung etwas mehr als drei Minuten. Wir entwickeln in Testprojekten, um weniger Zeit für jede Baugruppe aufzuwenden. Wir haben genug Modularität und für jedes Modul führen wir ein Testprojekt durch. In diesem Testprojekt werden Funktionen entwickelt.

Das Erstellen eines Testprojekts dauert jetzt 15 Minuten bis eine Stunde. Dies liegt daran, dass das Projekt konfiguriert werden muss. Das heißt, Sie müssen das Signieren konfigurieren, damit wir auf denselben Geräten entwickeln können, wie wir es gewohnt sind. Es ist notwendig, die erforderlichen Bibliotheken zu konfigurieren. Während der Entwicklung des Features selbst kommen wir ständig zurück und beenden das Testprojekt, damit es unseren Anforderungen entspricht.

Warum brauchen wir Testprojekte? So sparen Sie Zeit bei der Montage. Je kleiner das Projekt ist, desto schneller wird es zusammengestellt, desto häufiger können wir unsere Anwendung auf dem Gerät starten und desto komfortabler ist die Entwicklung für uns.



Was soll im Testprojekt sein? Wir sollten in der Lage sein, unsere Anwendung auf denselben Geräten zu starten, zu debuggen, auf denen wir unsere Hauptanwendung starten und debuggen.

Das Projekt sollte so ähnlich wie möglich zum Hauptprojekt konfiguriert sein, damit beim Übertragen von Features vom Testprojekt zum Hauptprojekt keine Überraschung auftritt. Oder zumindest die Anzahl der erhaltenen Überraschungen auf ein Minimum reduziert.

Wir benötigen außerdem eine minimale Umgebung im Testprojekt, damit wir keine Zeit damit verschwenden, UIWindows zu erstellen, Bibliotheken einzurichten, den Aufruf zum Öffnen der Anwendung für die Bibliothek, die sich mit der Autorisierung befasst, zu öffnen usw.

CocoaPods app_spec


Meine ganze Geschichte heute wird sich um die CocoaPods-Funktion namens app_spec drehen.



App_spec ähnelt einer normalen Unterspezifikation, generiert jedoch kein Framework, das verbunden werden kann, sondern eine Anwendung, die auf dem Gerät gestartet werden kann.



Mit CocoaPods können wir Info.plist und xcconfig sofort in app_spec verschieben. Dadurch können wir unser Projekt bereits recht gut einrichten.

Wenn wir jedoch in jeder pods_spec große Wörterbücher mit Werten für Info.plist und xcconfig schreiben, werden wir podspec selbst erweitern und es wird unpraktisch sein, sie zu ändern. Wenn wir etwas ändern müssen, müssen wir in jede Podspec-Datei gehen und etwas mit Stiften bearbeiten. Oder nicht Stifte. In jedem Fall ist dies unpraktisch.



Um dies zu beseitigen, haben wir ein sehr einfaches lokales Plugin für CocoaPods erstellt. Es passt sogar ganz in eine Folie. Und er macht das Einzige: Er gibt uns die DSL-Berechtigung CocoaPods, die app_spec mit bereits verstopften Werten in Info.plist und xcconfig erstellt. Auf diese Weise können wir bereits die Signatur konfigurieren und die wichtigen Dinge konfigurieren, die in unserem Testprojekt konfiguriert werden sollen.



Frage: Wie übertrage ich den Pfad zu Berechtigungen, genauer gesagt, wo Berechtigungen gespeichert werden, damit wir den Pfad in Plug-Ins fest codieren können?

Es gibt zwei Möglichkeiten. Oder geben Sie den Pfad für eine Datei an, die sich einfach in unserem Repository befindet, z. B. zu den Berechtigungen des Hauptprojekts. Oder speichern Sie im Plugin eine spezielle Berechtigungsdatei für Testprojekte. Und kopieren Sie es mit demselben Plugin auf unseren Developmentpod.



Wir haben den ersten Weg gewählt und hier hatten wir einige Schwierigkeiten. Tatsache ist, dass sich in unserem Repository Entwicklungspods in verschiedenen Unterordnern befinden. Daher können wir keinen relativen Pfad für sie vom Entwicklungspod zur Berechtigungsdatei angeben.

Es ist wichtig zu betonen, dass Sie einen relativen Pfad angeben müssen, da dieser Pfad in pods_spec verbleibt. Dies bedeutet, dass er an der Berechnung des Scheckbetrags teilnimmt, der in Podfile.lock gespeichert ist. Und wenn es einen absoluten Pfad gibt, wirkt sich dies auf den Scheckbetrag aus. Dies bedeutet, dass der Prüfbetrag abhängig davon variiert, von welchem ​​Ordner aus $ pod install aufgerufen werden soll, von wo aus Sie das Repository haben und auf welchem ​​Computer Sie $ pod install ausführen. Dies führt im Allgemeinen zu Konflikten.



Jetzt werde ich eine weitere kleine Erweiterung desselben Plugins zeigen, mit der wir den relativen Pfad zu diesen Berechtigungen berechnen können.

Wir kennen den relativen Pfad von unserem Plugin zur Datei mit den Berechtigungen, wenn sie sich im selben Repository befinden. Und auch während des Starts von $ pod install kennen wir den Weg zu unserem Developmentpod. Die ganze Magie, die in diesem Code enthalten ist, ist eine hervorgehobene Linie, in der wir einfach den relativen Pfad zählen und diese beiden absoluten Pfade kennen.



Was haben wir also bekommen, als wir app_spec bereits auf diese Weise konfiguriert hatten? Wir können unser Testprojekt sofort auf denselben Geräten ausführen. Wir haben eine Vielzahl von Einstellungen, einschließlich Berechtigungen, die wir benötigen.

Umgebung


Das nächste, worüber ich sprechen möchte, ist die Umgebung, die minimal notwendige Umgebung, die wir benötigen, um sofort mit dem Schreiben von Code zu beginnen.



In unserem Fall benötigen wir MapKit, das bereits konfiguriert ist und dessen Schlüssel übertragen wurden, mit Anrufweiterleitung im AccountManager. Dies ist unsere Berechtigungsbibliothek. Sie muss auch Systemaufrufe auslösen, sie muss auch Schlüssel übertragen, einschließlich des Öffnens der Anwendung als Referenz.

Wir benötigen außerdem einen Startbildschirm mit einer Karte und einem Navigationsstapel, damit wir denselben Navigationsstapel wie in Karten verwenden können und es einfacher ist, Funktionen aus dem Testprojekt auf das Hauptprojekt zu übertragen. Und der Einstiegspunkt, damit wir ohne nachzudenken sofort mit dem Schreiben von nützlichem Code beginnen können.



In Ihrem Fall kann dies beispielsweise das Einrichten des Facebook SDK sein, in das Sie auch Schlüssel übertragen müssen. Ihre Bibliotheken für die Anmeldung, die Sie mit ziemlicher Sicherheit benötigen, um den Link zum Öffnen der Anwendung zu überspringen. Eine Art Start-Windows-Startcontroller und derselbe Einstiegspunkt zum Ausführen des Hauptskripts, das Sie in Ihrem Testprojekt entwickeln möchten.



Wie haben wir das gemacht? Durch Erstellen einer einzelnen AppDelegate-Vorlage. Dort initialisieren wir alle notwendigen Umgebungen, Bibliotheken. Wir leiten alle notwendigen Anrufe weiter, übertragen die notwendigen Schlüssel. Beim Erstellen eines Testprojekts bleibt es uns überlassen, ein neues AppDelegate für das Testprojekt zu erstellen und von der Vorlage zu erben.

Danach überschreiben wir die einzige Methode, die aufgerufen wird, nachdem die Vorlage AppDelegate alles Notwendige getan hat. Und dort haben wir bereits den Start-ViewController und darüber können wir unser Skript ausführen, das wir im Testprojekt debuggen möchten.

War / wurde


Wie kann ich ein Testprojekt in der Stirn erstellen und wie kann ich es mit der heute beschriebenen Methode erstellen?

Erstellen eines Testprojekts in der Stirn:

- Wir gehen zu Xcode und erstellen ein neues Projekt (Datei> Neues Projekt).

- Geben Sie den Namen ein, vorzugsweise ohne Fehler, und unterschreiben Sie die Bundle-ID. Wir bauen dieses Projekt auf.

- Ändern Sie die Version von Swift, ändern Sie die Zielversion. Wir versuchen, alles auf dem Gerät auszuführen, die Signatur zu bearbeiten und so weiter. Dies ist ein ziemlich trostloser Prozess.

- Als nächstes erstellen wir eine Poddatei, verbinden dort Abhängigkeiten und installieren Pods.

- Danach beginnen wir sehr mühsam und behutsam mit der Konfiguration unseres AppDelegate und übertragen die Initialisierungselemente der benötigten Bibliotheken.

- Erstellen Sie mit unserem ViewController ein Start-UIWindows

Und erst danach können wir den nützlichen Code starten. Ziemlich unangenehmes Verfahren, stimme zu.

Wie können wir ein Testprojekt mit den Best Practices erstellen, die ich im heutigen Bericht beschrieben habe?

- Wir erstellen sample_app_spec mit der Erweiterung für CocoaPods, mit der wir begonnen haben.

- Erstellen Sie ein AppDelegate und erben Sie es von der Vorlage AppDelegate.

Danach können wir mit dem Schreiben von nützlichem Code beginnen.

Das Erstellen eines Testprojekts auf diese Weise ist viel schneller und zuverlässiger. Wir werden definitiv keinen Fehler bei den Signatureinstellungen machen, wir werden definitiv keinen Fehler bei den Projekteinstellungen machen. Das gesamte Umfeld, das für den Arbeitsbeginn erforderlich ist, kommt sofort auf uns zu.

Kann es einfacher sein?


Sie können eine Frage stellen - kann dies einfacher gemacht werden? Na sicher.



Ich habe drei Schwierigkeitsgrade identifiziert. Das erste ist, worüber ich heute auf einmal gesprochen habe, als wir ein Plug-In für CocoaPods, das Pfade zu Berechtigungen reparieren kann, und eine Vorlage AppDelegate erstellen.

Die zweite Methode ist ideal im Verhältnis von Aufwand zu Gewinn. Es enthält nur das Plugin für CocoaPods, das das erste in der heutigen Geschichte war. Das heißt, es ersetzt einfach die Werte in Info.plist und xcconfig. Es macht das Leben schon viel einfacher.

Wenn Sie Ihre Berechtigungsdatei in Ihren Testanwendungen nicht benötigen, wenn sich Ihre Testanwendungen stark voneinander unterscheiden und keine gemeinsamen Komponenten benötigen, ist diese Methode sehr gut für Sie geeignet.

Die dritte Methode ist die einfachste und erfordert keine Vorbereitung. Starten Sie einfach app_spec. Das aus app_spec generierte Projekt wird im selben Arbeitsbereich wie Ihr Hauptprojekt erstellt. Daher erbt es bereits die Swift-Version, die Zielversion und alle Einstellungen, die Sie in Workspace haben. Es wird für Sie viel einfacher sein, mit ihm zu arbeiten.
Vielen Dank für Ihre Aufmerksamkeit.

All Articles