• 30 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 2/8/21

Quelques outils

Bon allez, avouez, c'est facile le Swift. Je vais vous présenter quelques petits outils utiles ou nécessaires.

Le debug

Mon petit préféré. Le debugger est un outil qui suit l'exécution de votre programme en lisant le code ligne par ligne. Laissez-moi vous montrer un exemple.

Dans Navigateur.swift, atteignez la ligne :

let color = UIColor(red: rouge, green: vert, blue: bleu, alpha: 1.0)

Et cliquez sur le numéro de cette ligne. Une petite flèche bleue est normalement apparue.

 

Vous venez de placer un breakpoint. Un breakpoint est un endroit du code au niveau duquel vous demandez au debugger de s'arrêter. Autrement dit, lorsque vous lancerez votre appli, si le code atteint cet endroit-là (normalement, il devrait), il va s'arrêter momentanément.

Lancez tout de suite votre programme (cmd + R) et ouvrez le navigateur (normalement : bouton aide en haut à gauche) pour voir ce qu'il se passe. L'appli s'arrête et une ligne verte devrait apparaître dans Xcode.

  • Tout à droite de la ligne verte, vous devriez voir "Thread 1". Cela indique simplement le main thread. Donc cette instruction est exécutée dans la queue principale.

  • Dans le panneau qui s'est ouvert en bas, vous pouvez voir le nom de vos variables et leurs valeurs (exemple : themeColor = "E95325")

  • Pour observer la valeur de vos variables de classe, cliquez sur le triangle gris à coté de "self" dans le panneau du bas. Par exemple moteurRecherche = "Google".

Vous le comprenez, cet outil est très pratique pour "déboguer". Il suffit de placer un breakpoint à un endroit où le code ne fonctionne pas comme vous voulez et vous pourrez comprendre le comportement de l'appli.

À quoi servent ces petits boutons maintenant :  ?

Le premier  permet tout simplement de continuer l'exécution jusqu'au prochain breakpoint.

Le deuxième  permet d'aller à la ligne suivante.

Le troisième   permet d'entrer dans une méthode : si par exemple, vous placiez un breakpoint sur l'appel d'une méthode, ce bouton permettrait d'entrer dans la méthode avec le debugger.

Et le dernier, enfin,   permet de sortir d'une méthode.

Dans le panneau de gauche, un autre outil s'est ouvert, c'est le debug navigator.

Debug navigator

Je le sépare du debug parce que son utilité est légèrement différente. Il est notamment très utile pour observer la consommation de votre application. Votre téléphone a-t-il déjà chauffé lorsque vous jouiez à des jeux par exemple ? Si oui, cela signifie que le processeur travaillait beaucoup. 

Vous voyez la consommation du processeur à côté de CPU.

 

Allez dans ModifierCV depuis l'appli et écrivez du texte en continu. Sur un iPhone 5, le processeur atteint facilement 10% de sa consommation maximale. Ça vous montre pourquoi votre téléphone ralentit parfois lorsque vous utilisez le clavier. 

Juste en-dessous, vous pouvez voir le stockage de l'appli en mémoire vive (ou RAM).

 

Par exemple, lorsque vous affichez des images, ou lorsque vous lancez des vidéos, la RAM est beaucoup plus remplie.

Ensuite nous voyons la vitesse d'écriture sur le disque. Pour illustrer, écrivez un texte conséquent dans la Text View de ModifierCV et appuyez plusieurs fois de suite sur Enregistrer. La vitesse d'écriture atteint plusieurs dizaines de KB par seconde. À nouveau, lorsque vous voulez enregistrer des vidéos sur le dossier de l'appareil, ce dernier va utiliser la plus grande vitesse possible pour écrire les fichiers (soit plusieurs dizaines de MB par seconde).

Enfin, on peut observer la vitesse de téléchargement des données depuis les réseaux (Internet, Buetooth, …). Vous pouvez voir la valeur changer lorsque vous lancez le navigateur.

Quelques paramètres et ressources

Cliquez sur le projet "First App" en haut du volet de gauche.

 

Vous pouvez gérer plusieurs paramètres importants.

  1. La version d'iOS ciblée : en général je choisis iOS 7. Si vous choisissez iOS 7, vous devriez voir apparaître des erreurs en essayant de lancer l'appli. Reportez-vous à la section "Compatibilités" un peu plus bas pour savoir quoi faire.

  2. Le type d'appareil : Vous pouvez choisir de distribuer votre application uniquement aux iPads ou aux iPhones.

  3. L'orientation disponible : Par exemple, ici, je ne coche que "Portrait".

  4. Les ressources des images d'icônes et d'écran de lancement : plus de détails dans la section "Ressources visuelles" un peu plus bas.

  5. Les frameworks ajoutés : Nous utilisons CocoaPods mais si vous préférez, vous pouvez ajouter un framework manuellement avec le bouton "+".

Compatibilités

Malheureusement, les frameworks ne sont supportés qu'à partir d'iOS 8. Or nous avons importé les frameworks de Facebook pour permettre à l'utilisateur de se connecter via Facebook. Donc quoiqu'il arrive, tant que Facebook fait partie du projet, impossible de cibler une version antérieure.

En revanche, on peut décider d'utiliser des librairies plutôt que des frameworks, mais c'est beaucoup plus compliqué car on doit le faire sans CocoaPods.

Si vous retirez Facebook de votre projet (je vous conseille de faire une copie avant de retirer Facebook), il restera tout de même 2 petites erreurs :

Pour gérer plusieurs versions, vous pouvez vérifier que la version 8 est disponible avec :

if #available(iOS 8.0, *)

La mauvaise nouvelle, c'est que notre appli utilise Facebook. Facebook utilise Bolts qui nécessite iOS 8 au moins.

Mais si on se déleste de Facebook et que l'on veut gérer les compatibilités, ça donne :

if #available(iOS 8.0, *) {
    self.navigationController?.showViewController(exo, sender: self)
} else {
    self.navigationController?.pushViewController(exo, animated: true)
}

Et pour UIAlertController :

if #available(iOS 8.0, *) {
	let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
	let ok = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: nil)
	alert.addAction(ok)
	self.presentViewController(alert, animated: true, completion: nil)
} else {
	let alert = UIAlertView(title: title, 
message: message, delegate: nil, 
cancelButtonTitle: "Ok", otherButtonTitles: "")
	alert.show()
}

Ressources visuelles

C'est un peu évident mais il faut nécessairement un imageset d'icônes et un imageset d'écran de lancement pour notre application. Maintenant, on peut également choisir d'utiliser un XIB à la place de l'imageset de l'écran de lancement, c'est comme vous préférez.

Soyons honnêtes, c'est un peu rébarbatif de redimensionner son icône mille fois. On va utiliser un plugin. :p

Téléchargez cette icône ///[[LIEN DE K+L'ICONE]]/// ou faites la vôtre. :) 

Window > Package Manager > Installez IconMaker > Fermez complètement Xcode.

Rouvrez Xcode, allez dans Assets > Clic droit sur "AppIcon" > Make An App Icon > sélectionnez l'image que vous avez téléchargée (ou créée).

Pour l'écran de lancement, vous n'avez besoin d'un set d'images que si vous ciblez iOS 7.1 ou inférieur. Sinon, vous pouvez utiliser "LaunchScreen.storyboard".

Internationalisation

Ou comment traduire son appli.

Si vous souhaitez traduire les textes et images de votre appli, vous pouvez le faire très facilement avec Xcode.

Cliquez sur le projet First App et sélectionnez le projet.

 

Dans la partie "Localizations", ajoutez le Français. Dans le panneau qui s'ouvre, choisissez Main.storyboard. Cela permettra de traduire les chaînes de caractères présentes dans le storyboard. Regardez maintenant dans les fichiers dans la partie droite d'Xcode :

Si vous n'avez pas modifié la langue de base, Base correspond à l'anglais. Ouvrez le fichier "(French)", vous devriez retrouver toutes les chaînes de caractères utilisées dans le storyboard, vous pouvez toutes les traduire en Français :

/* Class = "UITextField"; text = "0"; ObjectID = "3jI-45-1gw"; */
"3jI-45-1gw.text" = "0";

/* Class = "UIButton"; normalTitle = "Enregistrer"; ObjectID = "6id-rh-9HD"; */
"6id-rh-9HD.normalTitle" = "Enregistrer";

/* Class = "UINavigationItem"; title = "Home"; ObjectID = "KQ8-Er-EiQ"; */
"KQ8-Er-EiQ.title" = "Accueil";

/* Class = "UIButton"; normalTitle = "Gérer mon CV"; ObjectID = "Sa8-BL-6fo"; */
"Sa8-BL-6fo.normalTitle" = "Gérer mon CV";

/* Class = "UITabBarController"; title = "CV"; ObjectID = "Tfd-Hn-AXR"; */
"Tfd-Hn-AXR.title" = "CV";

/* Class = "UILabel"; text = "My first app"; ObjectID = "Ume-Ti-bXO"; */
"Ume-Ti-bXO.text" = "Ma première appli";

/* Class = "UILabel"; text = "4 + 4 = ?"; ObjectID = "YPN-a6-WTR"; */
"YPN-a6-WTR.text" = "4 + 4 = ?";

/* Class = "UIButton"; normalTitle = "Easy level"; ObjectID = "eM4-5x-dun"; */
"eM4-5x-dun.normalTitle" = "Niveau facile";

/* Class = "UILabel"; text = "My first app"; ObjectID = "gfQ-5v-3WR"; */
"gfQ-5v-3WR.text" = "Ma première appli";

/* Class = "UIButton"; normalTitle = "Medium level"; ObjectID = "jhb-1b-6qU"; */
"jhb-1b-6qU.normalTitle" = "Niveau moyen";

/* Class = "UIButton"; normalTitle = "Did I win?"; ObjectID = "ml6-bI-nxX"; */
"ml6-bI-nxX.normalTitle" = "Ai-je gagné?";

/* Class = "UITabBarItem"; title = "Editer"; ObjectID = "xP4-e6-Tb4"; */
"xP4-e6-Tb4.title" = "Éditer";

/* Class = "UITabBarItem"; title = "Visualer"; ObjectID = "zXy-Xy-Uyv"; */
"zXy-Xy-Uyv.title" = "Visualiser";

J'avoue ne pas avoir été très rigoureux : mon storyboard est moitié Français, moitié Anglais. Pour être très rigoureux, il faudrait écrire toutes les chaînes de caractères du storyboard en Anglais, et écrire la traduction dans le fichier "(French)".

C'est légèrement différent pour effectuer des traductions en Swift. Allez dans "VictoryView.swift", et remplacez :

l.text = "Victoire !"

par

l.text = NSLocalizedString("VICTOIRE", comment: "") //"Victoire !"

Ici vous indiquez que le text du label sera traduit en fonction de la langue de l'appareil de l'utilisateur.

  • L'attribut key ("VICTOIRE") correspond à la clé qu'on utilisera dans le fichier de traduction.

  • L'attribut comment permet d'ajouter des commentaires lorsque vous faites faire la traduction par un tiers.

Créez maintenant un nouveau fichier iOS > "Resource" > Strings File

Nommez-le "Localizable.strings". Ajouter la clé VICTOIRE ainsi que sa valeur de cette manière :

VICTOIRE = "Victory !";

Dans le panneau de droite, premier onglet, dans la partie "Localization", cliquez sur "Localize…" et choisissez "English dans un premier temps.

Regardez à nouveau dans le panneau de droite, le bouton "Localize…" a disparu pour laisser sa place à des combo box. Cochez "French" et un deuxième fichier devrait apparaître dans la hiérarchie des fichiers. Ouvrez-le, remplacer "Victory !" par "Victoire !".

Voilà, vous avez créé une chaîne de caractères qui apparaîtra en français sur les appareils français et en anglais sur les autres appareils.

Git

Je ne vais pas vous faire un cours de Git, vous en trouverez un très bien ici.

Je vais simplement vous en dire deux mots. Si vous avez lu le chapitre sur la documentation, je vous ai expliqué qu'il était possible de travailler à plusieurs sur un projet. C'est là que Git intervient.

Il existe plusieurs sites vous permettant d'héberger vos projets comme Gitlab ou Bitbucket. Le principe est très simple : vous envoyez vos fichiers sur Bitbucket par exemple, vous pouvez y accéder sur Internet ou via une simple ligne de commande dans le terminal.

Exemple : Vous avez créé une méthode pendant que votre collègue dormait aux Caraïbes, vous allez vous coucher, vous envoyez votre code sur Bitbucket via une simple ligne de commande. Votre collègue se réveille, récupère les modifications via une simple ligne de commande et continue à travailler sur le même code.

 Prêt à mettre votre appli du futur sur l'AppStore?

Example of certificate of achievement
Example of certificate of achievement