Schnellcode für mehrere Projekte freigeben

8

Wir haben also ein paar Projekte, die Code teilen, und sie müssen zumindest für iOS7 kompatibel bleiben.

Gegenwärtig verwenden wir lokale Cocoapoden, um Code zwischen verschiedenen Anwendungen zu teilen. Dies hat den Nachteil, dass der gesamte gemeinsame Code in einer Gruppe zusammengefasst wird. Darüber hinaus erklärte das Cocoapods-Team, warum swift pods für iOS7-Projekte nicht verfügbar sein werden:

  

CocoaPods unterstützt nur Swift unter OS X 10.9 und neuer und iOS 8 und   neuer.

     

Hier ist warum:

     

Swift wird unter OS X 10.9 / iOS 7 und neuer, wie von Apple angegeben, unterstützt   viele Male. Es gibt keine Unterstützung für das Erstellen statischer Archive mit   Schnell. Dynamische Frameworks werden in allen Versionen von OS X unterstützt.   Dynamische Frameworks werden auf iOS-Versionen vor 8 nicht unterstützt:

     

ld: warning: Eingebettete Dylibs / Frameworks werden nur auf iOS 8 oder höher ausgeführt.

(Quelle: Ссылка )

Anhand dieser Informationen möchten wir versuchen, den Code mit einem Cocoa Touch Framework -Projekt zu teilen.

Was ich getan habe, war:

  • Erstellen Sie im Arbeitsbereich ein neues Projekt - & gt; %Code%
  • Fügen Sie Swift-Code hier hinzu und verschieben Sie die benötigten Funktionen / etc als Cocoa Touch Framework
  • Fügen Sie das neue Projekt im Haupt-Build-Ziel als "Embedded Framework"
  • hinzu
  • Wo Sie Klassen aus der definierten Bibliothek verwenden müssen, verwenden Sie eine import-Anweisung, bei der der Build-Zielname der Modulname ist (in meinem Fall public )

Dies scheint zu funktionieren, auch auf iOS7. Das ist seltsam, denn überall, wo ich diese Warnung lese, stelle ich sicher, dass die App nicht auf iOS7-Geräten läuft:

%Vor%

Für uns scheint es jedoch gut zu funktionieren mit unseren iOS 7 Testgeräten. Dies betrifft mich auch:

Der Frameworks-Pfad scheint direkt mit meinem lokalen DerivedData-Ordner verknüpft zu sein. Ich habe meinen Ordner "DerivedData" nicht speziell ausgewählt. Ich habe das vorgeschlagene Framework einfach aus Xcode hinzugefügt und es selbst entschieden, es aus meinem Ordner "DerivedData" zu übernehmen. Wir arbeiten an diesem Projekt mit mehreren Programmierern.

TL; DR;

Bevor ich diesen Pfad durchführe und den Code in dieses neue Setup verschiebe:

  • Hat diese Art der Einbettung einer gemeinsam genutzten Bibliothek Probleme für mein Team? (mit anderen Worten: mache ich etwas falsch?)
  • Wird diese Art der Einbettung von Bibliotheken Probleme verursachen, wenn die App an den App Store gesendet wird?
  • Bei Bedarf: Gibt es eine Alternative, um den Code zwischen den Projekten zu teilen, ohne Code / Dateien einfach hin und her zu kopieren? Ich kann nicht glauben, dass niemand sonst dieses Problem hat.
Kevin R 24.02.2015, 10:29
quelle

2 Antworten

6

Update 02-03-2015:

Um Code intern zu teilen, empfehle ich die Verwendung von git-Submodulen, bei denen Sie Ihren Code in einem gehosteten Repository festschreiben müssen, das entweder öffentlich oder privat sein kann.

Git-Submodule

Dies ist eine Möglichkeit, in einem Repository gespeicherten Code an jeden mit Zugriff zu verteilen. Es hat den Vorteil, dass Sie Änderungen an das Repository senden können, die dann von anderen Benutzern für die Aktualisierung ihrer eigenen Submodul-Repositorys ausgewählt werden können. Es erfordert, dass Git als Quellcodeverwaltung des Projekts verwendet wird, und außerdem muss der Code in ein Repository verschoben werden, auf das die Benutzer Zugriff haben.

Um den Code als ein git-Submodul zu verwenden, fügen Sie das Repository des Codes Ihrem git-gesteuerten Projekt mit dem folgenden Befehl hinzu:

%Vor%

Ersetzen von https://github.com/user/submoduleProject durch Ihre eigene Repository-URL.

Sobald dies hinzugefügt wurde, können Sie die folgenden Befehle verwenden:

%Vor%

und

%Vor%

um den Code aus dem Repository in den Arbeitsbereich des Benutzers zu ziehen.

Wenn Sie dem Submodul Änderungen oder Aktualisierungen hinzufügen möchten, können Sie dies tun und es an das Repository senden. Benutzer können dann ihren Code mithilfe von git submodule update aktualisieren, um die neuesten Änderungen zu erhalten.

Weitere Informationen zu Git Submodulen finden Sie in der offiziellen Dokumentation

>

Ich hoffe, das hilft.

Die App wird von Application Loader oder Xcode beim Senden an den App Store nicht akzeptiert, wenn ein dynamisches Framework für eine App verwendet wird, die weniger als iOS 8 unterstützt. Dies ist bedauerlich, da es wie gesagt funktioniert iOS 7 beim Testen auf einem Gerät.

Der beste Weg, den ich für Sie in Betracht ziehen kann, um Ihren Code mit Ihrem Team zu teilen, besteht darin, einen Ordner des Codes zu übergeben und ihn in das Projekt aufzunehmen, anstatt ein dynamisches Framework einzubeziehen. Wenn Sie den Namensabstand konsistent halten möchten, sodass Sie in Zukunft das dynamische Framework verwenden und von iOS 7 migrieren können, empfehle ich, eine Struktur um die öffentlichen Methoden und Klassen zu verwenden, um den Namespace abzurufen. Zum Beispiel:

%Vor%

Dies ermöglicht es Ihnen, die Methoden innerhalb des Rests der Anwendung auf die gleiche Weise wie bei einem Dynamic Framework

aufzurufen %Vor%

Als Antwort auf Ihre Bedenken bezüglich der direkten Verknüpfung mit dem Framework aus dem abgeleiteten Datenverzeichnis ist dies im Allgemeinen ein falscher Ansatz.

Idealerweise kopieren Sie das Framework in das Projektverzeichnis und verknüpfen es dann mit dieser Version. Auf diese Weise können Sie das Quellverzeichnis des Projekts an andere Personen verteilen, und das Framework verbleibt relativ zum Quellordner des Projekts am richtigen Speicherort.

Ich hoffe, dass dies hilft, Ihre Frage zu beantworten.

    
Elliott Minns 27.02.2015 13:48
quelle
0

git Submodule funktionieren. Sie können ein Schmerz sein, mit dem man arbeiten kann.

Wenn Sie sie nicht verwenden möchten, habe ich einen Workaround gefunden, der ein zweites "Dummy" -Projekt mit Cocoapoden verwendet, um Swift-Code ohne ein Framework einzubinden.

Ссылка

    
Michael Gray 25.04.2015 23:09
quelle

Tags und Links