Skip to main content

Top các thư viện open source tốt nhất được viết bằng Swift cho iOS

Top các thư viện open source tốt nhất được viết bằng Swift cho iOS

I. Giới thiệu

Các framework, library đã trở thành một phần không thể thiếu trong quá trình viết code của giới lập trình viên. Càng ngày, chúng ta lại có thêm càng nhiều thư viện mới tốt hơn, giúp ích cho chúng ta nhiều hơn trong công việc.
Dưới đây, tôi xin giới thiệu các thư viện tốt nhất cho iOS, mỗi thư viện phục vụ một mục đích khác nhau, để các bạn có thể tham khảo và sử dụng trong project.

II. Nội dung

1. Các thư viện về network

a. Alamofire


Alamofire là thư viện giúp chúng ta làm việc với các request http. Chắc hẳn mọi người đều sử dụng thư viện này. Nó là thư viện quốc dân, gần như tất cả project iOS có sử dụng request network đều sử dụng Alamofire cả (project Objective-C thì sử dụng AFNetworking).
Các bạn có thể tìm hiểu thêm về Alamofire tại đây

b. Kingfisher


Kingfisher là thư viện rất mạnh mẽ giúp chúng ta các tác vụ liên quan đến download, hiển thị trên view và cache image. Về cơ bản thì các chức năng của Kingfisher cũng tương tự thư viện SDWebImage, tuy nhiên SDWebImage lại được viết bằng Objective-C. Nếu trước đây các bạn chưa sử dụng Kingfisher thì các bạn nên dùng thử, sẽ rất tiện lợi đấy
Các bạn có thể tìm hiểu thêm về Kingfisher tại đây

c. Starscream


Starscream là thư viện về WebSocket, giúp chúng ta làm việc với WebSocket trở nên đơn giản và nhẹ nhàng hơn.
Các bạn có thể tìm hiểu thêm về Starscream tại đây

2. Reactive programming

a. RxSwift


RxSwift là một thư viện rất tuyệt vời để chúng ta code functional reactive programming trên iOS. Nó là một version của Rx. Rx đã có rất nhiều version trên các ngôn ngữ khác nhau: RxJava, Rx.NET, RxJS,… Hiện tại sun-asterisk cũng là một công ty sử dụng RxSwift rất nhiều. Nếu chưa biết về RxSwift, các bạn nên tìm hiểu về nó, nó mang lại rất nhiều lợi ích khi viết code.
Các bạn có thể tìm hiểu thêm về RxSwift tại đây

b. ReactiveCocoa


ReactiveCocoa là một thư viện reactive khác của iOS. Về cơ bản thì mục đích của nó cũng giống với RxSwift, giúp chúng ta code functional reactive programming. Tuy nhiên, cách sử dụng RxSwift và ReactiveCocoa rất khác nhau, và cả 2 đều là những thư viện tuyệt vời.
Các bạn có thể tìm hiểu thêm về ReactiveCocoa tại đây
Ngoài ra, để tìm hiểu sự khác nhau giữa RxSwift và ReactiveCocoa, các bạn có thể tham khảo thêm tại đây

3. Animation

a. Hero


Hero là thư viện giúp chúng ta tạo animation cho view controller transition. Nếu các bạn đang tìm kiếm một thư viện giúp custom cách present view controller, thì Hero chính là thư viện các bạn cần
Các bạn có thể tìm hiểu thêm về Hero tại đây

b. Spring

Spring là thư viện animation cho các UIView trong iOS. Nếu các bạn đang cần tạo animation cho view, mà lại không muốn tốn quá nhiều thời gian để tự viết animation, thì Spring có thể chính là thư viện mà các bạn đang cần.
Các bạn có thể tìm hiểu thêm về Spring tại đây

4. Auto layout

Chúng ta đều biết là việc thêm auto layout trong code là tương đối lằng nhằng và phức tạp. Có nhiều khi chúng ta phải thêm 1 đống code, chỉ để thêm một vài constraint đơn giản. Dưới đây là các thư viện giúp việc thêm các constraint đơn giản, dễ dàng hơn.

a. SnapKit


SnapKit là một dạng DSL để viết auto layout trong iOS. DSL là viết tắt cho domain specific language, để tìm hiểu thêm về DSL, các bạn có thể tham khảo tại đây (https://vi.wikipedia.org/wiki/Ngôn_ngữ_miền_chuyên_biệt). Sử dụng SnapKit sẽ giúp chúng ta code auto layout đơn giản hơn, ngắn gọn và dễ đọc hơn.
Các bạn có thể tìm hiểu thêm về SnapKit tại đây

b. TinyConstraint


TinyConstraint là thư viện giúp chúng ta giảm thiểu tối đa code với các dạng auto layout thông thường. Ví dụ, để thêm auto layout cho View với 4 cạnh của SuperView, thông thường chúng ta phải viết:
NSLayoutConstraint.activate([
    view.topAnchor.constraint(equalTo: superview.topAnchor, constant: 0),
    view.leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: 0),
    view.bottomAnchor.constraint(equalTo: superview.bottomAnchor, constant: 0),
    view.trailingAnchor.constraint(equalTo: superview.trailingAnchor, constant: 0)
])
TinyConstraint cung cấp cho chúng ta method đơn giản như sau:
view.edgesToSuperView()
Các bạn có thể tìm hiểu thêm về TinyConstraint tại đây

5. Utilities

a. PromiseKit


PromiseKit là một thư viện giúp chúng ta đơn giản hoá các asynchronous task, giúp chúng ta không phải mất nhiều thời gian lo lắng cho các đoạn code asynchronous. PromiseKit dễ học, dễ nắm vững và hiệu quả nó mang lại thì rất lớn. Nó giúp code của chúng ta đơn giản hơn, dễ đọc hơn, dễ kiểm soát asynchronous task hơn.
Ví dụ đoạn code sau:
let fetchImage = URLSession.shared.dataTask(.promise, with: url).compactMap{ UIImage(data: $0.data) }
let fetchLocation = CLLocationManager.requestLocation().lastValue

firstly {
    when(fulfilled: fetchImage, fetchLocation)
}.done { image, location in
    self.imageView.image = image
    self.label.text = "\(location)"
}.ensure {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
}.catch { error in
    self.show(UIAlertController(for: error), sender: self)
}
Nhìn vào ví dụ trên, Các task download ảnh và request location được quản lý rất tốt bởi PromiseKit, với các closure done, ensure, catch.
Các bạn có thể tìm hiểu thêm về PromiseKit tại đây

b. CryptoSwift

Nếu ứng dụng của các bạn cần sử dụng các method mã hoá thì CryptoSwift là một thư viện các bạn nên nghĩ đến đầu tiên. Nó cung cấp cho chúng ta rất nhiều method với nhiều dạng mã hoá khác nhau (MD5, SHA1, SHA256,…)
Các bạn có thể tìm hiểu thêm về CryptoSwift tại đây

c. SwiftDate


SwiftDate là một helper tuyệt vời cho chúng ta khi làm việc với Date trong iOS. SwiftDate có rất nhiều feature hay như date parsing, date formatting, date caculating, … Giúp chúng ta thao tác với Date một cách đơn giản, dễ dàng
Các bạn có thể tìm hiểu thêm về SwiftDate tại đây

d. SwiftyBeaver

Nếu các bạn đang tìm kiếm 1 thư viện logging cả trong quá trình development và production, thì SwiftyBeaver là một sự lựa chọn rất tốt. SwiftyBeaver cung cấp cho chúng ta khả năng log rất đa dạng:
  • Trong quá trình phát triển:
  • Colored logging to Xcode Console: log ra console với màu mè hoa lá, để chúng ta dễ nhìn log hơn
  • Colored logging to File: log ra file để chúng ta có thể xem lại log
  • Trong thời kỳ sản phẩm đã release:
  • Encrypted Logging to SwiftyBeaver Platform: SwiftyBeaver cung cấp service crypto cloud để chúng ta mã hoá và upload log của App lên cloud của SwiftyBeaver
Các bạn có thể tìm hiểu thêm về SwiftyBeaver tại đây

e. SwiftyJSON

Swift là ngôn ngữ rất tuyệt vời, nó có yêu cầu rất nghiêm ngặt đối với các loại type. Điều này là rất tốt để giúp chúng ta tránh khỏi những sai lầm, tuy vậy nó lại thành trở ngại rất lớn khi làm việc với JSON, bởi JSON không hề rõ ràng về các kiểu dữ liệu bên trong nó. Chính vì vậy, làm việc với JSON chưa bao giờ là dễ dàng trong Swift. SwiftyJSON là thư viện giúp chúng ta làm việc với JSON một cách dễ dàng hơn, tránh được các khâu unwrap optional rắc rối.
Các bạn có thể tìm hiểu thêm về SwiftyJSON tại đây

III. Kết luận

Trên đây tôi đã giới thiệu đến các bạn các thư viện tốt nhất được viết bằng Swift cho iOS. Mỗi thư viện bên trên phục vụ một mục đích khác nhau, tuỳ vào trường hợp cụ thể mà chúng ta sẽ quyết định xem sử dụng thư viện nào hợp với mình. Hi vọng bài viết này mang lại một chút thông tin hữu ích cho các bạn trong quá trình viết code.
Cuối cùng, xin cảm ơn các bạn đã theo dõi bài viết này, have a nice day ^_^!

Comments

Popular posts from this blog

MVVM và VIPER: Con đường trở thành Senior

Trong bài viết trước chúng ta đã tìm hiểu về MVC và MVP để ứng dụng cho một iOS App đơn giản. Bài này chúng ta sẽ tiếp tục ứng dụng 2 mô hình MVVM và VIPER . Nhắc lại là ứng dụng của chúng ta cụ thể khi chạy sẽ như sau: Source code đầy đủ cho tất cả mô hình MVC, MVP, MVVM và VIPER các bạn có thể download tại đây . MVVM MVVM có thể nói là mô hình kiến trúc được rất nhiều các cư dân trong cộng đồng ưa chuộng. Điểm tinh hoa của kiến trúc này là ở ViewModel , mặc dù rất giống với Presenter trong MVP tuy nhiên có 2 điều làm nên tên tuổi của kiến trúc này đó là: ViewModel không hề biết gì về View , một ViewModel có thể được sử dụng cho nhiều View (one-to-many). ViewModel sử dụng Observer design pattern để liên lạc với View (thường được gọi là binding data , có thể là 1 chiều hoặc 2 chiều tùy nhu cầu ứng dụng). Chính đặc điểm này MVVM thường được phối hợp với các thư viện hỗ trợ Reactive Programming hay Event/Data Stream , đây là triết lý lập trình hiện đại và hiệu

Alamofire vs URLSession

Alamofire vs URLSession: a comparison for networking in Swift Alamofire and URLSession both help you to make network requests in Swift. The URLSession API is part of the foundation framework, whereas Alamofire needs to be added as an external dependency. Many  developers  doubt  whether it’s needed to include an extra dependency on something basic like networking in Swift. In the end, it’s perfectly doable to implement a networking layer with the great URLSession API’s which are available nowadays. This blog post is here to compare both frameworks and to find out when to add Alamofire as an external dependency. Build better iOS apps faster Looking for a great mobile CI/CD solution that has tons of iOS-specific tools, smooth code signing, and even real device testing? Learn more about Bitrise’s iOS specific solutions! This shows the real power of Alamofire as the framework makes a lot of things easier. What is Alamofire? Where URLSession can be found within the s

Fileprivate vs private: Giải thích sự khác biệt

Fileprivate vs private in Swift: The differences explained Fileprivate and private are part of the access control modifiers in Swift. These keywords, together with internal, public, and open, make it possible to restrict access to parts of your code from code in other source files and modules. The private access level is the lowest and most restrictive level whereas open access is the highest and least restrictive. The documentation of Swift will explain all access levels in detail to you, but in this blog post, I’m going to explain the differences between two close friends: fileprivate and private. Build better iOS apps faster Looking for a great mobile CI/CD solution that has tons of iOS-specific tools, smooth code signing, and even real device testing? Learn more about Bitrise’s iOS specific solutions! Open access is the highest (least restrictive) access level and private access is the lowest (most restrictive) access level. This will improve readability and mak