Worthy iOS libraries (v1)

06 Nov 2013

Whether we like it or not, iOS (and MacOS 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. Note: Apple has recently added a submission phase where the developers must say if they used 3rd party content, including open source. A good practice seems to be (and a fair one to those who spend their time in doing open source) to list the open sources used together with their VTAcknowledgementsViewController is a great tool for that.
We build better apps ... faster.

Cocoapods, mother of all libraries

This awesome tool has made it very easy for developers to experiment, add, remove and update libraries and frameworks. Not to mention the 2700+ and growing repos that can be included in a project with a single line of text. Plus documentation](http://cocoadocs.org/). See a great article that will explain how Cocoapods works. You no longer have to read a n-page document on how to hook a library to a project, fix warnings and stuff, the pods come out of the box.

Libraries are like steaks. We like them well done

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, projects from each and every one of us could and should learn.

The libraries and frameworks (finally)

Objective-C

  1. Development tools

    1. Functional Reactive Programming
      1. ReactiveCocoa - implementation of a paradigm that makes development easier. Strong points:
        • replacement for KVO;
        • possibility of chaining operations;
        • handling asynchronous or event-driven data sources
    2. Toolkit
      1. NimbusKit
      2. SSToolKit
      3. BlocksKit - block based APIs for some system classes and more
      4. APUtils - great collection of utils I am currently using
      5. GBDeviceInfo - retrieve device info
    3. Debugging
      1. DCIntrospect - for UI debugging
      2. PonyDebugger
      3. SimulatorRemoteNotifications - allows testing notifications on the simulator (faking them)
    4. Logging
      1. CocoaLumberjack - easy to use, super extensible and great performance logging component
    5. Formatting
      1. FormatterKit - data formatting out of the box (addresses, distance between 2 points, time intervals, ...)
      2. TransformerKit
    6. Unit Testing (read more about iOS Unit Testing here)
      1. Kiwi - good BDD library (specs, expectations, mocks, stubs, async tests). I did have to drop it due to async tests failing to work as expected

      2. Specta - another TDD/BDD library. Very similar to Kiwi. Works great together with Expecta and OCMock. Outmatches Kiwi with a good async testing feature and the possibility of writing easy to read tests (due to Expecta):

        expect(op.retryCount).will.beGreaterThan(0);
        expect(error).willNot.beNil();
        
      3. Expecta - expectations for unit tests

      4. OCMock

      5. OHHTTPStubs

      6. xctool - very useful replacement for xcodebuild tool. It allows running Application Test targets from the command line and has a beautiful output. Read more

    7. Code Documentation
      1. Cocoadocs - documentation for all Cocoapods projects
      2. appledoc - command line tool for generating "Apple like" code documentation from comments
    8. Acknowledgements

      1. Listing the licenses of all the open source libraries used is a recommendation (might become a must in the near future). VTAcknowledgementsViewController
    9. Xcode plugins
      1. Alcatraz - Xcode package manager
      2. KFCocoaPodsPlugin - CocoaPods plugin, requires Xcode 5
      3. VVDocumenter-Xcode - great plugin that eases code documentation. You just need to press the shortcut (by default ///) and the code section below to the cursor gets documented (template). Then fill in the missing info - it's very easy and it looks great.
      4. XcodeColors - used with CocoaLumberjack to highlight errors and warnings
      5. HOStringSense-for-Xcode - takes care of string escaping
      6. KSImageNamed-Xcode - autocomplete for image names
      7. Snippets - Mattt Thompson gives away some of the snippets he uses. More about Xcode Snippets
  2. Communication and data handling
    1. Networking
      1. AFNetworking - the best networking library for iOS and more than that, a true model on how an open source project should be run. It's Github repo is a great place to learn.
      2. RestKit - easy integration with REST webservices based on AFNetworking
      3. Reachability
      4. CocoaAsyncSocket - for low level networking (TCP, UDP)
      5. deprecated, but worth mentioning as it used to be #1 ASIHTTPRequest
    2. Model
      1. Mantle - model framework for easily mapping different format info (i.e. JSON, XML, …) to model objects
    3. Browser
      1. KINWebBrowser or TSMiniWebBrowser
    4. Image caching
      1. SDWebImage - great extensible image caching, good performance
      2. Fast Image Cache - new competitor for SDWebImage, claims to get the most out of image caching performance
    5. Data Persistence
      1. CoreData
      2. MagicalRecord - great wrapper for CoreData, makes it easy for everybody to use it
      3. fmdb - for people that want just a SQLite wrapper
    6. Keychain
      1. SSKeychain
    7. JSON
      1. NSJSONSerialization
      2. JSONKit - high performance JSON parser and serializer
      3. comparision between several JSON libs
    8. XML
      1. NSXMLParser
      2. How to choose the best XML parser for your project
    9. HTML
      1. Ono
    10. Social
      1. Facebook SDK + documentation
      2. ShareKit
  3. Media
    1. Gallery
      1. MHVideoPhotoGallery
    2. Image processing
      1. GPUImage - great kit for image and video processing
    3. Video
      1. VLCKit - ObjC wrapper for libvlc, the famous tool for video playback, playlists, streaming and transcoding from VLC
      2. iOS VideoKit - video playing and streaming framework
    4. 2D gaming
      1. cocos-2d
  4. UI
    1. UI controls
      1. UI7Kit - super useful, enables apps to have a single design on all iOS versions, rather than having dedicated iOS 7 design and another one for prior versions With one line of code, makes your UI 99% iOS7 like.
      2. BPForms - Dynamic forms for iPhone/iPad - iOS 6, 7 and later
      3. iRate
      4. SVProgressHUD or MBProgressHUD
      5. SVPullToRefresh
      6. TTTAttributedLabel
      7. TWSReleaseNotesView - display the "What's new" section directly from the AppStore to users that have upgraded.
      8. Masonry - wrapper for Autolayout
      9. many more on Cocoa Controls - great place to find open source controls
    2. Helpers
      1. iOS-Artwork-Extractor - gain access to the icons used by Apple frameworks
    3. Charts
      1. CorePlot
      2. iOSPlot
    4. Map
      1. CCHMapClusterController - great performant tool for clustering map pins
      2. ADClusterMapView
      3. REMarkerClusterer
    5. PDF
      1. PDFTouch SDK
  5. Maintenance
    1. Crash reporters
      1. PLCrashReporter - backbone tool of all Crash Reporting solutions
      2. Crashlytics (Fabric) -now available via CocoaPods (look for Crashlytics and Fabric)
      3. Bugsense
      4. Crittercism
      5. QuincyKit
    2. Performance Monitoring
      1. New Relic
    3. Tracking
      1. Answers (Fabric)
      2. Google Analytics
      3. Flurry Analytics
    4. Testing and distribution
      1. BugshotKit - in app bug reporting for devs and QAs, generates editable screenshots and collects logs
      2. Crashlytics Beta - great for distribution as a replacement for the gone TestFlight
      3. TestFlight - no longer available
      4. HockeyApp

Swift

  1. Development tools
    1. awesome-swift - a huge list of Swift resources (libraries and more)
    2. Functional Reactive Programming
      1. ReactiveCocoa: Although ReactiveCocoa was started as an Objective-C framework, as of version 3.0, all major feature development is concentrated on the Swift API.

      2. RxSwift

    3. Unit Testing
      1. Quick
    4. Xcode plugins
    5. Build Time Analyzer - break down of Swift build times
      1. Swift Refactorator - by default, Xcode does not support Refactoring for Swift. This plugin adds the support
      2. Swift Code Snippets
  2. Communication and data handling
    1. Networking
      1. Alamofire
    2. Image Caching
      1. Kingfisher
    3. JSON
      1. SwiftyJSON
  3. UI
    1. SnapKit - the Swift version of Masonry (same team)
    2. Charts

Happy coding!

Tags: AFNetworking analytics BPForms cache caching Cocoa controls cocoadocs CocoaLumberjack Crashlytics CrashlyticsFramework debug dev developer image JSON keychain library logging MagicalRecord Masonry media open source plugins ReactiveCocoa reuse SDWebImage social tool UI7Kit unit test Xcode XML


Loading...