Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Alamofire

2,563 views

Published on

Abandonner Alamofire, ou comment Alamofire nous a laissé tomber. Par Emilien Stremsdoerfer

Published in: Software
  • Be the first to comment

  • Be the first to like this

Alamofire

  1. 1. ABANDONNER ALAMOFIRE (OU COMMENT ALAMOFIRE NOUS A LAISSÉ TOMBER)
  2. 2. def shared_pods pod 'Alamofire', '~> 3.3.0' pod 'Appboy-iOS-SDK', '2.21.0' pod 'Branch', '0.11.16' pod 'CLImageEditor', '0.1.4' pod 'CMPopTipView', '2.2.0' pod 'Crashlytics', '~> 3.8.2' pod 'CRToast', '0.0.9' pod 'DraggableCollectionView', '0.1' pod 'DZNEmptyDataSet', '1.7.3' pod 'DZNSegmentedControl', '1.3.2' pod 'Fabric', '~> 1.6.9' pod 'FBSDKCoreKit', '4.15.1' pod 'FBSDKLoginKit', '4.15.1' pod 'FBSDKShareKit', '4.15.1' pod 'InstagramKit', '3.7' pod ‘StreemMapper' pod 'RealmSwift', ' ~> 2.0.0' pod 'SDWebImage/WebP', '3.8.1' pod 'SimpleAuth/Meetup', '0.3.2' pod 'SnapKit', '~> 0.22.0' pod 'Starscream', '1.1.3' pod 'SVProgressHUD', '1.1.3' pod 'SVWebViewController', :git => 'https://github.com/TransitApp/SVW end DÉPENDENCES COCOAPODS
  3. 3. PROBLÈMES DES LIBRAIRIES EXTERNES ▸ Code non maitrisé ▸ Bugs potentiels à chaque mise à jour ▸ Potentiel abandon
  4. 4. PROBLÈMES AVEC ALAMOFIRE ▸ Complexe à appréhender ▸ Difficile à forker ▸ Ne fournit pas d’architecture ▸ Besoin d’autres librairies (JSON, Rx,…)
  5. 5. REQUETE HTTP ALAMOFIRE Alamofire.request("https://api.deezer.com/track/123") .responseJSON { (response:DataResponse<Any>) in //Manage JSON response }
  6. 6. PROBLÈMES AVEC ALAMOFIRE APP NETWORK LAYER ALAMOFIRE INTERNET Adapted from Moya
  7. 7. PROBLÈMES RENCONTRÉS CHEZ HER ▸ Changement du header User-Agent ▸ Abandon d’iOS8 3h de perdues ?
  8. 8. PLUSIEURS SOLUTIONS ▸ Abandonner iOS8 ▸ Forker Alamofire ▸ Rester sur Swift 2 et Xcode 7 ▸ Utiliser une autre librairie ▸ Réécrire un nouveau module
  9. 9. NIKKA - IDÉES ▸ Répondre à 90% des besoins utilisateurs ▸ Pouvoir adapter le noyaux à ses besoins ▸ Pouvoir gérer différentes APIs ▸ Fournir une structure de base ▸ Pouvoir ajouter des extensions
  10. 10. NIKKA - IMPLÉMENTATION class DeezerProvider:HTTPProvider { let baseURL = URL(string:"https://api.deezer.com")! let additionalHeaders = ["access_token":"eyJh..."] } Provider class DeezerProvider:HTTPProvider { let baseURL = URL(string:"https://api.deezer.com")! } class DeezerProvider:HTTPProvider { let baseURL = URL(string:"https://api.deezer.com")! let additionalHeaders = ["access_token":"eyJh..."] func validate(response: HTTPURLResponse, data: Data, error: Error?) -> NikkaError? { } }
  11. 11. NIKKA - IMPLÉMENTATION extension Route{ static let me = Route(path:"/me") static let infos = Route(path:"/infos") static let track = {(id:Int64) in Route(path:"/track/(id)")} static let ratePlaylist = {(id:Int,rating:Int) in Route(path:"/playlist/(id)", method:.post, params:["note":rating]) } } Route
  12. 12. NIKKA - IMPLÉMENTATION DeezerProvider().request(.track(12345678)).response{ (response:Response<Any>?) in } Making a request
  13. 13. NIKKA - EXTENSIONS JSON DeezerProvider().request(.track(12345678)).responseObject{ (Response<Track>) in } Librairies supportées : • Gloss • ModelMapper • ObjectMapper • StreemMapper • Unbox
  14. 14. NIKKA - EXTENSIONS Futures Rx let track:Future<Track> = DeezerProvider().request(.track(12345678)).responseObject() let track:Observable<Track> = DeezerProvider().request(.track(12345678)).responseObject()
  15. 15. SOURCES Feel free to reach out at emilien@weareher.com github.com/JustaLab/Nikka medium.com/@streem

×