L’approche Xcode et Storyboard
Xcode propose une interface intéressante afin de développer votre application au travers du ‘storyboard’. Sur celui-ci, l’ensemble des scènes peut être visualisé ainsi que les transitions entre celles-ci. Cet environnement est intéressant dans l’approche du ‘workflow’ (flux opérationnel) de votre application. Cependant, à défaut d’optimisation de cette interface, le storyboard se révèle très rapidement lourd (très lourd). A moins de posséder un Mac puissant, vous allez vite peiner à construire vos scènes sur cet interface.
Nouveauté IOS 9 : les storyboard reference
L’arrivée d’iOSSystème d'exploitation des appareils Apple. 9 apporte un lot d’améliorations bienvenues dont les ‘storyboard reference’. Ces références vont permettre de découper en plusieurs parties le storyboard afin de l’alléger._ _
Note : le gain en performance sur votre interface se répercute sur la lisibilité de votre application.
L’approche Xib
Une autre approche, lors de la construction de votre application, est celle des Xib (Xlm Interface Builder) ou Nib (Next Interface Builder). Le Xib, qui est la version avant précompilation, se présente comme un XML. Pour ceux qui utilisent AndroidAndroid est un système d'exploitation mobile basé sur Linux. Studio, cela peut vous rappeler les ‘layout’. Ici, chaque scène possède son fichier et les transitions sont toutes définies dans le code.
Combiner Xib et Storyboard : l’approche hybride efficace
Savoir combiner ces 2 approches va permettre de construire des applications complexes, avec des scènes elles-même complexes, de façon plus rapide et plus structurée. Nous allons voir comment utiliser des Xib au sein du storyboard.
Cette approche hybride nous apportera des avantages conséquents :
Avant d’aborder la mise en place, on se doit de préciser que les conteneurs peuvent aussi simuler ce genre de réutilisations de vues. Cependant, cette méthode présente ses inconvénients :
Nous allons utiliser la fonction loadNibNamed afin de créer la vue à partir du Xib. Cet appel se fera à l’initialisation de notre objet (dérivé de UIView).
Le problème réside dans le fait que la fonction loadNibNamed nous renvoie un nouvel UIView et nous ne pouvons pas transformer l’appelant en l’appelé. A l’image d’un ‘container’ classique du storyboard, nous aurons donc un UIView comme conteneur. La dernière subtilité résidera dans l’adaptation dynamique des tailles de nos 2 UIView.
Pour simplifier l’intégration, nous allons créer une classe générique dont nos vues hériteront. Cela nous permettra de gagner du temps de développement.
import UIKit
class Subview: UIView
{
private var contentView: UIView!
// 1
override init(frame: CGRect)
{
super.init(frame: frame)
self.setup()
}
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.setup()
}
// 2
func setup()
{
if let nibNameSafe = self.getNibName()
{
self.contentView = NSBundle.mainBundle().loadNibNamed(nibNameSafe, owner: self, options: nil).first as? UIView
self.contentView.frame = self.bounds
self.contentView.autoresizingMask = [.FlexibleHeight, .FlexibleWidth]
self.addSubview(contentView)
}
}
// 3
func getNibName() -> String?
{
return nil
}
}
Nous allons créer un Xib d’une vue simple et sa classe associée. Pour l’exemple, nous ajouterons un IBOutlet afin de montrer comment lier un objet à notre classe.
import UIKit
class SubviewTest: Subview
{
@IBOutlet var labelTest: UILabel!
override func getNibName() -> String?
{
return "SubviewTest"
}
override func setup()
{
super.setup()
self.labelTest.text = "Test"
}
}
Comme vous pouvez le voir, nous allons lier un UILabel afin de faire apparaître le texte ‘Test’ dans la vue en guise d’exemple.
Notes :
Créons maintenant le Xib :
Afin de lier les IBOutlet, vous devez utiliser le ‘File’s Owner’.
Une fois votre vue créée, vous pourrez l’intégrer simplement dans votre storyboard en appliquant la classe correspondante à un UIView :
Note : l’UIView de votre storyboard représente le conteneur mais la vue s’y adaptera (de même pour les contraintes). Vous pouvez ainsi avoir les problèmes habituels de contraintes, cependant, vous ne bénéficierez pas toujours des alertes de Xcode car la vue n’est pas rendue dans le storyboard. Ici, la hauteur sera forcée par la Subview car la contrainte dans le storyboard a une priorité de 1 (une sorte de ‘placeholder’).
Le résultat de cet exemple :
La vue possédait un fond bleuté et, son conteneur, un fond rouge. En effet, vous pouvez voir que le résultat montre un fond bleu car conteneur et contenant partagent les mêmes dimensions.
Le recours à ces vues réutilisables est parti de la conception d’une application très vaste dont beaucoup de scènes partageaient les même composants. L’utilisation des ‘Subview’ présentée ici a permis d’alléger considérablement le storyboard ainsi que de développer les nouvelles vues dans des écrans plus épurés. Sans cette méthode, l’ajout de vues aurait été de plus en plus difficile et long car l’interface serait devenue bien trop gourmande en CPU.
Enfin, pour un travail en groupe et/ou sur Git, ce découpage de vues s’avère très puissant et accélère considérablement le développement de grandes applications.
La première beta d’Xcode 10 vient de sortir !! Nous sommes en ce moment même en train de nous plonger dans cette dernière version de l’outil et de découvrir réellement les dernières nouveautés présentées lors de la WDDC.
Au fil du temps, on a testé pas mal de choses, avec plus ou moins de succès on doit bien l’avouer… Entre réussite de projet et tests ratés, on a pu bâtir et faire évoluer nos convictions dans le domaine du développement d’application web.
Oracle DataGuard est une solution de réplication à chaud d’une base de données Oracle fournie gratuitement avec l’édition Enterprise. Cette solution permet de disposer d’une base de données de secours répliquée de façon synchrone ou asynchrone avec une ba