SlideShare uma empresa Scribd logo
1 de 60
FrenchKit 2019
Le debrief’
Sommaire
1. La conférence
2. Les talks
3. Classrooms
4. Swift tips
5. À retenir
La conférence
La conférence
➔ 7 et 8 octobre 2019 au Beffroi de Montrouge
➔ 4ème édition
➔ 350 participants
➔ Speakers internationaux (dont Olivier Halligon)
➔ 23 talks
➔ 12 classrooms
➔ 2 masterclasses
Les talks
Animations with SwiftUI
➔ Animations natives dans le framework SwiftUI.
➔ Vous pouvez facilement animer tout
changement dans SwiftUI
➔ Utilisation de fonctions pour animer les
changements (démo avec sinus).
➔ Utilisation facile : syntaxe Swift déclarative.
➔ Mécanisme très puissant.
Chris Eidhof
https://www.youtube.com/watch?v=RjCrZWeCPZU
Animations with SwiftUI
Animations with SwiftUI
Understanding Combine
➔ Nouveau framework de programmation
réactive ajouté dans SDK13
➔ Très proche de RxSwift
➔ Permet le binding lors de l'utilisation de
l’architecture MVVM
➔ Une variable devient émettrice avec
l’annotation @Published
Daniel Seinberg
https://www.youtube.com/watch?v=vDzIeFzGAuU
Understanding Combine
Daniel Seinberg
https://www.youtube.com/watch?v=vDzIeFzGAuU
SwiftUI & Redux
➔ Architecture dérivée de Flux (Facebook)
➔ Alternative à MVC, MVVM ou VIPER
➔ Data Flow unidirectionnel
➔ Une seule source de vérité : State
➔ Toute la logique métier en un seul endroit : Reducers
➔ State partagé par toute l’application, pouvant être
modifié uniquement par des reducers suite à des
actions reçues.
➔ Le State notifie ensuite toute l’application
➔ Les vues n’intègrent aucune logique métier
Thomas
Ricouard
https://www.slideshare.net/ThomasRicouard/frenchkit-swiftui-data-flow-with-redux
SwiftUI & Redux
Thomas
Ricouard
https://www.slideshare.net/ThomasRicouard/frenchkit-swiftui-data-flow-with-redux
Thomas
Ricouard
https://www.slideshare.net/ThomasRicouard/frenchkit-swiftui-data-flow-with-redux
Testing & Declarative UIs
➔ SwiftUI : comment tester le code métier, les
navigations et détecter les régressions ?
➔ Ne pas insérer de logique métier dans les vues ⚠
➔ La navigation est également de la logique métier
➔ Utilisation de SnapshotTesting pour automatiser les
tests d’interface
➔ Les debug previews SwiftUI servent de référence pour
les snapshots
Nataliya
Patsovska
https://www.slideshare.net/NataliyaPatsovska/french-kit2019
Testing & Declarative UIs
Nataliya
Patsovska
https://www.slideshare.net/NataliyaPatsovska/french-kit2019
Showcase Driven Development
➔ Méthodologie développée chez Heetch basée sur
l’intégration continue
➔ Pour chaque élément graphique, une Pull Request
➔ Permet d’explorer tous les éléments graphiques
séparément (Showcase.Type)
➔ Permet l’injection de données pour tester les
ViewControllers indépendamment
➔ Dependency Injection -> Long Live Data Injection
➔ Configurateurs de vue
Jérôme Alves
https://speakerdeck.com/jegnux/showcase-driven-development
Showcase Driven Development
Jérôme Alves
https://speakerdeck.com/jegnux/showcase-driven-development
Showcase Driven Development
Jérôme Alves
https://speakerdeck.com/jegnux/showcase-driven-development
Building Voice-First Apps
➔ Nécessité de contrôler nos applications avec la
voix (en voiture, en cuisine)
➔ Tour d’horizon des solutions existantes dans le
SDK iOS et des solutions tierces
➔ Nul besoin d’implémenter toutes les
fonctionnalités de l’application (actions mains
libres, recherches)
➔ Privilégier les solutions natives sur mobile
Elaine Dias
Batista
https://speakerdeck.com/elainedb/building-voice-first-ios-apps
Building Voice-First Apps
Elaine Dias
Batista
https://speakerdeck.com/elainedb/building-voice-first-ios-apps
Note encryption : 10 lines for
encryption,
1000 lines for key management
➔ Chiffrement de bout en bout des données sans
compromettre l’UX de l’app
➔ Mettre en place plusieurs couches de sécurité
➔ Privilégier solutions de chiffrement haut niveau
➔ Se fier au stockage chiffré en local (Keychain)
mais pas sur le cloud (iCloud Keychain)
➔ « failure of single security control is a question
of time. Failure of security system is a question
of design »
Anastasiia
Voitova
https://speakerdeck.com/vixentael/10-lines-of-encryption-1500-lines-of-key-management
Note encryption : 10 lines for
encryption,
1000 lines for key management
Anastasiia
Voitova
https://speakerdeck.com/vixentael/10-lines-of-encryption-1500-lines-of-key-management
An introduction to Property-Based
Testing
➔ Tests unitaires classiques en “Given, when,
Then” efficaces pour détecter les régressions
➔ Difficulté de détecter de nouveaux cas
d’erreur
➔ Utilisation de SwiftCheck pour tester en
utilisant des données aléatoires
Vincent
Pradeilles
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-an-introduction-to-property-based-testing.pdf
An introduction to Property-Based
Testing
Vincent
Pradeilles
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-an-introduction-to-property-based-testing.pdf
An introduction to Property-Based
Testing
Vincent
Pradeilles
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-an-introduction-to-property-based-testing.pdf
Shipping a Catalyst app : The Good,
the Bad and the Ugly
➔ Créateur de PSPDFKit et de l’app
PDFViewerApp.
➔ S’est demandé s’il suffisait de cocher la case
“Mac” de Xcode 11 pour porter une app
iPhone/iPad sur Mac.
➔ S’est frotté à pas mal de problèmes pour
accéder à des fonctions réservées à AppKit :
menus natifs, recherche, popovers, curseur.
Peter
Steinberger
https://www.youtube.com/watch?v=Xo3zGlyxXcI
Shipping a Catalyst app : The Good,
the Bad and the Ugly
Peter
Steinberger
https://www.youtube.com/watch?v=Xo3zGlyxXcI
Shipping a Catalyst app : The Good,
the Bad and the Ugly
Peter
Steinberger
https://www.youtube.com/watch?v=Xo3zGlyxXcI
And that’s a wrap !
➔ Présentation des property wrappers introduits
avec Swift 5
➔ Pleinement utilisé par SwiftUI
➔ Permet d’implémenter la wrappedValue d’une
propriété via l’utilisation de tags
Olivier Halligon
https://speakerdeck.com/alisoftware/and-thats-a-wrap
And that’s a wrap !
Olivier Halligon
https://speakerdeck.com/alisoftware/and-thats-a-wrap
And that’s a wrap !
Olivier Halligon
https://speakerdeck.com/alisoftware/and-thats-a-wrap
Classrooms
Exploring Combine
➔ Présentation des principes de la programmation réactive
➔ Présentation de Combine, des émetteurs/souscripteurs, des combinaisons,
des promesses.
➔ Exercices permettant de valider un formulaire à partir de données
d’identification (login+mdp)
➔ Solutions fournies 👀
https://github.com/AvdLee/CombineWorkshop
SwiftUI
➔ Projet démo en SwiftUI fourni
➔ Liste de bugs présent dans l'application à résoudre
➔ Actions simples comme un dismiss assez complexes à appréhender
➔ Utilisation assez intuitive de Combine
https://github.com/Dimillian/FrenchKitSwiftUIClassroom
Swift tips #1
Vincent
Pradeilles
https://github.com/vincent-pradeilles/swift-tips
Encapsulating [weak self]
closure = { [ weak self ] in
guard let self = self else { return }
// Do something with self
}
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-1.pdf
Encapsulating [weak self]
protocols Weakifiable: class { }
extension NSObject: Weakifiable { }
extension Weakifiable {
func weakify(_ code: @escaping (Self) -> Void ) -> () -> Void {
return { [ weak self ] in
guard let self = self else { return }
code(self)
}
}
} https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-1.pdf
Encapsulating [weak self]
closure = { [ weak self ] in
guard let strongSelf = self else { return }
// Do something with self
}
closure = weakify { strongSelf in
// Do something with strongSelf 🎉
}
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-1.pdf
Swift tips #2
Vincent
Pradeilles
https://github.com/vincent-pradeilles/swift-tips
Parlons d’@autoclosure
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-2.pdf
Parlons d’@autoclosure
Parlons d’@autoclosure
@autoclosure vous permet donc d’encapsuler
en tant qu’argument une closure, de sorte
qu'elle ne soit évalué qu'en cas de besoin.
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-2.pdf
Swift tips #3
Vincent
Pradeilles
https://github.com/vincent-pradeilles/swift-tips
Optionnals 💪
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-3.pdf
Optionnals
💪
RTFM 🤓
Optionnals 💪
https://github.com/vincent-pradeilles/slides/blob/master/frenchkit-2019-swift-pills-3.pdf
Optionnals 💪
À retenir
À retenir
➔ SwiftUI n’est pas encore fin prêt pour la mise en production mais a de l’avenir
dans le développement sur les environnements Apple.
➔ Catalyst ne se résume pas en une case à cocher.
➔ Combine is the new RxSwift !
➔ La sécurité sur mobile n’est pas une option.
➔ Tests unitaires sur iOS : ce n’est pas une nouveauté !
➔ Les Classrooms et Masterclass
➔ Conférence très enrichissante.
One more thing…
Vincent
Pradeilles
ios_memes
Vincent
Pradeilles
ios_memes
Vincent
Pradeilles
Les ingénieurs chez Apple lors de la sortie d’iOS 13
ios_memes
Vincent
Pradeilles
Les développeurs lors de la migration Swift 2 => Swift 3
ios_memes
Vincent
Pradeilles
Quand le client me demande où sont les tests unitaires de l’app iOS
ios_memes
Vincent
Pradeilles
Vincent
Pradeilles
Merci

Mais conteúdo relacionado

Mais procurados

Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
ENSIBS
 
Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)
Fabian Piau
 

Mais procurados (20)

Gérer sa dette technique avec SonarQube
Gérer sa dette technique avec SonarQubeGérer sa dette technique avec SonarQube
Gérer sa dette technique avec SonarQube
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
Préparer et distribuer une application moderne d'entreprise
Préparer et distribuer une application moderne d'entreprisePréparer et distribuer une application moderne d'entreprise
Préparer et distribuer une application moderne d'entreprise
 
Soirée du Test Logiciel - Les dernières tendances du test logiciel - B. LEGEA...
Soirée du Test Logiciel - Les dernières tendances du test logiciel - B. LEGEA...Soirée du Test Logiciel - Les dernières tendances du test logiciel - B. LEGEA...
Soirée du Test Logiciel - Les dernières tendances du test logiciel - B. LEGEA...
 
Integration continue et déploiement automatisé
Integration continue et déploiement automatiséIntegration continue et déploiement automatisé
Integration continue et déploiement automatisé
 
Mobile Product Management par Damien delautier
Mobile Product Management par Damien delautierMobile Product Management par Damien delautier
Mobile Product Management par Damien delautier
 
Agile En Seine 2017 - Retour d'expérience France Télévisions - Passer de fair...
Agile En Seine 2017 - Retour d'expérience France Télévisions - Passer de fair...Agile En Seine 2017 - Retour d'expérience France Télévisions - Passer de fair...
Agile En Seine 2017 - Retour d'expérience France Télévisions - Passer de fair...
 
20090609 05 - Audit de code automatisé chez Renault
20090609 05 - Audit de code automatisé chez Renault20090609 05 - Audit de code automatisé chez Renault
20090609 05 - Audit de code automatisé chez Renault
 
Bug prediction - MILHAU - Amadeus - Soirée du Test Logiciel Sophia 2019
Bug prediction - MILHAU - Amadeus - Soirée du Test Logiciel Sophia 2019Bug prediction - MILHAU - Amadeus - Soirée du Test Logiciel Sophia 2019
Bug prediction - MILHAU - Amadeus - Soirée du Test Logiciel Sophia 2019
 
Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)Intégration Continue (Agile Nantes)
Intégration Continue (Agile Nantes)
 
20171122 01 - REX : Intégration et déploiement continu chez Engie
20171122 01 - REX : Intégration et déploiement continu chez Engie20171122 01 - REX : Intégration et déploiement continu chez Engie
20171122 01 - REX : Intégration et déploiement continu chez Engie
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
OBJECTIF QUALITÉ DIGITALE : Comment élaborer une bonne stratégie de test pou...
OBJECTIF QUALITÉ DIGITALE :  Comment élaborer une bonne stratégie de test pou...OBJECTIF QUALITÉ DIGITALE :  Comment élaborer une bonne stratégie de test pou...
OBJECTIF QUALITÉ DIGITALE : Comment élaborer une bonne stratégie de test pou...
 
Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Webinar: Passez progressivement de releases manuelles
Webinar: Passez progressivement de releases manuellesWebinar: Passez progressivement de releases manuelles
Webinar: Passez progressivement de releases manuelles
 
La stratégie de test sur un système multi-environnements - POTEL HAGE CHAHINE...
La stratégie de test sur un système multi-environnements - POTEL HAGE CHAHINE...La stratégie de test sur un système multi-environnements - POTEL HAGE CHAHINE...
La stratégie de test sur un système multi-environnements - POTEL HAGE CHAHINE...
 
Agile Tour 2019 - REX AXA France - Event Storming - 3 amigos
Agile Tour 2019 - REX AXA France - Event Storming - 3 amigosAgile Tour 2019 - REX AXA France - Event Storming - 3 amigos
Agile Tour 2019 - REX AXA France - Event Storming - 3 amigos
 
Introduction aux méthodes agiles pour conduite de projet
Introduction aux méthodes agiles pour conduite de projetIntroduction aux méthodes agiles pour conduite de projet
Introduction aux méthodes agiles pour conduite de projet
 
20171122 - Accueil Club Qualité Logicielle
20171122 - Accueil Club Qualité Logicielle 20171122 - Accueil Club Qualité Logicielle
20171122 - Accueil Club Qualité Logicielle
 

Semelhante a Ce qu'il faut retenir de la FrenchKit iOS

Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...
Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...
Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...
Publicis Sapient Engineering
 

Semelhante a Ce qu'il faut retenir de la FrenchKit iOS (20)

Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 WordCamp Lyon 2015 - WordPress, Git et l'intégration continue WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
WordCamp Lyon 2015 - WordPress, Git et l'intégration continue
 
Faire des applications web avec Delphi
Faire des applications web avec DelphiFaire des applications web avec Delphi
Faire des applications web avec Delphi
 
ASP.NET MVC 6
ASP.NET MVC 6ASP.NET MVC 6
ASP.NET MVC 6
 
Sauvegarder et restaurer l'état des applications mobiles
Sauvegarder et restaurer l'état des applications mobilesSauvegarder et restaurer l'état des applications mobiles
Sauvegarder et restaurer l'état des applications mobiles
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Silverlight 4
Silverlight 4Silverlight 4
Silverlight 4
 
J'ai fait une app native en React Native
J'ai fait une app native en React NativeJ'ai fait une app native en React Native
J'ai fait une app native en React Native
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
 
Utiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformeUtiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateforme
 
Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...
Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...
Open XKE - De l'intégration continue au déploiement continu sur iOS et Androi...
 
Qualité & Industrialisation des développements mobiles sur iOS & Android
Qualité & Industrialisation des développements mobiles sur iOS & AndroidQualité & Industrialisation des développements mobiles sur iOS & Android
Qualité & Industrialisation des développements mobiles sur iOS & Android
 
Delphi et les tests unitaires
Delphi et les tests unitairesDelphi et les tests unitaires
Delphi et les tests unitaires
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphi
 
Gdd07 Gwt Dig
Gdd07 Gwt DigGdd07 Gwt Dig
Gdd07 Gwt Dig
 
Compte rendu oscon 2013
Compte rendu oscon 2013Compte rendu oscon 2013
Compte rendu oscon 2013
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 

Mais de Niji

Mais de Niji (20)

Débrief CES 2024 by Niji
Débrief CES 2024 by NijiDébrief CES 2024 by Niji
Débrief CES 2024 by Niji
 
Débrief GITEX Dubaï 2023
Débrief GITEX Dubaï 2023Débrief GITEX Dubaï 2023
Débrief GITEX Dubaï 2023
 
Débrief CES 2023 by Niji
Débrief CES 2023 by Niji Débrief CES 2023 by Niji
Débrief CES 2023 by Niji
 
Débrief CES 2022 by Niji
Débrief CES 2022 by Niji Débrief CES 2022 by Niji
Débrief CES 2022 by Niji
 
Debrief CES 2021 by Niji
Debrief CES 2021 by NijiDebrief CES 2021 by Niji
Debrief CES 2021 by Niji
 
[Webinar Niji] Social commerce : comment sortir du lot dans un océan de conte...
[Webinar Niji] Social commerce : comment sortir du lot dans un océan de conte...[Webinar Niji] Social commerce : comment sortir du lot dans un océan de conte...
[Webinar Niji] Social commerce : comment sortir du lot dans un océan de conte...
 
[Webinar Niji] Marque & Design : la connexion émotionnelle plus forte que l’e...
[Webinar Niji] Marque & Design : la connexion émotionnelle plus forte que l’e...[Webinar Niji] Marque & Design : la connexion émotionnelle plus forte que l’e...
[Webinar Niji] Marque & Design : la connexion émotionnelle plus forte que l’e...
 
[Webinar Niji] Clés de succès et partage d’expériences pour mettre en œuvre e...
[Webinar Niji] Clés de succès et partage d’expériences pour mettre en œuvre e...[Webinar Niji] Clés de succès et partage d’expériences pour mettre en œuvre e...
[Webinar Niji] Clés de succès et partage d’expériences pour mettre en œuvre e...
 
Mobile Factory - Prévention Application Mobile
Mobile Factory - Prévention Application MobileMobile Factory - Prévention Application Mobile
Mobile Factory - Prévention Application Mobile
 
[Webinar Niji] Sustainable is not the new black - 0311
[Webinar Niji] Sustainable is not the new black - 0311[Webinar Niji] Sustainable is not the new black - 0311
[Webinar Niji] Sustainable is not the new black - 0311
 
[Webinar Niji] Frameworks XPlateform mobile - 2210
[Webinar Niji] Frameworks XPlateform mobile - 2210 [Webinar Niji] Frameworks XPlateform mobile - 2210
[Webinar Niji] Frameworks XPlateform mobile - 2210
 
[Webinar Niji] Electromobilité - 1510
[Webinar Niji] Electromobilité - 1510[Webinar Niji] Electromobilité - 1510
[Webinar Niji] Electromobilité - 1510
 
Benchmark Usages et Expériences des salariés de Niji
Benchmark Usages et Expériences des salariés de NijiBenchmark Usages et Expériences des salariés de Niji
Benchmark Usages et Expériences des salariés de Niji
 
Consumer Electronic Show 2020 Debrief by Niji
Consumer Electronic Show 2020 Debrief by Niji Consumer Electronic Show 2020 Debrief by Niji
Consumer Electronic Show 2020 Debrief by Niji
 
Introduction au Deep Learning
Introduction au Deep Learning Introduction au Deep Learning
Introduction au Deep Learning
 
Debrief : Vivatech 2019
Debrief : Vivatech 2019Debrief : Vivatech 2019
Debrief : Vivatech 2019
 
Google IO/Android Q - Nouveautés et changements 2019
Google IO/Android Q - Nouveautés et changements 2019Google IO/Android Q - Nouveautés et changements 2019
Google IO/Android Q - Nouveautés et changements 2019
 
Niji x Drupagora 2019
Niji x Drupagora 2019Niji x Drupagora 2019
Niji x Drupagora 2019
 
Quels sont les enjeux et impacts des assistants vocaux pour les marques et le...
Quels sont les enjeux et impacts des assistants vocaux pour les marques et le...Quels sont les enjeux et impacts des assistants vocaux pour les marques et le...
Quels sont les enjeux et impacts des assistants vocaux pour les marques et le...
 
National Retail Federation Debrief By Niji
National Retail Federation Debrief By NijiNational Retail Federation Debrief By Niji
National Retail Federation Debrief By Niji
 

Ce qu'il faut retenir de la FrenchKit iOS