Whether we like it or not, iOS (and OS X) development has significantly evolved during the past years. A big part of that is how we write code, reuse it and rely on open source to build great products.
So I want to recommend some libraries and frameworks that make developers’ lives easier.
Reusing Code
The days when a developer reinvents the wheel over and over again should be gone (at least for us iOS developers). One should always know what’s available on the internet before starting to do anything (and I’m referring to non-trivial tasks).
Why? You can find a good open source project that does exactly what you need. Even if you don’t, people who tried to do similar things definitely encountered issues you might encounter. Some of them found good solutions, other just listed bottlenecks, concerns. Adding this info to the one you started from determines some boundaries of the potential solution. This global experience is priceless.
Global Delegation
We used to have each development team having to build a networking system, an image caching system or the classic logging component. Now, we should be relying on other people who are specialists in a certain area.
For example, most of the people no longer worry about networking, because Mattt Thompson does (with the great AFNetworking). We just need to keep up with him and guys like him, bringing in our own contribution to the community. It’s only decent to take and give back in a balanced way.
The great advantage of this is developers can focus on their apps’ business challenges, on a great architecture, as solutions for the most common problems are already out there.
I build better apps; faster.
Now that we have so many libraries and frameworks available, a new question arises, “which libraries to use?”
This is still subject to subjectivism, but there are definitely some solutions out there that are universally accepted by the iOS community.
At last, I want to briefly list the most common ones I use:
- Networking: AFNetworking – There aren’t too many projects that don’t require some sort of network communications & AFNetworking is king
- Blocks: BlocksKit – UIKit is still missing a bunch of places where blocks are super useful (hello UIAlertView & UIActionSheet), & BlocksKit is my go to library
- Support/FAQ/Feedback: AppbotX – No other choice, of course
- Analytics: Google Analytics – Again there are heaps of options for analytics, but I stick with Google Analytics for the price & integration with your website
- Side Menu: ECSlidingViewController – Another one with heaps of options, but I have found this on the most reliable
- Core Data: MagicalRecord – Core Data requires a lot of boiler plate, which MagicalRecord wraps up nicely. Great if you also use Active Record with Ruby on Rails
- Progress: MBProgressHUD – A nice easy was to drop in a progress dialog
- Images: SDWebImage – A nice easy way to fetch (& cache) remote images
- iOS Simulator: iOS-Sim – Command-line application launcher for the iOS Simulator
Now, the following are libraries and frameworks new iOS developers should learn.
Cocoapods, mother of all libraries – This awesome tool has made it very easy for developers to experiment, add, remove & update libraries and frameworks. Read this great article that will explain how Cocoapods works.
The Libraries & Frameworks
Development Tools
Functional Reactive Programming –
- ReactiveCocoa: Implementation of a paradigm that makes development easier
Toolkits –
- NimbusKit: Provides well-documented, modular components that solve a number of common iOS software requirements
- SSToolKit: Is a collection of well-documented iOS classes for making life easier
- APUtils: Collection of helpful categories for base Objective-C classes
Debugging –
- DCIntrospect: Small library of visual debugging tools for iOS
- PonyDebugger: Remote network & data debugging for your native iOS app using Chrome Developer Tools
- SimulatorRemoteNotifications: Library to send mock remote notifications to the iOS simulator
Logging –
- CocoaLumberjack: Fast & simple, yet powerful & flexible logging framework for OS X & iOS
Formatting –
- FormatterKit: Data formatting out of the box, for the sophisticated hacker set
- TransformerKit: A block-based API for NSValueTransformer, with a growing collection of useful examples
Unit Testing –
- Kiwi: A good BDD library for specs, expectations, mocks, stubs, async tests
- Specta: Another TDD/BDD library. Very similar to Kiwi. Works great together with Expecta & OCMock. Outmatches Kiwi with a good async testing feature & the possibility of writing easy to read tests (due to Expecta):
expect(op.retryCount).will.beGreaterThan(0); expect(error).willNot.beNil();
- Expecta: A Matcher Framework for Objective-C/Cocoa
- OCMock: Mock objects for Objective-C
- xctool: Very useful replacement for xcodebuild tool. It allows running Application Test targets from the command line & has a beautiful output
- Note: Read more about iOS Unit Testing
Code Documentation –
- Cocoadocs: Documentation for all Cocoapods projects
- appledoc: Objective-C code Apple style documentation set generator
Acknowledgements –
- Note: Listing the licenses of all the open source libraries used – VTAcknowledgementsViewController
Xcode Plugins (Missed to include these on my previous post) –
- KFCocoaPodsPlugin: XcodePlugin for CocoaPods with pod commands/console output, user notifications & code completion
- Snippets: A few code snippets from my Xcode arsenal
Communication & Data Handling
Networking –
- RestKit: Easy integration with REST web services based on AFNetworking
- Reachability: ARC & GCD Compatible Reachability Class for iOS & OS X. Drop in replacement for Apple Reachability
- CocoaAsyncSocket: For low level networking (TCP, UDP)
Browser –
- TSMiniWebBrowser: In-App web browsing support for iPhone apps
Image Caching –
- Fast Image Cache: New competitor for SDWebImage, claims to get the most out of image caching performance
Data Persistence –
- CoreData: Provides generalized & automated solutions to common tasks associated with object life-cycle & object graph management, including persistence
- fmdb For people that want just a SQLite wrapper
Keychain –
- SSKeychain: Simple Objective-C wrapper for the keychain that works on OS X & iOS
JSON –
- NSJSONSerialization: Class to convert JSON to Foundation objects & convert Foundation objects to JSON
- JSONKit: High performance JSON parser & serializer
XML –
- NSXMLParser: Notifies its delegate about the items (elements, attributes, CDATA blocks, comments, & so on) that it encounters as it processes an XML document
- Note: Oldie but goodie. How to choose the best XML parser for your project
Social –
- Facebook SDK + Documentation: Used to integrate iOS apps with Facebook Platform
- ShareKit: Drop in sharing features for all iPhone & iPad apps
Media
Image Processing –
- GPUImage: Great kit for image & video processing
Video
- VLCKit: Objective-C wrapper for libvlc, the famous tool for video playback, playlists, streaming & transcoding from VLC
- iOS VideoKit: Video playing & streaming framework
2D Gaming –
- cocos-2d: Cocos2d for iOS & OS X, built using Objective-C
UI (User Interaction)
UI Controls –
- UI7Kit: Super useful if you still support iOS 7 apps, enables apps to have a single design on all iOS versions, rather than having dedicated iOS 7 design & another one for prior versions. With one line of code, makes your UI 99% iOS7 like
- BPForms: Dynamic forms for iPhone & iPad iOS 6, 7 & later
- iRate: A handy class that prompts users of your iPhone or Mac App Store app to rate your application after using it for a while. Similar to Appirater, but with a simpler, cleaner interface & automatic support for iOS fast application switching
- SVPullToRefresh: Give pull-to-refresh & infinite scrolling to any UIScrollView with 1 line of code
- TTTAttributedLabel: A drop-in replacement for UILabel that supports attributes, data detectors, links, & more
- TWSReleaseNotesView: A simple way to show in-app release notes in your iOS applications
- Masonry: Harness the power of AutoLayout NSLayoutConstraints with a simplified, chainable & expressive syntax. Supports iOS & OS X Auto Layout
- Cocoa Controls: Great place to find open source controls
Helpers –
- iOS-Artwork-Extractor: Gain access to the icons used by Apple frameworks
Charts –
Map –
- CCHMapClusterController: High-performance map clustering with MapKit for iOS & OS X. Integrate with 4 lines of code
- ADClusterMapView: MKMapView with clustering
- REMarkerClusterer: REMarkerClusterer creates & manages per-zoom-level clusters for large amounts of markers
PDF –
- PDFTouch SDK: A fast & customizable Objective-C framework for reading & rendering PDF files in iPhone & iPad apps
Maintenance
Crash Reporters –
- PLCrashReporter: Backbone tool of all Crash Reporting solutions
- Crashlytics: Best Crash Reporting tool I ever worked with. Light-weight, fast, never failed me. Plus the support team is very responsive. Can’t value enough how much they helped all my apps get better. For an easy integration, there is this pod that publicizes the framework – CrashlyticsFramework
- Splunk: Formerly Bugsense, the Splunk SDK will collect crash, performance & usage data for your app & send it to Splunk’s Cloud servers
- Crittercism: Monitor, prioritize, troubleshoot, & trend your mobile app performance to accelerate your mobile business
- QuincyKit Live crash report management for iOS & OS X
Performance Monitoring –
- New Relic: Complete performance visibility for all aspects of your software environment
Testing & Distribution –
- BugshotKit: iOS in-app bug reporting for developers & testers, with annotated screenshots & the console log
- TestFlight: Beta testing makes it easy to invite users to test your iOS apps before you release them on the App Store.
- HockeyApp: Build & upload your apps to HockeyApp. Testers can now download & install them. You have full control of who can access which app.
Cheers and you’re welcome! Happy coding.