✅ = we use it in coinbase-ios
- SnapKit Swift auto layout DSL. Simplifies defining UI constraints.
- Cartography Another declarative auto layout DSL.
- PureLayout Extends UIView/NSView, NSArray, and NSLayoutConstraint with more Auto Layout APIs.
- Swinject A lightweight dependency injection framework for Swift.
- Cleanse Square's DI framework, built by Uber engineers (like Needle). It is designed from the ground-up with developer experience in mind. It takes inspiration from both Dagger and Guice.
- Needle Uber's Dagger
- Weaver Declarative, easy-to-use and safe Dependency Injection framework for Swift
- Typhoon Powerful dependency injection for Cocoa and CocoaTouch.
HTTP
- ✅Alamofire An HTTP networking library written in Swift.
Reactive Programming
Persistence
- ✅Core Data Save your application’s permanent data for offline use, cache temporary data, and add undo functionality to your app.
- Realm Realm is a mobile database: a replacement for Core Data & SQLite
- ✅MagicalRecord ActiveRecord for Core Data.
- HanekeSwift A lightweight generic cache for iOS and tvOS written in Swift 4.
- Disk A powerful and simple file management library built with Apple's iOS Data Storage Guidelines in mind.
- PINCache Pinterest's non-deadlocking parallel object cache.
- Hyper Cache
- Spotify PersistentCache An LRU cache which makes use of the file system to store files as well as inserting a cache header into each file.
Data Architecture
- ReSwift Redux-like implementation of the unidirectional data flow architecture in Swift.
Navigation / Deep Linking / Routing
- URLNavigator Navigate through view controllers by URLs.
- DeepLinkKit
- RxFlow Navigation framework for iOS applications based on a Reactive Flow Coordinator pattern.
Logging
- os_log The unified logging system provides a single, efficient, performant API for capturing messaging across all levels of the system.
- SwiftyBeaver Colorful, flexible, lightweight logging for Swift.
- CocoaLumberjack
Information
Localization
Information
Animation
- Lottie Natively render After Effects vector animations.
Meta-Programming
- ✅Sourcery A code generator for Swift language, built on top of Apple's own SourceKit. It extends the language abstractions to allow you to generate boilerplate code automatically.
- ✅XCTest Apple's own framework to write unit tests for your Xcode projects that integrate seamlessly with Xcode's testing workflow.
- Quick A BDD framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo.
- xctool A drop-in replacement for xcodebuild test that adds a few extra features, like parallelism and output formatters.
- iOS Snapshot Test Case Snaposhot testing.
- Cuckoo Boilerplate-free mocking framework for Swift, DSL similar to Mockito.
- Appium XCUITest
Code Formatting
- https://nshipster.com/swift-format/
- SwiftFormat Library and command-line tool for reformatting Swift code.
- Has an Xcode editor extension to format on save: https://github.com/nicklockwood/SwiftFormat#xcode-source-editor-extension
- Swimat Xcode plug-in to format your Swift code.
- SwiftRewriter
Lint
- ✅SwiftLint A tool to enforce Swift style and conventions, loosely based on GitHub's Swift Style Guide.
Build Systems
- ✅xcodebuild Xcode's build system
- XCBuild Facebook's Xcode-compatible build tool with the goal of providing faster builds and better documentation of the build process.
- Buck A build system developed and used by Facebook.
- Bazel A fast, scalable, multi-language and extensible build system
- xcpretty A fast and flexible formatter for xcodebuild output
Information
Package Managers
- ✅CocoaPods A dependency manager for Swift and Objective-C Cocoa projects.
- Carthage A decentralized dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods.
- Mint Manages Swift CLI packages (e.g. swiftformat)
Information
Static Analysis
- SonarSwift Analyzes Swift code and find code smells, bugs and security vulnerabilities.
Continuous Integration
Deployment | Distribution
- ✅fastlane Build automation, beta deployment, app store deployment, code signing
Event Tracking & Analytics
Production Crash & Error Monitoring
Beta Services
- ✅TestFlight TestFlight makes it easy to invite users to test your apps and collect valuable feedback before releasing your apps on the App Store.
- Beta by Crashlytics
- HockeyApp
Bug Reporting
- ✅Buglife Allows users to report bugs with relevant information.
Documentation
- Jazzy Command-line utility that generates documentation for Swift from comments and the AST representation of your code.
Information
Hot Reloading
- http://johnholdsworth.com/injection.html
- https://medium.com/@robnorback/the-secret-to-1-second-compile-times-in-xcode-9de4ec8345a1
Essential Concepts
- Swift
- Foundation
- UIKit
- Auto Layout
- UIStackView
- Grand Central Dispatch
- Logging
- Frameworks
- Layout Anchors
Architectural Patterns
- MVC
- MVP
- MVVM
- VIPER
Random
- Xcode key shortcuts cheat sheet
- Reverse-Engineering iOS Apps
- Optimizing Swift Build Times
- DI in Swift with Protocols
- Architectural Patterns Compared
- Can I use VSCode?
- Xcode Source Editor Extensions (what happened to Alcatraz)
- What happened to Fabric?
- Swift developers really hate force unwrapper
- Does Swift have modules / namespacing? Kind of...
- Programmatically Creating Constraints
- Why doesn't Swift have write reflection (which would enable easier mocking)?
Philosophy
Things I think iOS engineers think
- Don't force uwrap
- Don't bother too much with error handling
- It's very important to never crash, protect the end user
- Unit test isolation isn't that valuable
- Use Xcode
- We like enums and switch statements
- Defensive null check (very important to never crash)
Other Resources