We open-source a lot of things at Venmo, and we also use a lot of open-source libraries. To show some appreciation to all of the open-source maintainers and contributors out there, we thought it might be cool to share a list of open-source libraries and tools that the Venmo iOS team relies on. Thank you everyone out there who has contributed to these projects and other projects out there. Here’s to a great 2015!
- 1PasswordExtension adds 1Password support to our login. (Psssst... Look out for it in our next release!)
- AFNetworking is great for all things networking, but we especially like
UIImageView+AFNetworking
for async image loading. - Alcatraz is the package manager that brings XVim, FuzzyAutocomplete, GitGutter, etc. to Xcode. Such a must have.
- BZGFormViewController is great for simple forms that require validation. We use it in our app for our sign up and edit profile views.
- BZGMailgunEmailValidation is perfect if you use Mailgun for email validation.
- BlocksKit because
dismissWithClickedButtonIndex:animated:
delegate methods are no fun at all. Besides, who “clicks” on an iOS device? - Braintree allows our users to pay via Venmo on apps like YPlan.
- CMPopTipView has been useful when we want to draw attention to a new feature that we added.
- CocoaPods is how we manage all of our dependencies, including private pods. Can’t wait for their 0.36 release which supports Swift!
- DAZABTest provides a super simple API to do basic A/B tests.
- Expecta is a great matcher framework that makes your tests read like English.
expect(myTests).toNot.beEmpty()
- Facebook-iOS-SDK makes it easier our users to sign up and find friends to start using Venmo with.
- FLEX is built into all of our debug and dogfood builds, and it makes finding and fixing UI bugs so much fun and so much easier.
- FuzzyAutocomplete because Cocoa API’s is so verbose.
initRecurrenceWithFrequency:interval:daysOfTheWeek:daysOfTheMonth:monthsOfTheYear:weeksOfTheYear:daysOfTheYear:setPositions:end:
anyone?
- FXBlurView makes it super easy to have your own blurred views to match iOS 7 and 8’s frosty look.
- FrameAccessor is perfect for the lazy programmer who would prefer to type
view.width = 50
intead ofCGRect newFrame = view.frame; newFrame.size.width = 50; view.frame = newFrame;
- GBDeviceInfo tells us useful things about the device our app is running on so we can optimize a little for older devices, etc.
- GitGutter shows you what lines were changed, added, and removed right in Xcode’s gutter!
- Godzippa has been immensely helpful when uploading large amounts of data to our API.
- iRate because we love hearing back from our users. <3
- JTSImageViewController is what you see when you tap on a picture on a friend’s profile. We love the interaction where you can flick the image off the screen.
- KGStatusBar is used to show “offline mode” in the status bar for Braintree merchants to test out Venmo integration. Super simple to use!
- KIF makes writing automated UI tests such a fun experience. It looks like magic!
- libextobjc provides us with things like
@weakify
and@strongify
, and one of our favorites isEXTKeyPathCoding
which lets us avoid@"stringlyTyped"
. For example,[NSSortDescriptor sortDescriptorWithKey:@keypath([Story new], createdDate) ascending:NO]
which gets checked at compile time, as opposed to[NSSortDescriptor sortDescriptorWithKey:@"createdDate" ascending:NO]
which is prone to typos and harder to refactor. - Mantle makes converting JSON reponses to and from objects a breeze.
- MCDateExtensions adds some nice additions to NSDate that make it a lot more manageable to do date computations, etc.
- Mixpanel has a really nice dashboard and handles all of our analytics.
- MMDrawerController is really easy if you want add drawer navigation to your app. We’re looking to bid farewell to our hamburger button in the near future though.
- MZFormSheetController brings iPad’s UIModalPresentationFormSheet to iPhone.
- Nocilla is our favorite HTTP stubbing libary because it has such a simple and elegant API.
- NSURL+QueryDictionary makes it easy to convert URL query params to a dictionary and vice versa.
- ObjectiveSugar is exactly as it sounds. Add some sugar to your Objective-C!
- OCMock because dependencies. Though with Swift and its focus on value types, we might be using fewer mocks!
- oh-my-zsh because all we can say is, “OH MY ZSHELL!”
- PSTAlertController provides an API similar to iOS 8’s UIAlertController, and it’s backwards compatible with iOS 7.
- ReactiveCocoa is a different way of thinking about architecture, and we like it. We’re moving more and more towards FRP.
- Specta allows our specs to read like English and have better structure.
it(@"should allow the user to log in", ^{ ... });
instead oftestUserShouldBeAbleToLogIn
. We think it’s a lot nicer thanReadingABunchOfCamelCasedSentences. - SSKeychain provides an elegant abstraction around Apple’s Keychain Services API.
- SVProgressHUD is basically every spinning progress loader in our app.
- TOWebViewController is so nice for the few web views that we have in our app, although we’re slowly but surely moving away from them.
- TTTAttributedLabel appears over and over in our app. Any stylized, tappable looking sections of UILabel’s in our app is probably a
TTTAttributedLabel
. - Underscore.m is one of my personal favorites. Never write a for-loop again.
- xcpretty makes our Travis CI build output so much cleaner and prettier.
- XVim I think I’m the only one who thinks this on my team, but it’s impossible to navigate quickly around Xcode without this.
A huge thank you to everyone who contributes to open-source. It makes development so much more collaborative, faster, and fun.
Giving back
Since we use so many open-source libraries, we wanted to give a little back to the community. We hope you find something that you like!
- DryDock is basically our internal “App Store” for distributing beta builds to the rest of the team.
- synx reorganizes your Xcode project folder to match your Xcode groups, because Xcode doesn’t already do that for some reason.
- slather lets you measure test coverage in your iOS projects and optionally hook it into CI.
- VENCalculatorInputView is the calculator keyboard for the amount field of a payment flow.
- VENPromotionsManager is what we use for location / time dependent events, like our SXSW promotion last year.
- VENSeparatorView is the zig-zaggy line that shows up in your payment feed for cash out events, etc.
- VENTokenField is the Messages.app style recipients field that we use in our payment and invite flows.
- VENTouchLock is our Touch ID + pin code integration.
- VENVersionTracker is what we use to auto-update our dogfood versions. We’re looking to move to using HockeyApp’s equivalent though.
- Venmo-iOS-SDK lets you build apps that integrate Venmo payments really easily.