Swiftyinsta: Jalan menuju `2.0`

Dibuat pada 21 Jul 2019  ·  8Komentar  ·  Sumber: TheM4hd1/SwiftyInsta

Hai @TheM4hd1 😊 terima kasih telah membuat perpustakaan hebat ini (dan Siwa , yang bahkan lebih mengesankan), sejauh ini Anda telah melakukan pekerjaan yang luar biasa. Dan terima kasih telah mengizinkan saya ikut serta dan membantu.

Dengan 2.0 mendekat, saya bertanya-tanya apa skema hebatnya, jika ada tonggak yang direncanakan atau fitur tertentu yang Anda pikirkan untuk diterapkan. Karena setelah menggunakan ini untuk sementara waktu, saya memiliki beberapa saran yang mungkin membuatnya dalam pembaruan yang lebih besar:

1) dokumentasi dalam kode
2) penangan izin yang lebih mudah, menjatuhkan model Singleton dan semua .shared , memungkinkan pengguna menjalankan banyak akun secara bersamaan [Saya mungkin mulai mengerjakan ini hari ini atau besok, jika boleh]
3) login lebih mudah, menyederhanakan proses dengan membuat aksesori dan menyembunyikan beberapa kode boilerplate di belakang private atau internal
4) cabang development tempat kami dapat mendorong _pull request_ yang disetujui untuk menguji semuanya dengan lebih baik sebelum mendorongnya ke master ( 2.0 jelas merupakan masalah besar 😊)
5) konvensi penamaan, memperbaiki userId , pk , userPk ... dan menyeragamkan nama parameter (saya tahu saya membuatnya lebih buruk dengan completionHandler vs completion , tapi saya merasa UserReference agak membuatnya bahkan hahaha), juga membuat fungsi lebih "swift-y" (menggunakan parameter bernama, dll.)
6) ~Swift 5.1, siapa saja? Saya merasa pola some Protocol akan bagus untuk menyelesaikan sebagian besar "masalah" login~

Hanya beberapa ide sekalipun. Tolong beri tahu saya prioritas apa yang Anda miliki dan bagaimana membantu Anda.
Damai ️

roadmap

Semua 8 komentar

Hai Stefano,
Saya harus mengucapkan terima kasih kepada Anda untuk membantu saya dan berkontribusi perpustakaan ini, tidak ada yang lebih dari partisipasi Anda membuat saya bahagia.
Ini adalah ide yang bagus, melompat ke versi 2.0 dengan fitur dan perubahan yang bagus.
Saya sedang berpikir untuk mengimplementasikan beberapa fungsi tambahan yang membantu pengguna menangani perpustakaan dengan lebih mudah,
fitur seperti menerima:

  • Media Berkualitas Tinggi [video atau gambar]
  • Media Kualitas Rendah [video atau gambar]
  • Gambar Mini untuk media
  • Fungsi statistik (menghitung total suka, komentar, ...)
  • Fitur delay yang lebih fleksibel (mengeditnya saat run-time, atau menyalakannya) dengan cara yang lebih mudah.
  • dan sebagainya....
    yang menghemat banyak waktu bagi pengguna, ini hanyalah ide.
    Karena perpustakaan semakin berkembang seiring berjalannya waktu, perpustakaan pasti membutuhkan dokumentasi .
    kita pasti perlu memperbaiki konvensi penamaan, karena ada banyak kesalahan. dan saya suka ide UserReference yang bagus.
    development cabang juga diperlukan.
    kita harus mengundang pengguna lain untuk berkontribusi dan berbagi ide di sini untuk membuat versi berikutnya lebih kuat.
    Terima kasih lagi.
    Salam.
  1. penangan izin yang lebih mudah, menjatuhkan model Singleton dan semua .shared , memungkinkan pengguna menjalankan banyak akun secara bersamaan [Saya mungkin mulai mengerjakan ini hari ini atau besok, jika boleh]

Saya sudah mulai mengerjakan ini. Mekanisme otentikasi yang sebenarnya sudah ada, saya hanya perlu menyelesaikan penulisan ulang setiap metode untuk semua penangan yang berbeda (😱), dan kemudian yang diperlukan hanyalah membuat perubahan yang sama ke Siwa .

Apa yang telah saya lakukan sejauh ini:

  • APIBuilder , HttpSettings dan RequestMessageModel hilang. Sekarang Anda instantiate langsung APIHandler dengan beberapa Settings mengambil (opsional) delay , queues , device (secara otomatis memperbarui User-Agent ) dan parameter session ( URLSession ).
  • Tidak ada lagi protokol *Handler . Tidak ada poin sebenarnya bagi mereka. Setiap *Handler sekarang dapat dipanggil melalui instance APIHandler ( UserHandler adalah .accounts , FeedHandler adalah .feeds , dll .), mereka adalah properti malas dan khusus untuk instance itu sendiri. Saya telah melakukan hal yang sama untuk HttpHelper dan PaginationHelper (alias PaginationHandler di 1.* ). Ini menghapus semua duplikasi kode di mana setiap metode tunggal harus ditulis ulang untuk APIHandler , dan itu berarti " multitasking " dengan beberapa APIHandler s untuk pengguna log yang berbeda.
  • Otentikasi sekarang ditangani oleh satu metode tunggal dalam contoh APIHandler : authenticate(with request: Login.Request, completionHandler: escaping (Result<(Login.Response, APIHandler), Error>) -> Void) , di mana Login.Request adalah enum yang dapat mengambil SessionCache item (yang mirip dengan 1.* SessionCache ), dan digunakan untuk "masuk kembali" dan dengan Siwa (di masa mendatang), atau LoginWebView (alias InstagramLoginWebView ) — dan ini jauh lebih sederhana daripada sekarang. Secara harfiah satu panggilan dan Anda selesai. Ini menghapus semua duplikasi kode antara Siwa dan SwiftyInsta : jika Anda ingin otentikasi "tanpa kepala", gunakan Siwa dan teruskan sessionCache , jika tidak gunakan _web lihat_ di SwiftyInsta .
  • Setiap metode tunggal yang menerima baik _user_ pk atau username sekarang mengambil item UserReference sebagai gantinya.

Saya berharap untuk menyelesaikan semuanya besok, dan kemudian saya dapat mendorongnya ke development untuk pengujian lebih lanjut. Saya benar-benar sangat bersemangat
Saya menantikan untuk mengetahui pemikiran dan pendapat Anda.

Perubahan tampaknya sangat bagus, cabang development ditambahkan juga.
Saya sedang mengerjakan daftar fitur dan alat seperti Logger dan lain-lain.
Dan tentang Otentikasi, metode baru ini mendukung semua 3 jenis otentikasi?

  1. Masuk API Pribadi
  2. Masuk Web
  3. Siwa

Saya sudah selesai dengan semua perubahan di atas. Saya mengujinya sebentar dan kemudian mendorong _pull request_.

Dan tentang Otentikasi, metode baru ini mendukung semua 3 jenis otentikasi?

Saat ini mendukung _web login_ dan Siwa (secara teoritis karena Siwa menggunakan *.shared , jadi itu perlu diperbarui, tetapi saya berencana untuk melakukannya secepatnya — artinya benar sekarang , sementara itu, Anda hanya dapat mengujinya dengan _web login_). Saya merasa otentikasi username + password disediakan dengan SwiftyInsta tidak sesuai standar, tbh. Dan karena Anda telah melakukan pekerjaan yang luar biasa untuk itu di Siwa , saya benar-benar merasa itu dapat dikeluarkan dari perpustakaan utama (tapi itu hanya pendapat saya).
Saya sangat yakin bahwa pengguna yang ingin melakukan otentikasi username + password harus melakukannya dengan benar dari awal (yaitu dengan Siwa ), tanpa terlalu memperumit yang lainnya, dan menduplikasi basis kode. Sekali lagi, hanya pendapat saya.
Bisa juga ditambah lagi 😊

(Saya mencoba untuk memperbaiki kesalahan ketik, dan kesalahan di sepanjang jalan ketika saya melihatnya, tetapi saya merasa seperti beberapa metode — misalnya yang aneh POST , mungkin masih tidak berfungsi sebagaimana dimaksud. Mereka tidak di 1.* dan mereka mungkin tidak di 2.0 . Idk)

@sbertix @canaksoy
Lebih banyak ide? perubahan apapun?

Dukungan untuk watchOS , tvOS dan macOS

Saya sedang memikirkan tentang dukungan multi OS #61
Saya akan mencoba dan mengerjakannya nanti.

Membersihkan tanggapan

  • Media Berkualitas Tinggi [video atau gambar]
  • Media Kualitas Rendah [video atau gambar]
  • Gambar Mini untuk media
  • Fungsi statistik (menghitung total suka, komentar, ...)
  • Fitur delay yang lebih fleksibel (mengeditnya saat run-time, atau menyalakannya) dengan cara yang lebih mudah.
  • dan sebagainya....

Tentang ini, saya berpikir… mengapa tidak merasionalisasikan cara tanggapan disajikan kepada pengguna?
Alih-alih mengembalikan langsung file yang didekodekan (yang bisa menjadi seperti properti raw ), mengapa tidak mengembalikan struct sudah dibersihkan, dengan tanggal yang sudah diformat, gambar dengan kualitas berbeda (seperti yang Anda katakan), statistik tertanam ke dalamnya ... dll.

misalnya alih-alih mendorong MediaModel seperti itu, mengembalikan sesuatu yang lebih dekat ke…

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 */
}

Ya, ini ide yang bagus, kita tetap harus mengedit model. beberapa dari mereka kehilangan beberapa properti dan ada banyak duplikat antara model protokol yang tidak berguna dan ....
Kami pasti harus meningkatkan model dan cara mereka merepresentasikan data kepada pengguna.

Bagaimana dengan menegakkan aturan sintaks melalui swiftlint ?
Mudah untuk menambahkan dukungan untuk itu ke Travis CI , tetapi sebenarnya sangat lama untuk mengubah seluruh basis kode yang sesuai.
Tapi itu harus sepadan, imho.
Bagaimana menurut anda? @TheM4hd1

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

canaksoy picture canaksoy  ·  6Komentar

effecttwins picture effecttwins  ·  16Komentar

reefer picture reefer  ·  18Komentar

anonrig picture anonrig  ·  3Komentar

trentona picture trentona  ·  3Komentar