8 PERON STOOTIE V2 --ok.key

UNE MIGRATION. MAIS PAS À N'IMPORTE QUEL PRIX ... MIGRATION DES MODÈLES EN SWIFT ... MIGRATION EN DOUCEUR. • Écriture des nouvelles ...
2MB taille 5 téléchargements 292 vues
MIGRATION D'OBJECTIVE-C VERS SWIFT 
 Retour d'expérience de Stootie

AppDay 2016 Rémi Péron - Stootie

POURQUOI ET COMMENT SWIFT ?

LES AVANTAGES DE SWIFT

• Être à la pointe 
 des technologies Apple

• Moderne
 • Plus lisible
 • Plus secure

UNE MIGRATION MAIS PAS À N’IMPORTE QUEL PRIX

• Pas de réécriture

• Garder le même rythme 
 de mise à jour

• Testable

DÉCOUVERTE DE SWIFT

DÉCOUVERTE DE SWIFT

HISTORIQUE - SWIFT

2010

V1.0

V1.1

V1.2

V2.0

V2.2

V3.0

Sept.

Oct.

Avril

Sept.

Déc.

Sept.

2014

2014

2015

2015

2015

2016

PREMIERS PAS AVEC SWIFT V1.0 2010

Sept. 2014

MARS 2015 - ON SE LANCE 2010

V1.0

V1.1

Sept.

Oct.

2014

2014

MAI 2015 - PREMIÈRE VERSION LIVE 2010

V1.0

V1.1

V1.2

Sept.

Oct.

Avril

2014

2014

2015

LES PLUS • Simplicité d’accès aux classes 
 Objective-C en Swift • Suivi de la roadmap et sortie des 
 fonctionnalités en parallèle

LES MOINS • À ce jour : incompatibilité du code 
 Swift d’une version à l’autre • Objective-C limite certaines 
 fonctionnalités de Swift

TRANSITION TECHNIQUE

TECHNIQUEMENT ON FAIT COMMENT ?

AMÉLIORATION DE LA COMPATIBILITÉ OBJECTIVE-C / SWIFT

2010

V1.0

V1.1

V1.2

Sept.

Oct.

Avril

2014

2014

2015

Auditer les classes Objective-C 
 pour une gestion adaptée des optionelles
 NS_ASSUME_NONNULL_BEGIN /** * Return the currently connected user. On connection, the user is persisted in the user workspace. * * @return STUser representing the connected user. */ - (User * _Nullable) getCurrentUser; NS_ASSUME_NONNULL_END

2010

V1.0

V1.1

V1.2

Sept.

Oct.

Avril

2014

2014

2015

• Suivre les conventions de nommages • Utiliser les “lightweight generic”

@interface Stoot : NSObject @property (nonatomic, copy) NSArray *stoots; @end

SEPTEMBRE 2015 COMMENT ALLER PLUS LOIN ?

2010

V1.0

V1.1

V1.2

V2.0

Sept.

Oct.

Avril

Sept.

2014

2014

2015

2015

• Transformer la couche modèle en Swift • Accéder aux modèles Swift depuis Objective-C

MIGRATION DES MODÈLES EN SWIFT

@objc class var var var var

MyClass: NSObject { identifier: Int image: UIImage? dimension: Dimension? position: Int?

override init() { identifier = 0 super.init() } } struct Dimension { var width: Int var height: Int }

SWIFT_CLASS("_TtC4objc7MyClass") @interface MyClass : NSObject @property (nonatomic) NSInteger identifier; @property (nonatomic, strong) UIImage * _Nullable image; - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end

Comment utiliser tout Swift en conservant ses objets 
 Objective-C ? • Utiliser Swift avec des “extensions”

NOS CHOIX TECHNIQUES

ÉVOLUTION DE NOTRE ARCHITECTURE 1. GESTIONNAIRE DE DÉPENDANCE

ÉVOLUTION DE NOTRE ARCHITECTURE 
 2. LES BIBLIOTHÈQUES

• Transition en douceur d’AFNetworking
 vers Alamofire

• 3 bibliothèques seulement en Swift • Les autres bibliothèques restent 
 en Objective-C

ÉVOLUTION DE NOTRE ARCHITECTURE 3. DYNAMIQUE FRAMEWORK

• Mise en place d’un framework dynamique • Contient les objets modèles • Encapsule les accès réseaux

CONCLUSION

MIGRATION EN DOUCEUR • Écriture des nouvelles fonctionnalités 
 en Swift • Transition des modèles • Refactor de l’architecture

AppDay 2016 - Rémi Péron

Merci