[IOS] Notions + bonne pratiques

vendredi 3 avril 2015

Voici quelques notions et bonne pratiques que j’utilise pour la réalisation de mes projets sous Xcode.

Notions

  • Le deployment target indique la version minimum d’IOS sur laquelle notre application va tourner.
    Concernant la version du SDK, il faut toujours utiliser la dernière version qui fournit toutes les nouvelles méthodes du SDK et les précédentes qui sont « deprecarted« .
    C’est pourquoi dans toutes ces méthodes, on retrouve des __attributes__ pour indiquer sa disponibilité selon la version d’IOS de sorte que si tu utilises une méthode d’un ancien OS qui est deprecarted dans le SDK, on obtiendra un warning mais on pourra encore l’utiliser.
  • ARM64:représente l’architecture 64 bits introduites avec IOS7 et maintenant remplace l’architecture 32 bits obligatoire lors de la soumission d’application sur l’APPstore depuis février 2015.
    Impératif donc de faire le passage de vos SDK/librairies 32 en 64 bits.
  • Scheme: défini un ensemble de cibles (targets) à compiler, une configuration à utiliser quand on compile et une série de test à exécuter. Il est possible de créer plusieurs mais lors de l’exécution on en utilise une seul.
  • URLScheme représente des protocoles comme par exemple: mailto,tel,http,etc…
    Il est même possible de créer ces propres URLScheme personnalisé. (custom URLScheme)
  • Utilisation de la puissance de l’orienté objet:
    • Héritage
    • Polymorphisme
    • Encapsulation: est le principe de protéger l’information contenue dans un objet et de ne proposer que des méthodes de manipulation de cet objet.
    • Delagation
  • L’implémentation est la réalisation, mise en oeuvre du code.
    Le corps des méthodes, donc les instructions à exécuter, est à placer dans le fichier de code source ou d’implémentation.
  • L’interface défini la frontière entre 2 entités. Elle permet de distinguer les méthodes de communication vers l’extérieur et les opérations internes. Par exemple: l’interface utilisateur est l’interface entre l’humain et l’ordinateur.
  • L’agrégation permet de définir une entité comme étant lié à plusieurs entités de classe différentes et d’avoir accès à ces méthodes.

Bonnes pratiques:

  • Utilisation du gestionnaire de librairies cocoapods pour plus d’information cliquez ici.
  • Adaptive layout et utilisation des images assets pour faciliter le design de vos applications notamment pour les rendre universelle avec les différents appareils.
    Pour plus d’information cliquez ici.
  • Structure des dossiers dans votre projet
    Voici une arborescence de type MVC/
    • StoryBoard on y retrouve les storyboard et .xib, fichiers d’interface utilisateur.
    • Models on y retrouve la définition de nos objets Business ainsi que les classes Business de Core Data et le xcdatamodel.
    • Views on y retrouve nos vues custom comme par exemple custom tableview cell
    • Controllers on y retrouve les ViewControllers.
    • Managers on y retrouve les autres controllers qui non pas de vue, par exemple les classes qui font appels à des API ou webservice ou encore la classe singleton qui gère les paramètres de l’application.
    • Resources, on y retrouve les images, fonts, fichiers plist de configuration ou de données de préchargement.
    • Supporting Files: on y retrouve le dossier par défaut de Xcode et les Settings.bundle de configuration des paramètres de l’application si nécessaire.
  • Une autre structure de dossier
    • Classes
      • Application
        • Info.plist
        • AppDelegate.swift
        • main.swift
        • fichier bridging header pour swift objective C
      • Controllers (contient toutes les viewController fichier swift).
      • Models (contient l’ensemble des classes Business le core de votre application)
      • Services (contient toutes les classes de type Manager par exemple le manager qui gère l’appel des webservices, l’authentification,etc…)
        (on peut y trouver par exemple les loader de chaque webservice.)
      • Storyboards (contient tous les fichiers de type storyboards)
      • Utils
        • Colors (contient UIColor+Extension file qui est extension de UIColor pour ajouter les couleurs de l’app nécessaire)
        • Global (contient les constantes de l’application par exemple les constantes de chaque paramètre Json retourné par le webservice, ou les constantes de taille ou de position d’objet UI).
          (contient aussi les extensions sur des objets ou de type String etc…)
      • View (contient xib et swift files de custom view)
        • Cells (contient xib et swift file about UItableViewCells)
        • Global (content UI Elements extension par exemple une extention de bouton par défaut qui change la couleur si enabled ou non, mettre les coins arrondis, etc…)
      • Ressources (contient plist files / image files / certificate files / plist files / json files / etc..)
    • Xcode Scheme, Build Configuration, Build Settings pour les différents environnements Development / Staging / Production / AppStore.
      Il est aussi fort utile de créer des User-Defined Settings qui sont des variables qui auront des valeurs différentes suivant les build configuration différentes. Par exmeple très utile de définir l’url de votre api qui sera différente si vous être en Build configuration development ou staging ou production. (facebook api, bundleID,etc..)
      En effet, avoir un BundleId différent pour chaque environnement permet de déplyer la même application sur le même appareil pour des environnements différents. Idéal pour les tests.
    • Utilisation d’une classe singleton pour les paramètres global de l’application.
      Pour plus d’information cliquez ici.
    • Travailler avec des blocks.
      C’est une méthode qui permet de créer des segments de code qui peuvent être passé en arguments de méthode ou fonction comme des valeurs. Les blocks ont aussi la possibilité de garder la valeur des variables en dehors de leur scope! C’est-à-dire les variables défini avant son accessible dans le block, sans devoir les passés en paramètres.
      Pour plus d’informations sur l’utilisation et la syntaxe des blocks cliquez ici.

Tags: blocks , CocoaPods , Delegation , IOS , Objective C , POO , Xcode