Flooz uses CocoaPods as dependency manager, which automates and simplifies the process of using 3rd-party libraries.
$ git clone https://github.com/larafale/flooz-ios.git
$ cd flooz-ios
$ pod install
$ open Flooz.xcworkspace
CocoaPods 1.+ and Xcode 8 are required to build Flooz.
Name | Version | Notes |
---|---|---|
ActionSheetPicker-3.0 | 2.2.0 | Quickly reproduce the dropdown UIPickerView / ActionSheet functionality on iOS |
AFNetworking | 3.1.0 | A delightful networking framework for iOS, OS X, watchOS, and tvOS |
Branch | 0.12.3 | Branch helps mobile apps grow with deep links / deeplinks that power referral systems, sharing links and invites with full attribution and analytics |
CardIO | 5.3.2 | Card.io provides fast, easy credit card scanning in mobile apps |
Crashlytics | 3.7.2 | Part of Twitter Fabric, Crashlytics offers the most powerful, yet lightest weight crash reporting solution for iOS |
EAIntroView | 2.9.0 | Highly customizable drop-in solution for introduction views |
Fabric | 1.6.7 | With Fabric, you’ll have instant access to the same features you love within Crashlytics and more. Get a snapshot of your app’s health in real-time, understand what’s truly important and fix the most prevalent crashes |
FBSDKCoreKit | 4.13.1 | Used to integrate iOS apps with Facebook Platform |
FBSDKLoginKit | 4.13.1 | Used to integrate iOS apps with Facebook Platform |
FBSDKMessengerShareKit | 1.3.2 | Used to integrate iOS apps with Facebook Messenger Platform |
FBSDKShareKit | 4.13.1 | Used to integrate iOS apps with Facebook Platform |
FXBlurView | 1.6.4 | UIView subclass that replicates the iOS 7 realtime background blur effect, but works on iOS 5 and above |
GBDeviceInfo | 4.1.0 | Detects the hardware, software and display of the current iOS or Mac OS X device at runtime |
HHRouter | 0.1.9 | URL Router for iOS. Clean, Fast & Flexible. Inspired by ABRouter & Routable iOS |
HMSegmentedControl | 1.5.2 | A drop-in replacement for UISegmentedControl mimicking the style of the segmented control used in Google Currents and various other Google products |
iCarousel | 1.8.2 | A simple, highly customisable, data-driven 3D carousel for iOS and Mac OS |
IDMPhotoBrowser | 1.8.4 | Photo Browser / Viewer inspired by Facebook's and Tweetbot's with ARC support, swipe-to-dismiss, image progress and more |
JPSVolumeButtonHandler | 1.0.1 | JPSVolumeButtonHandler provides an easy block interface to hardware volume buttons on iOS devices |
JTHelper | 0.3.0 | List of common helpers for iOS projects |
JTSImageViewController | 1.5.1 | An interactive iOS image viewer that does it all: double tap to zoom, flick to dismiss, et cetera |
libPhoneNumber-iOS | 0.8.14 | iOS port from libphonenumber (Google's phone number handling library) |
MGSwipeTableCell | 1.5.5 | An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions |
Mixpanel | 3.0.0 | iPhone tracking library for Mixpanel Analytics |
MZFormSheetController | 3.1.3 | MZFormSheetController provides an alternative to the native iOS UIModalPresentationFormSheet, adding support for iPhone and additional opportunities to setup controller size and feel form sheet |
NSDate+Calendar | 0.0.9 | NSDate categories to access date components and many more |
OneSignal | 1.13.3 | OneSignal is a free push notification service for mobile apps. This plugin makes it easy to integrate your native iOS app with OneSignal |
PonyDebugger | 0.4.5 | Remote network and data debugging for your native iOS app using Chrome Developer Tools |
PPHelpMe | 1.0.2 | List of common helpers for iOS projects |
RDVTabBarController | 1.1.9 | Highly customizable tabBar and tabBarController for iOS |
SDWebImage | 3.8.1 | Asynchronous image downloader with cache support as a UIImageView category |
SMPageControl | 1.2 | A drop in replacement for UIPageControl with a slew of additional customization options |
Stripe | 8.0.0 | Stripe bindings for iOS and OS X |
TTTAttributedLabel | 2.0.0 | A drop-in replacement for UILabel that supports attributes, data detectors, links, and more |
TUSafariActivity | 1.0.4 | A UIActivity subclass that opens URLs in Safari |
UICKeyChainStore | 2.1.0 | UICKeyChainStore is a simple wrapper for Keychain on iOS. Makes using Keychain APIs as easy as NSUserDefaults |
UIFloatLabelTextField | 1.2.5 | A subclassed UITextField that follows the Float Label UI design pattern |
VCTransitionsLibrary | 1.5.0 | A collection of iOS7 animation controllers and interaction controllers, providing flip, fold and all kinds of other transitions |
VENCalculatorInputView | 1.5.4 | Calculator keyboard used in the Venmo iOS app |
#####The models are initialized from API calls, several kinds of models are available:
FLAlert
In-App alert object (appear from top)FLComment
Transaction and pot comment objectFLCountry
Country object with flag, phone prefix...FLCreditCard
Credit card object with holder, card number, expires...FLFriendRequest
Pending friend request objectFLInvitationTexts
Invitations texts used for app sharing (Fb, twitter, mail, sms)FLNotification
Notification object (text, cAt)FLPreset
Preset object used for initalizing new collect or new flooz view from TriggersFLReport
Report object used when sending user or transaction report to the APIFLShopItem
Shop item can be a product or categoryFLSocial
Social data from collect and transactions (nbLikes, nbComments, ...)FLTexts
Texts sent from API, used to manage all kinds of content within the appFLTransaction
Transaction object (can be a pot)FLTrigger
Trigger object with next triggers, data and kindFLUser
User object with all visible informations
The UI part of Flooz is based entirely on code, no xibs or storyboards are used in the project, almost every view is a specific class that can be found in the Views folder. Lot of widgets are available in this folder including but not only:
FLActionButton
&FLBorderedActionButton
Button widget with flooz colorsFLImageView
ImageView subclass handling setting image from URLFLPhoneField
Phone number input with country pickerFLTableView
TableView subclass with flooz colorsFLTextField
TextField subclass handling many kinds of type (number, text, email, date, url, ...) with validator and floatLabel
Controllers used in the project are subclasses of GlobalViewController or BaseViewController, wich handle view template generation (backgroundColor, contentView, navigationBar, navigationItems).
Api documentation can be found here, it contains all routes and their parameters. AFNetworking is used for all network requests and all responses are formatted in JSON. User access token is added, with several other infos (device, version, os, ...), in every requests as an URL parameter. The Flooz singleton contains all requests, user data, texts sent from api and socket handler.
Succeeding requests will return one of the following template:
-
Unique object
{ code: 200, item: Object, triggers: [Trigger], popup: PopupData }
-
List of objects
{ code: 200, items: [Object], triggers: [Trigger], popup: PopupData }
-
List of objects with pagination
{ code: 200, items: [Object], next: NextURL triggers: [Trigger], popup: PopupData }
Sockets are used in this project for live events or updating information, sockets are handled with SocketIO. Two sockets feed are listening:
event
can contain popup or triggersfeed
update number of unread notifications, can also contain triggers
A Trigger is a special object sent by the API, it's used for multiple purposes and is defined by a key. Triggers will be encapsulated in an array, each element of this array will be executed one after another by the FLTriggerManager, only some specific button Triggers or Pickers and the Triggers generated in the app are executed alone by the same manager.
{
key: 'namespace:view:action',
delay: 0,
data: {},
triggers: [Trigger]
}
The key is a string formatted in three part with namespace first, then view and finally an action. Only the view part can be left empty. Between each component a :
is required.
Key format: namespace:view:action
- namespace: represent the context of the trigger (ex: app, pay, card, shop, settings, ...)
- view: define the specific view in the namespace where the trigger will take effect
- action: define the kind of effects the trigger will have; several actions are available:
- ask (request permissions (notifs, facebook)
- call (http::call used to make http request on the API or a specific URL)
- clear (clear local data)
- hide (hide specific view defined by the namespace and the view)
- login (force user identification)
- logout (logout current user from the app)
- open (open specific URL with native phone view)
- picker (pick specific content and send it through its next triggers)
- send (send images from current transaction or pot)
- show (show specific view defined by the namespace and the view)
- sync (force updating specific data)
Execution of a trigger can be delayed with this parameter. Value has to be set in seconds.
Parameters specific to each trigger. Learn more using the push playground here.
Array of Triggers executed one after another when the current Trigger is done.
Lots of buttons within the app use Triggers to do actions and are sets by the API. It's the case for all home menu buttons, popup buttons, accept/refuse/participate/close buttons, ...
The payment process in any part of the app is actually based on triggers sent by one http request. The API respond with a list of Triggers starting with a confirmation popup, then authenticate user using fingerprint or secure code and finally process the payment (if necessary a process where the user can register his credit card or cash-in from audiotel can be added in the process).
Pickers are specific kind of triggers used for picking an user, an image or a scope and send it in the data of its successTrigger.
Flooz can be opened using a url scheme and in this url can be inserted Triggers that will be executed when the app is running and the user authenticated.
URL: flooz://
In push notifications or internal notifications Triggers are used to handle what the app has to do when the user interacts with these notifications.
Flooz is owned and maintained by the Flooz SAS.
If you believe you have identified a security vulnerability with Flooz, you should report it as soon as possible via email to dev@flooz.me. Please do not post it to a public issue tracker.