Swiftyinsta: Weg zu `2.0`

Erstellt am 21. Juli 2019  ·  8Kommentare  ·  Quelle: TheM4hd1/SwiftyInsta

Hey @TheM4hd1 😊 danke für die Erstellung dieser großartigen Bibliothek (und Siwa , was noch beeindruckender ist), du hast bisher einen tollen Job gemacht. Und danke, dass ich mitmachen und helfen durfte.

Als sich 2.0 näherte, fragte ich mich, was das große Schema der Dinge war, ob es Meilensteine ​​​​geplant oder bestimmte Funktionen gab, die Sie implementieren wollten. Denn nachdem ich dies eine Weile benutzt habe, habe ich einige Vorschläge, die es in einem größeren Update schaffen könnten:

1) In-Code-Dokumentation
2) einfacherer Berechtigungshandler, der das Singleton-Modell und alle .shared , sodass Benutzer mehrere Konten gleichzeitig ausführen
3) einfachere Anmeldung, Optimierung des Prozesses durch Erstellen von Zubehör und Verstecken von Boilerplate-Code hinter private oder internal
4) ein development Zweig, in dem wir genehmigte _Pull-Requests_ pushen können, um alles besser zu testen, bevor es an den Master gepusht wird ( 2.0 ist definitiv eine große Sache 😊) ✓
5) Benennungskonventionen, Festlegen der userId , pk , userPk ... und Vereinheitlichen der Parameternamen (ich weiß, dass ich es mit completionHandler vs. completion schlimmer gemacht habe UserReference irgendwie sogar macht hahaha), sowie Funktionen "schneller" machen (mit benannten Parametern usw.) ✓
6) ~Swift 5.1, irgendjemand? 🤔 Ich habe das Gefühl, dass das Muster some Protocol großartig wäre, um die meisten Login-"Probleme" zu lösen~

Aber nur ein paar Ideen. Bitte lassen Sie mich wissen, welche Prioritäten Sie haben und wie Sie Ihnen helfen können.
Frieden ️

roadmap

Alle 8 Kommentare

Hallo Stefano,
Ich muss mich bei Ihnen bedanken, dass Sie mir geholfen und diese Bibliothek beigesteuert haben, es gibt nichts mehr, als mich Ihre Teilnahme glücklich macht.
Dies ist eine gute Idee, um auf Version 2.0 mit guten Funktionen und Änderungen zu springen.
Ich habe darüber nachgedacht, einige zusätzliche Funktionen zu implementieren, die dem Benutzer helfen, mit der Bibliothek einfacher umzugehen.
Funktionen wie Empfangen:

  • Hochwertige Medien [Video oder Bild]
  • Medien geringer Qualität [Video oder Bild]
  • Bildminiatur für Medien
  • Statistikfunktionen (Berechnung von Likes, Kommentaren, ...)
  • Flexiblere Verzögerungsfunktion (Bearbeitung zur Laufzeit oder Ein- und Ausschalten) mit einfacheren Möglichkeiten.
  • und soweiter und sofort....
    was den Benutzern viel Zeit spart, das sind nur Ideen.
    Da die Bibliothek im Laufe der Zeit wächst, braucht sie unbedingt eine Dokumentation .
    wir müssen unbedingt Namenskonventionen korrigieren, da es sehr viele Fehler gibt. und ich mag die UserReference Idee, die nett war.
    development Zweig wird ebenfalls benötigt.
    Wir sollten andere Benutzer einladen, hier beizutragen und Ideen auszutauschen, um die nächste Version leistungsfähiger zu machen.
    Danke noch einmal.
    Grüße.
  1. einfacherer Berechtigungshandler, das Singleton-Modell und alle .shared , sodass Benutzer mehrere Konten gleichzeitig ausführen

Ich habe angefangen, daran zu arbeiten. Der eigentliche Authentifizierungsmechanismus ist vorhanden, ich muss nur jede einzelne Methode für all die verschiedenen Handler (😱) neu schreiben und dann müssen nur noch die gleichen Änderungen an Siwa .

Was ich bisher gemacht habe:

  • APIBuilder , HttpSettings und RequestMessageModel sind weg. Jetzt instanziieren Sie direkt APIHandler mit einigen Settings (optional) delay , queues , device (automatische Aktualisierung der User-Agent ) und session ( URLSession ) Parameter.
  • Keine weiteren *Handler Protokolle. Es gab keinen wirklichen Sinn für sie. Jedes *Handler kann jetzt über die APIHandler Instanz aufgerufen werden ( UserHandler ist .accounts , FeedHandler ist .feeds usw.) .), handelt es sich um faule Eigenschaften und sie sind spezifisch für die Instanz selbst. Ich habe das gleiche für HttpHelper und PaginationHelper (auch bekannt als PaginationHandler in 1.* ). Dies entfernt alle Codeduplizierungen, bei denen jede einzelne Methode für APIHandler , und es bedeutet " Multitasking " mit mehreren APIHandler s für verschiedene angemeldete Benutzer.
  • Die Authentifizierung wird jetzt in der APIHandler Instanz durch eine einzige Methode abgewickelt: authenticate(with request: Login.Request, completionHandler: escaping (Result<(Login.Response, APIHandler), Error>) -> Void) , wobei Login.Request ein enum , das entweder ein SessionCache annehmen kann. 1.* SessionCache ) und wird zum "Wiedereinloggen" verwendet und mit Siwa (in Zukunft) oder einem LoginWebView (auch bekannt als InstagramLoginWebView ) — und es ist so viel einfacher als jetzt. Buchstäblich ein Anruf und Sie sind fertig. Dadurch wird die gesamte Codeduplizierung zwischen Siwa und SwiftyInsta : Wenn Sie eine "kopflose" Authentifizierung wünschen, verwenden Sie Siwa und übergeben Sie die sessionCache , andernfalls verwenden Sie _web view_ in SwiftyInsta .
  • Jede einzelne Methode, die entweder ein _user_ pk oder username akzeptiert, benötigt nun stattdessen ein UserReference Element.

Ich rechne damit, dass ich bis morgen alles fertig habe, und dann könnte ich es für weitere Tests auf development erhöhen. Ich bin wirklich super aufgeregt 💪
Ich freue mich auf Ihre Gedanken und Meinungen.

Die Änderungen scheinen sehr gut zu sein, auch der development Zweig wurde hinzugefügt.
Ich arbeite an einer Liste von Funktionen und Tools wie Logger usw.
Und was die Authentifizierung angeht, unterstützt diese neue Methode alle 3 Arten von Authentifizierungen?

  1. Private API-Anmeldung
  2. Web-Login
  3. Siwa

Ich bin mit allen oben genannten Änderungen fertig. Ich teste es eine Weile und drücke dann eine _Pull-Anfrage_.

Und was die Authentifizierung angeht, unterstützt diese neue Methode alle 3 Arten von Authentifizierungen?

Im Moment unterstützt es _Web-Login_ und Siwa (theoretisch, da Siwa *.shared , also muss es aktualisiert werden, aber ich plane, es so schnell wie möglich zu tun – also richtig jetzt kann man es zwischenzeitlich nur noch mit _weblogin_ testen). Ich habe das Gefühl, dass die username + password Authentifizierung, die mit SwiftyInsta bereitgestellt wurde, nicht den Anforderungen entspricht, tbh. Und da Sie in Siwa großartige Arbeit geleistet haben, habe ich das Gefühl, dass es aus der Hauptbibliothek entfernt werden kann (aber es ist nur meine Meinung).
Ich bin fest davon überzeugt, dass Benutzer, die eine username + password Authentifizierung durchführen möchten, dies von Anfang an tun sollten (dh mit Siwa ), ohne alles andere zu verkomplizieren und Codebasen zu duplizieren. Wieder nur meine Meinung.
Es kann genauso gut wieder hinzugefügt werden 😊

(Ich habe versucht zu beheben Fehler, und Fehler auf dem Weg , als ich entdecken sie, aber ich fühle mich wie einige Methoden - zum Beispiel der seltsamen POST . Diejenigen, vielleicht noch nicht wie vorgesehen Sie taten nicht in 1.* und möglicherweise nicht in 2.0 . Idk)

@sbertix @canaksoy
Mehr Ideen? irgendein Update?

Unterstützung für watchOS , tvOS und macOS

Ich dachte an Multi-OS-Unterstützung #61
Ich werde später versuchen, daran zu arbeiten.

Reinigungsantworten

  • Hochwertige Medien [Video oder Bild]
  • Medien geringer Qualität [Video oder Bild]
  • Bildminiatur für Medien
  • Statistikfunktionen (Berechnung von Likes, Kommentaren, ...)
  • Flexiblere Verzögerungsfunktion (Bearbeitung zur Laufzeit oder Ein- und Ausschalten) mit einfacheren Möglichkeiten.
  • und soweiter und sofort....

Darüber habe ich mir überlegt... warum nicht die Art und Weise, wie Antworten dem Benutzer präsentiert werden, rationalisieren?
Anstatt direkt die dekodierte Datei zurückzugeben (die zu einer raw Eigenschaft werden könnte), warum nicht eine bereinigte struct , mit bereits formatiertem Datum, Bildern mit unterschiedlichen Qualitäten (wie Sie sagten), Statistiken in sie eingebettet… etc.

zB anstatt MediaModel drücken, wie es ist, etwas näher zurückgeben an…

public struct MediaModel: Codable {
    /// `MediaModelJSON` would be equal to current `MediaModel`.
    public let rawResponse: MediaModelJSON

    // Accesories
    public var pk: Int! { return rawResponse.pk }
    public lazy var date: Date! = { return self.rawRespone.takenAt.flatMap { Date(timeIntervalSince1970: $0) }}()
    /* etc */
}

Ja, das ist eine gute Idee, wir sollten die Modelle trotzdem bearbeiten. einigen von ihnen fehlen einige Eigenschaften und es gibt viele Duplikate zwischen Modellen, nutzlosen Protokollen und ....
Wir sollten auf jeden Fall die Modelle und die Art und Weise verbessern, wie sie Daten für den Benutzer darstellen.

Was ist mit der Durchsetzung von Syntaxregeln durch swiftlint ?
Es ist einfach, Travis CI Unterstützung dafür hinzuzufügen, aber eigentlich sehr lange, um die gesamte Codebasis entsprechend zu ändern.
Aber es sollte sich lohnen, imho.
Was denkst du? @TheM4hd1

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

anonrig picture anonrig  ·  3Kommentare

effecttwins picture effecttwins  ·  16Kommentare

canaksoy picture canaksoy  ·  6Kommentare

sbertix picture sbertix  ·  3Kommentare

biox86 picture biox86  ·  12Kommentare