Pour certains projets crées avec XCode 13, l’application ne génère plus de fichier info.plist. Au lieu de cela, vous pouvez accéder aux paramètres de ce fichier dans l’onglet Infos de la Target :
Pour certains projets crées avec XCode 13, l’application ne génère plus de fichier info.plist. Au lieu de cela, vous pouvez accéder aux paramètres de ce fichier dans l’onglet Infos de la Target :
La vue texte de SwiftUI ne permet pas (encore) d’afficher du texte enrichi. C’est l’occasion de créer une vue sur mesure, basée sur une vue existante de l’UIKit.UILabel
permet l’affichage de texte enrichi, et la classe NSAttributedString
peut convertir du html.
Commençons par créer un wrapper pour la vue UILabel. On utilise pour cela le protocole UIViewRepresentable
.
Si vous rencontrez l’une de ces erreurs lors de la compilation d’un projet iOS produit par ionic/cordova, votre projet est abimé et doit être recréé. Le contenu du dossier CordovaLib dans platforms/ios/ est manquant ou incomplet.
La solution est simple. Supprimez et ajoutez la plateforme de cette manière :
ionic cordova platform rm ios
ionic cordova platform add ios
Vous pouvez alors compiler ( build ) le projet.
Petit moment de frustration lors de l’édition d’un Storyboard dans XCode 10. La bibliothèque d’objets, habituellement située dans la colonne de droite sous les propriétés a disparu.
Elle est désormais accessible avec la bibliothèque des médias par ce bouton situé dans la barre de titre à droite.
Elle fonctionne comme un panneau temporaire qui disparait après utilisation. Si vous voulez qu’elle reste en permanence sur l’écran, appuyez sur option (⌥) en cliquant sur le bouton.
Les raccourcis pour accéder aux différentes bibliothèques
Aux débuts d’Objective-C et de Cocoa, les développeurs devaient gérer eux-mêmes les allocations et libérations de mémoires pour leurs objets avec les méthodes alloc
, retain
, release
.
À chaque emplacement de mémoire est associé un compteur de références, chaque appel à alloc
ou retain
augmente ce compteur, chaque appel à release
diminue ce compteur. Lors d’un release
, si le compteur passe à zéro, ça signifie qu’aucun objet dans le code ne fait plus référence à cet emplacement. Il doit donc être libéré. Si le compteur est encore supérieur à zéro, release
ne fait rien.
Avec l’ARC (Automatic Reference counting), le compilateur se charge de placer lui-même ces mêmes méthodes aux endroits appropriés, évitant ce travail aux développeurs, et garantissant un équilibre parfait entre les retain
et les release
. Sauf que pas toujours…
Certaines fonctions fournies par les frameworks d’Apple peuvent vous retourner des Unmanaged
. Vous devez pour ces objets décider de la stratégie à adopter. C’est notamment le cas lors que vous manipulez des objets issus de Core Graphics (CG…) ou Core Foundation (CF…).
Exemple, dans la classe AVCapturePhoto
:
func cgImageRepresentation() -> Unmanaged<CGImage>?
Cette fonction retourne une Unmanaged CGImage
.
Pour récupérer l’objet CGImage lui-même, il faut faire appel à l’une des deux fonctions
• takeUnretainedValue()
qui n’incrémente pas le compteur de référence
• takeRetainedValue()
qui incrémente le compteur de référence.
Mais laquelle utiliser ?
En règle générale, si le nom de la fonction qui retourne l’objet Unmanaged contient Create ou Copy, vous utiliserez takeRetainedValue()
, sinon c’est takeUnretainedValue()
qui convient.
Dans cet exemple :
... let unmanagedCGImage = capturePhoto.cgImageRepresentation() let cgImage = unmanagedCGImage.takeUnretainedValue() ...