iOS Deployment Target : définition, version minimale d'iOS et configuration

Auteur : IT Sectr Publié le : 2026-02-08 Temps de lecture : 14 min

iOS Deployment Target (également iOS Target, Deployment Target) est la version minimale du système d'exploitation Apple sur laquelle une application peut être lancée. Ce paramètre est défini dans le projet Xcode et détermine la limite de compatibilité : en sélectionnant iOS 16.0, l'application n'est installée que sur les appareils sous iOS 16.0 et plus récents. Selon Apple Developer Documentation, le choix du bon Deployment Target affecte à la fois la portée de l'audience et l'accès aux nouvelles API des frameworks Swift et Objective-C.

Points Clés

  • iOS Deployment Target — la version minimale d'iOS pour installer et exécuter une application, l'équivalent complet de minSdkVersion pour Android
  • Configuration dans Xcode : Project → Info → iOS Deployment Target, également dans Swift Package Manager et CocoaPods
  • @available et #available — mécanismes Swift pour appeler en toute sécurité des API au-dessus du Deployment Target actuel
  • Chaque nouveau Deployment Target donne accès à de nouvelles API SwiftUI, UIKit, Foundation, AppKit, mais réduit la couverture des appareils
  • App Store filtre les applications par version iOS de l'appareil — si le Deployment Target ne correspond pas, l'application n'est pas affichée

Qu'est-ce que le iOS Deployment Target ?

iOS Deployment Target est un paramètre de configuration Xcode qui spécifie la version la plus ancienne d'iOS, iPadOS, tvOS, watchOS ou visionOS sur laquelle une application peut s'exécuter. Chaque projet Xcode contient ce paramètre pour chaque plateforme séparément. Par exemple, une application iOS peut avoir un Deployment Target 16.0, tandis qu'une extension watchOS peut avoir 9.0. Si l'appareil de l'utilisateur exécute iOS 15.0, une application avec Target 16.0 n'apparaîtra pas dans l'App Store et ne pourra pas être installée via distribution directe.

Le mécanisme du Deployment Target est basé sur la vérification de la version du système d'exploitation lors de l'installation. L'App Store iOS compare la valeur du Deployment Target dans Info.plist (clé MinimumOSVersion) avec la version du système d'exploitation sur l'appareil de l'utilisateur. Si la version de l'appareil est inférieure — le bouton "Télécharger" est bloqué et l'API de l'App Store ne renvoie pas l'application dans les résultats de recherche pour cet appareil. Le même comportement s'applique à TestFlight, à la distribution ad-hoc et entreprise.

Selon les données StatCounter de juin 2025, iOS 16 représente environ 48 % des appareils iPhone actifs, iOS 17 — 35 %, iOS 18 — 12 %, les versions plus anciennes — environ 5 %. Choisir Deployment Target 16.0 couvre 83 % des appareils, Target 17.0 — 35 % (iOS 17+ uniquement). Ces chiffres sont essentiels pour la prise de décision : plus le Target est élevé, plus l'audience est réduite, mais plus les API récentes SwiftUI et UIKit sont accessibles.

Deployment TargetPart d'appareils (juin 2025)Fonctionnalités disponibles
iOS 15.0~90%Swift Concurrency, async/await, Focus State
iOS 16.0~83%SwiftUI NavigationStack, Layout, Live Activities
iOS 17.0~35%Observation, SwiftData, TipKit, Reactive Editing
iOS 18.0~12%Nouvelles API Apple Intelligence, SwiftUI amélioré

Chaque nouvelle version d'iOS ajoute non seulement des fonctionnalités utilisateur, mais aussi des API pour les développeurs. De nouveaux modificateurs SwiftUI, des méthodes UIKit, des frameworks comme SwiftData et Observation ne sont disponibles qu'avec un Deployment Target spécifique. Le développeur doit trouver un équilibre entre la portée de l'audience et la disponibilité des outils modernes.

iOS Deployment Target vs minSdkVersion : comparaison avec Android

iOS Deployment Target et minSdkVersion d'Android remplissent la même fonction — définir la version minimale du système d'exploitation pour une application. Cependant, les mécanismes de mise en œuvre et les outils associés diffèrent. Comprendre ces différences est utile pour les développeurs travaillant sur les deux plateformes et aide à éviter les confusions lors du passage d'un écosystème à l'autre.

Sur iOS, la version minimale est définie via les paramètres de construction Xcode (IPHONEOS_DEPLOYMENT_TARGET) et stockée dans Info.plist (MinimumOSVersion). Sur Android — via build.gradle (minSdkVersion) et AndroidManifest.xml (<uses-sdk android:minSdkVersion>). iOS n'a pas d'équivalents pour targetSdkVersion et compileSdkVersion — les changements de comportement sur iOS sont gérés par le SDK avec lequel l'application a été compilée (Base SDK) et la version du système d'exploitation sur l'appareil.

ParamètreiOSAndroid
Version minimaleDeployment Target (IPHONEOS_DEPLOYMENT_TARGET)minSdkVersion
Où est spécifiéXcode Build Settings → Info.plistbuild.gradle → AndroidManifest.xml
Vérification dans le code@available / #available / if #availableBuild.VERSION.SDK_INT
Version cibleBase SDK (toujours le plus récent)compileSdkVersion + targetSdkVersion
Filtrage dans le magasinApp Store : MinimumOSVersionGoogle Play : minSdkVersion

La différence principale est que Base SDK sur iOS est toujours la version la plus récente installée dans Xcode. Le développeur ne peut pas choisir compileSdkVersion comme sur Android — l'application compile toujours contre le SDK le plus récent disponible. Les nouveaux changements de comportement sur iOS s'appliquent à toutes les applications compilées avec le nouveau Base SDK, quel que soit le Deployment Target. Sur Android, targetSdkVersion offre un contrôle sur les changements de comportement ; iOS n'a pas cette séparation.

Changements de comportement sur iOS vs Android

Contrairement à Android, où les changements de comportement sont liés à targetSdkVersion, iOS applique les changements de comportement à toutes les applications compilées avec la nouvelle version de Xcode et Base SDK. Par exemple, iOS 13 a introduit le Mode Sombre — toutes les applications construites avec Xcode 11 et iOS 13 SDK ont automatiquement reçu le support du thème sombre, quel que soit le Deployment Target. Sur Android, un changement similaire (Scoped Storage) ne s'applique que lorsque targetSdk >= 29. Les développeurs iOS doivent être préparés aux changements de comportement à chaque nouveau Xcode, sans possibilité de report.

La connaissance des deux plateformes permet de prédire les conséquences du choix d'une version minimale et de planifier les mises à jour de code pour les nouvelles API. Chez IT Sectr, nous utilisons les deux écosystèmes depuis 2017 — la pratique montre que le iOS Deployment Target doit être choisi 2 à 3 versions en dessous de la version actuelle pour un équilibre entre couverture et fonctionnalité.

Comment configurer le Deployment Target dans Xcode

La configuration du iOS Deployment Target s'effectue à plusieurs endroits du projet : le Target principal, le projet Pods (si CocoaPods est utilisé), les dépendances Swift Package Manager et les targets Widget/Extension. Si les valeurs diffèrent entre l'application principale et les extensions, l'App Store utilise le maximum de toutes — c'est-à-dire qu'une extension ne peut pas avoir un Target inférieur à celui de l'application principale.

Configuration dans l'éditeur de projet Xcode

Ouvrez le projet Xcode → sélectionnez le Target → onglet General → section Minimum iOS Deployment. La liste déroulante affiche toutes les versions disponibles du SDK iOS installées dans Xcode. Le changement s'applique à tous les schémas de construction. Alternativement — onglet Build Settings → iOS Deployment Target (IPHONEOS_DEPLOYMENT_TARGET). Si le projet contient plusieurs extensions de Target (Widget, Watch), chacune a son propre Deployment Target.

Configuration via Swift Package Manager

Pour les bibliothèques distribuées via SPM, le Deployment Target est spécifié dans Package.swift dans le paramètre platforms. Une bibliothèque avec platforms : [.iOS(.v16)] ne sera disponible que pour les applications avec Deployment Target iOS 16.0+. En ajoutant une telle bibliothèque à un projet avec Target 15.0, Xcode affichera une erreur d'incompatibilité. Dans CocoaPods, le Deployment Target est défini dans le Podfile : platform :ios, '16.0'.

swift
// Package.swift — Deployment Target pour bibliothèque SPM
import PackageDescription

let package = Package(
    name: "MyLibrary",
    platforms: [
        .iOS(.v16),
        .macOS(.v13),
        .watchOS(.v9),
        .tvOS(.v16)
    ],
    products: [
        .library(
            name: "MyLibrary",
            targets: ["MyLibrary"]
        )
    ],
    dependencies: [],
    targets: [
        .target(
            name: "MyLibrary",
            swiftSettings: [
                .enableUpcomingFeature("ConciseMagicFile")
            ]
        )
    ]
)

// Vérification de compatibilité dans le code
#if swift(>=5.9)
// Fonctionnalités Swift 5.9+ (Xcode 15+)
#endif

Dans l'exemple, Package.swift définit les plateformes iOS 16+, macOS 13+, watchOS 9+, tvOS 16+. Tout projet avec un Deployment Target inférieur à iOS 16.0 ne pourra pas ajouter cette bibliothèque. Le paramètre swiftSettings inclut les fonctionnalités à venir pour une version spécifique de Swift. SPM vérifie automatiquement la compatibilité des platforms lors de l'ajout d'une dépendance.

CocoaPods et Podfile

Le Podfile utilise la directive platform :ios, '16.0'. Après pod install, CocoaPods vérifie le Deployment Target de chaque bibliothèque pod : si au moins une a un Target supérieur à celui du projet, l'installation échouera avec l'erreur "The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 17.0, but the range of supported deployment target versions is 16.0 to 17.0". La solution est de réduire le Target du pod problématique ou d'augmenter le Target du projet.

ruby
# Podfile — exemple avec Deployment Target
platform :ios, '16.0'

# Ignorer les avertissements de Deployment Target
post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '16.0'
        end
    end
end

Le hook post_install dans le Podfile définit forcément le Deployment Target 16.0 pour toutes les bibliothèques pod. Ceci est utile lorsque l'un des pods spécifie un Target plus élevé que nécessaire pour sa fonctionnalité. Utilisez-le uniquement si vous êtes sûr que le pod n'utilise pas d'API d'une version iOS supérieure.

Vérifications @available et #available dans le code Swift et Objective-C

@available et #available sont des directives Swift et Objective-C pour appeler en toute sécurité des API qui ne sont disponibles que sur certaines versions du système d'exploitation. Si le Deployment Target du projet est iOS 16.0 et qu'une méthode nécessite iOS 17.0, un appel direct provoquera un crash à l'exécution sur les appareils sous iOS 16.0–16.x. Les vérifications de disponibilité sont un outil obligatoire pour prendre en charge plusieurs versions d'iOS.

@available — Vérification déclarative

La directive @available s'applique aux classes, méthodes ou fichiers entiers. Si @available(iOS 17.0, *) est spécifié avant une classe, la classe entière n'est disponible que sur iOS 17.0+. Tenter d'appeler la classe sur iOS 16.0 provoquera une erreur à l'exécution. Utilisez @available pour isoler des modules entiers de fonctionnalités spécifiques à une version particulière du système d'exploitation. Pour les méthodes à l'intérieur d'une classe, @available permet de masquer des fonctions individuelles.

#available — Exécution conditionnelle

La directive #available (if #available) vérifie la version du système d'exploitation à l'exécution et n'exécute le code que lorsqu'elle correspond. Elle est utilisée à l'intérieur des fonctions pour choisir entre des implémentations nouvelles et anciennes. En Objective-C, l'équivalent est @available(iOS 17.0, *) à l'intérieur de if. Pour des vérifications plus complexes, utilisez ProcessInfo.processInfo.isOperatingSystemAtLeast pour comparer les composants de version (major, minor, patch).

swift
import UIKit
import SwiftUI

// 1. @available — classe entière uniquement pour iOS 17+
@available(iOS 17.0, *)
class ObservationViewModel: ObservableObject {
    @Published var name: String = "User"

    // Utilise Observation framework — disponible uniquement iOS 17+
    func updateWithObservation() {
        let newName = "Updated via Observation"
        name = newName
    }
}

// 2. #available — appel conditionnel dans une fonction
func configureLiveActivity() {
    if #available(iOS 16.1, *) {
        // API Live Activities — disponible depuis iOS 16.1
        let activity = Activity<MyAttributes>(
            attributes: MyAttributes(name: "Live"),
            contentState: MyContentState(value: 42)
        )
        Task {
            await activity.activate()
        }
    } else {
        // Repli : notification push ou rien
        print("Live Activities non disponible")
    }
}

// 3. ProcessInfo — vérification précise de version
func checkOSVersion() {
    let osVersion = ProcessInfo.processInfo.operatingSystemVersion
    print("iOS \(osVersion.majorVersion).\(osVersion.minorVersion).\(osVersion.patchVersion)")

    // Comparaison de composants
    if osVersion.majorVersion >= 17 {
        print("iOS 17+ détecté")
    }
}

// 4. Objective-C @available
// Objective-C utilise @available :
// if (@available(iOS 17.0, *)) { }

// 5. @available avec argument unavailable
@available(*, unavailable, message: "Use configureWithSwiftUI instead")
func legacyConfigureMethod() { }

La classe ObservationViewModel utilise @available pour isoler les fonctionnalités iOS 17. La fonction configureLiveActivity utilise #available pour vérifier Live Activities (iOS 16.1+) avec une implémentation de repli. ProcessInfo vérifie la version exacte du système d'exploitation. @available(*, unavailable) marque une méthode comme indisponible sur toutes les versions — pour la migration vers une nouvelle API. Sans ces vérifications, une application avec Deployment Target 16.0 plantera sur les appareils sous iOS 16.0 lors de l'appel d'API iOS 17.

Objective-C et @available

Objective-C utilise @available(iOS 17.0, *) avec la même sémantique que Swift #available. La différence : Objective-C vérifie à l'exécution, Swift #available également à l'exécution mais avec des indications du compilateur pour l'optimisation des branches. Pour le code Objective-C interagissant avec Swift, les vérifications de disponibilité sont nécessaires du côté Objective-C — le pont Swift n'ajoute pas de vérifications automatiques.

Comment choisir le bon Deployment Target pour votre projet

Choisir le iOS Deployment Target est une décision stratégique qui affecte trois aspects : la portée de l'audience, les API disponibles et la complexité de la maintenance du code. Il n'existe pas de valeur correcte unique — le choix dépend de l'audience cible de l'application, des fonctionnalités minimales requises et des ressources de l'équipe pour le support de la rétrocompatibilité.

Le premier facteur — les statistiques d'utilisation des versions d'iOS. Apple publie les données d'installation d'iOS à la WWDC et dans le tableau de bord Apple Developer. En juin 2025, la répartition est : iOS 15 — ~7 %, iOS 16 — ~48 %, iOS 17 — ~35 %, iOS 18 — ~10 %. Choisir Target 16.0 offre une couverture de 83 %, Target 17.0 — 35 %. Pour les applications grand public (réseaux sociaux, messagerie, commerce électronique), Target 16.0 est recommandé. Pour les applications B2B de niche avec des API spécifiques — Target 17.0.

Le deuxième facteur — les API requises. Si la fonctionnalité clé de l'application nécessite SwiftData (iOS 17+), Observation (iOS 17+) ou Live Activities (iOS 16.1+), le Target ne peut pas être inférieur à la version requise. L'analyse des API requises lors de la phase de conception évite la situation où, en milieu de développement, on découvre qu'un Target plus élevé est nécessaire. Utilisez les vérifications de disponibilité comme plan de secours, pas comme stratégie principale.

Le troisième facteur — les ressources de test. La prise en charge des anciennes versions d'iOS nécessite des tests sur des simulateurs et des appareils réels avec ces versions. iOS 15 est testé sur iPhone 6s/7, iOS 16 — sur iPhone 8/X, iOS 17 — sur iPhone XS/XR. Chaque version supplémentaire de rétrocompatibilité augmente le temps d'assurance qualité. Si l'équipe est petite, il est raisonnable de choisir un Target 2 à 3 versions en dessous de la version actuelle (16.0) — un équilibre entre couverture et effort.

Type d'applicationTarget recommandéCouvertureJustification
Grand public (social, marketplace)iOS 16.0~83%Audience maximale
Entreprise / B2BiOS 16.0~83%Les appareils d'entreprise se mettent à jour lentement
Startup / MVPiOS 17.0~35%Développement rapide avec les nouvelles API
Jeux (Metal 3+)iOS 17.0~35%Nécessitent de nouvelles API graphiques
Bibliothèque/SDKiOS 15.0~90%Compatibilité maximale pour les clients

Les bibliothèques et SDK doivent avoir le Deployment Target le plus bas possible (15.0 ou même 14.0) — les consommateurs de la bibliothèque peuvent avoir un Target plus élevé que le vôtre. Si une bibliothèque nécessite iOS 17.0, la moitié des projets ne pourront pas l'utiliser. Pour les applications, en revanche, vous pouvez vous permettre un Target plus élevé pour accéder aux nouvelles API.

Comment réduire le Deployment Target après l'avoir augmenté

Réduire le iOS Deployment Target est une tâche qui survient lorsqu'il est nécessaire d'élargir l'audience ou lors de la publication d'une bibliothèque compatible avec les anciens projets. Contrairement à l'augmentation, la réduction nécessite un travail actif sur le code : vous devez remplacer tous les appels directs aux API qui ne sont pas disponibles dans le nouveau Target (plus bas) par des vérifications #available avec des implémentations de repli.

La première étape — l'inventaire des API. Xcode n'affiche pas d'erreurs de compilation lors de la réduction du Target — il avertit seulement avec des avertissements jaunes. Vous devez trouver toutes les méthodes et classes marquées avec @available(iOS N+, *) où N est supérieur au nouveau Target. Utilisez la recherche dans le projet (Cmd+Shift+F) avec le motif "available(iOS". Chacun de ces appels est un candidat au refactoring.

La deuxième étape — le remplacement par des vérifications #available. Chaque appel d'API d'une version supérieure est encapsulé dans if #available(iOS N+, *) { } else { }. Pour les classes entières, utilisez #if os(iOS) avec @available au niveau du type. Si une API n'a pas de repli raisonnable (par exemple, Live Activities), la fonctionnalité est désactivée pour les anciennes versions avec notification à l'utilisateur.

swift
import UIKit
import SwiftUI

// Réduction du Deployment Target de 17.0 à 16.0

// AVANT (@available iOS 17.0) :
@available(iOS 17.0, *)
func setupObservation() {
    // Observation framework — iOS 17+ uniquement
    let model = ObservationViewModel()
    // ...
}

// APRÈS (vérification #available) :
func setupObservationCompatible() {
    if #available(iOS 17.0, *) {
        // iOS 17+ : Observation framework
        let model = ObservationViewModel()
        // ...
    } else {
        // iOS 16.x : ObservableObject avec @Published
        let model = LegacyObservableViewModel()
        // ...
    }
}

// Pour l'API UIKit iOS 17+ :
@available(iOS 17.0, *)
class ModernViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Utilise UIKit TraitChanges (iOS 17+)
        registerForTraitChanges([UITraitVerticalSizeClass.self]) { _, _ in }
    }
}

// Repli pour iOS 16 :
class LegacyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Pas de registerForTraitChanges — utilisation de traitCollectionDidChange
    }

    override func traitCollectionDidChange(_: UITraitCollection?) {
        super.traitCollectionDidChange(nil)
        // Gestion des changements de traits pour iOS 16
    }
}

// Fabrique pour sélectionner l'implémentation par version iOS
func makeViewController() -> UIViewController {
    if #available(iOS 17.0, *) {
        return ModernViewController()
    } else {
        return LegacyViewController()
    }
}

Le code démontre la réduction du Target de iOS 17.0 à 16.0. La fonction setupObservation est remplacée par setupObservationCompatible avec une vérification #available. Le ViewController est divisé en Modern (iOS 17+) et Legacy (iOS 16) avec une fabrique makeViewController qui sélectionne l'implémentation en fonction de la version du système d'exploitation. Cette architecture permet de prendre en charge deux Deployment Targets sans dupliquer l'ensemble de la base de code — seulement des modules versionnés.

Avertissements Xcode et leur résolution

Après avoir réduit le Deployment Target, Xcode surlignera en jaune tous les appels d'API indisponibles dans le nouveau Target. L'avertissement "In iOS 16.0 and later" signifie que la méthode nécessite une version supérieure. Solutions : ajouter @available ou if #available (recommandé), supprimer via @available(*, deprecated) pour une migration progressive, ou supprimer l'appel. Activer "Treat Warnings as Errors" dans le projet transformera ces avertissements en erreurs de compilation — activez cette option pour le contrôle.

Questions fréquentes

Qu'est-ce que le iOS Deployment Target ?

iOS Deployment Target est la version minimale d'iOS sur laquelle une application peut s'exécuter. Il est spécifié dans Xcode Project → Info → iOS Deployment Target. Une application avec Target 16.0 ne peut pas être installée sur iOS 15.0 et inférieur. L'App Store filtre les applications selon ce paramètre — les utilisateurs avec des versions non prises en charge ne voient pas l'application. L'équivalent sur Android est minSdkVersion.

En quoi le iOS Deployment Target diffère-t-il de minSdkVersion ?

Les deux paramètres définissent la version minimale du système d'exploitation pour installer une application. iOS Deployment Target est stocké dans Info.plist (MinimumOSVersion), minSdkVersion — dans AndroidManifest.xml. iOS n'a pas d'équivalents pour targetSdkVersion et compileSdkVersion — tous les changements de comportement sont appliqués lors de la compilation avec le nouveau Base SDK. Sur Android, les changements de comportement sont contrôlés via targetSdkVersion. Vérifications dans le code : @available en Swift vs Build.VERSION.SDK_INT en Android.

Quel iOS Deployment Target choisir en 2026 ?

Il est recommandé de choisir iOS 16.0 pour les applications grand public (83 % des appareils) et iOS 17.0 pour les startups et projets utilisant SwiftUI Observation/SwiftData (35 % des appareils). iOS 16.0 est pris en charge sur iPhone 8 et ultérieur, inclut SwiftUI Layout, NavigationStack, Live Activities. iOS 17.0 fournit Observation, SwiftData, TipKit. Pour les bibliothèques et SDK — iOS 15.0 pour une compatibilité maximale.

Comment vérifier la version d'iOS dans le code Swift ?

En Swift, utilisez #available(iOS 17.0, *) à l'intérieur des fonctions pour l'exécution conditionnelle du code ou @available(iOS 17.0, *) au niveau de la classe/méthode pour une vérification déclarative. Pour la version exacte — ProcessInfo.processInfo.operatingSystemVersion, qui renvoie OperatingSystemVersion. En Objective-C, utilisez @available(iOS 17.0, *) à l'intérieur de if. Sans vérifications, appeler une API au-dessus du Deployment Target provoque un crash à l'exécution.

Puis-je réduire le Deployment Target après la publication ?

Vous pouvez réduire le iOS Deployment Target, mais cela nécessite de remplacer tous les appels directs aux API des versions supérieures par des vérifications #available avec des implémentations de repli. Xcode avertira avec des avertissements jaunes mais n'affichera pas d'erreur. Les API sans repli raisonnable (Live Activities, SwiftData) sont désactivées sur les anciennes versions. Il est recommandé de commencer avec un Target 2 versions en dessous de la version actuelle pour éviter une migration complexe.

Résumé

  • iOS Deployment Target — la version minimale du système d'exploitation pour exécuter une application, équivalent de minSdkVersion sous Android
  • Configuré dans Xcode Build Settings (IPHONEOS_DEPLOYMENT_TARGET) et stocké dans Info.plist (MinimumOSVersion)
  • @available et #available — les principaux mécanismes Swift pour appeler en toute sécurité des API au-dessus du Deployment Target
  • Le choix du Target affecte la couverture des appareils : iOS 16.0 — 83 %, iOS 17.0 — 35 %, iOS 15.0 — 90 %
  • Pour les applications grand public, iOS 16.0 est recommandé ; pour les bibliothèques — iOS 15.0 ; pour les startups utilisant SwiftData — iOS 17.0
  • Réduire le Target nécessite de refactoriser tous les appels d'API de versions supérieures en vérifications #available avec des replis
  • Base SDK sur iOS est toujours le plus récent — les changements de comportement s'appliquent à toutes les applications, contrairement à targetSdkVersion d'Android

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi