Slides du talk au RemixJobs Day du 19 octobre 2016 à Paris. Retour sur les choix techniques et les évolutions de l'application mobile voyages-sncf.com.
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Voyages-sncf.com : Choix techniques et évolutions de l'application mobile
1.
2. Filiale privée de la SNCF
+ de 1100 collaborateurs
35 équipes de développement
Paris, Lille, Nantes
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
Voyages-Sncf.com
3. Sites et applications mobiles
Logiciel, middleware, moteur d’itinéraire
Digital Factory de la SNCF
- sncf.com
- application SNCF
- TGVPro, IDTGV,
- …
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
VSC Technologies
4. Gwenn Guihal, 32 ans
- 2008-2013 : Développeur Flash
- depuis 2013: Développeur iOS
@_myrddin_
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
5. 14M de téléchargements
30% de l’audience
10 millions de visites/mois
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
V.
6. 6 devs iOS
6 devs android
2 dev back
1 architecte
ui/ux
4 product owners
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
V.
7. ~100 écrans
ios8
swift (~35%)
iPhone, iPad, Apple watch, widget
release tous les 2/3 mois
version #32 en production
depuis 2009
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
V.
11. Grossissement de l’équipe
Refonte technique
Refonte UI
Refontes intégrées dans le delivery
TU
Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
Sortir du Legacy
19. Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
UICollectionViewCell
(affiche ce que lui done l’adapter)
Adapter
(transforme, formate le
model)
Model
(contient les données)
25. Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
Adapter
(transforme, formate le
model)
CellDescriptor
(représente la cellule pour le
delegate et datasource)
SectionDescriptor
(contient un tableau de
cellDescriptors)
26. Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
class VSCardSectionDescriptor: VSCollectionSectionDescriptor {
var cells = [VSCollectionCellDescriptor]()
var backgroundColor : UIColor? = nil
let backgroundPadding = UIEdgeInsetsZero
var isExpanded: Bool = false
func sectionInset(collectionView:UICollectionView) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 15 + ipadInsetX(), bottom: 10, right: 15 + ipadInsetX())
}
}
SectionDescriptor
27. Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
struct VSTransactionCardDescriptor: VSCollectionCellDescriptor {
let identifier: String = "VSLabelCollectionViewCell"
let className: String = "VSLabelCollectionViewCell"
var selectable:Bool = false
var adapter: VSCollectionAdapter {
return _adapter
}
let _adapter: VSTransactionCardAdapter
init(order:Order) {
_adapter = VSTransactionCardAdapter(order:order)
}
func size(collectionView: UICollectionView, sectionDescriptor: VSCollectionSectionDescriptor) ->
CGSize {
let sectionInset = sectionDescriptor.sectionInset(collectionView)
let width:CGFloat = collectionView.bounds.width - sectionInset.left - sectionInset.right
return CGSize(width: width, height: max(_adapter.labelHeight(width), 24))
}
}
CellDescriptor
28. Gwenn Guihal - @_myrrdin_ - 19 Octobre 2016
class VSCollectionDataSource: NSObject, UICollectionViewDataSource {
var collectionDatas: VSCollectionDatas?
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return collectionDatas?.sectionsCount() ?? 0
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return collectionDatas?.sections[section].cells.count ?? 0
}
func collectionView(UICollectionView, cellForItemAtIndexPath NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellDescriptor.identifier,
forIndexPath: indexPath) as VSCollectionCellProtocol
cell.updateWithAdapter(adapter: cellDescriptor.adapter)
return cell
}
func collectionView( UICollectionView, layout UICollectionViewLayout, sizeForItemAtIndexPath :
NSIndexPath) -> CGSize {
if let sectionDescriptor = collectionDatas?.sections[indexPath.section] {
let cellDescriptor = sectionDescriptor.cells[indexPath.item]
return cellDescriptor.size(collectionView, sectionDescriptor: sectionDescriptor)
}
return CGSizeZero
}
UICollectionViewDataSource