web-dev-qa-db-fra.com

Comment créer une application vide dans Xcode sans Storyboard

Xcode6 a supprimé le modèle Empty Application lors de la création d'un nouveau projet. Comment créer une application vide (sans Storyboard) dans Xcode6 et au-dessus, comme dans les versions précédentes?

139
Akhil K C

Il n'y a pas d'option dans XCode6 et versions supérieures pour créer directement une application vide comme dans XCode5 et versions antérieures. Mais nous pouvons toujours créer une application sans Storyboard en procédant comme suit:

  1. Créez un Single View Application.
  2. Supprimez Main.storyboard et LaunchScreen.xib (sélectionnez-les, faites un clic droit et choisissez de les supprimer du projet ou de les supprimer complètement).
  3. Supprimez les entrées "Nom de base du fichier de scénario principal" et "Nom de base du fichier d'interface de l'écran de démarrage" dans le fichier Info.plist.
  4. Ouvrez AppDelegate.m et modifiez applicationDidFinishLaunchingWithOptions de sorte qu'il se présente comme suit:

Swift 3 et plus:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.backgroundColor = UIColor.white
        self.window?.makeKeyAndVisible()
        return true
    }

Swift 2.x:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.backgroundColor = UIColor.whiteColor()
        self.window?.makeKeyAndVisible()
        return true
    }

Objectif c:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.rootViewController = [[ViewController alloc] init];
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
    }
269
Akhil K C

Une approche simple consisterait à copier le modèle XCode 5 de Empty Application dans le répertoire des modèles de XCode.

Vous pouvez télécharger le modèle XCode 5 de Empty Application depuis ici , puis décompressez-le et copiez-le dans /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application répertoire.

P.S cette approche fonctionne également avec Swift!

Modifier
Comme suggéré par @harrisg dans un commentaire ci-dessous, vous pouvez placer le modèle mentionné ci-dessus dans le dossier ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/ afin qu'il soit disponible même si Xcode est mis à jour.
Et s’il n’existe aucun répertoire de ce type, vous devrez peut-être créer cette structure de répertoires: Templates/Project Templates/iOS/Application/ dans ~/Library/Developer/Xcode/

En utilisant cette approche simple, je peux créer un Empty Application dans XCode 6. (Capture d'écran ci-dessous)

Xcode Empty Application Template J'espère que cela t'aides!

32
S1LENT WARRIOR

Vous devez effectuer quelques étapes supplémentaires:

  1. Pour ajouter un fichier de préfixe. (Si tu en as besoin)
  2. Pour ajouter une image de lancement par défaut, sinon la taille de l'application sera 320x480 sur iPhone 5.

Alors voici un tutoriel complet:

  1. supprimer le fichier Main.storyboard
  2. supprimer le fichier LaunchScreen.xib
  3. supprimez la propriété "Nom de base du fichier du storyboard principal" dans Info.plist.
  4. supprimez la propriété "Nom de base du fichier d'interface d'écran de lancement" dans Info.plist.
  5. ajoutez le fichier "[nom de l'application] -Prefix.pch" aux fichiers de support avec le contenu:

    #import <Availability.h>
    
    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iOS SDK 3.0 and later."
    #endif
    
    #ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #endif
    
  6. ajoutez "$ SRCROOT/$ PROJECT_NAME/[nom du fichier pch]" aux paramètres du projet -> Paramètres de construction -> Apple LLVM 6.0 - Langue -> "Préfixe en-tête"

  7. ajoutez "OUI" aux paramètres du projet -> Paramètres de construction -> Apple LLVM 6.0 - Langue -> "En-tête de préfixe de précompilation"
  8. ouvrez "Image.xcassets" et ajoutez LaunchImage
  9. construire le projet, puis il y aura un avertissement sur l'image de lancement par défaut manquante, appuyez simplement sur l'avertissement et sélectionnez pour ajouter la valeur par défaut, cela ajoutera "Default-568h @ 2x" OR - Si vous souhaitez utilisez les images splash de "Images.xcassets", allez dans les paramètres du projet -> CIBLES -> Général -> dans "Lancer le source d'images", choisissez d'utiliser le catalogue d'éléments, il en créera un nouveau, vous pourrez ensuite choisir lequel utiliser en tant que catalogue d'actifs de l'existant.
  10. implémenter la méthode application:didFinishLaunchingWithOptions::

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    return YES;
    
17
Nikita

Akhils répond est totalement correct. Pour ceux d'entre nous qui utilisent Swift, ce serait comme ceci:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor()
    self.window?.makeKeyAndVisible()
    return true
}
16
Nils Hott

Vous devez encore accomplir une étape:

1) Supprimez le nom de base du fichier de storyboard principal dans le fichier plist.

//AppDelegate.h


@property (strong, nonatomic) UIViewController *viewController;
@property (strong, nonatomic) UINavigationController *nav;

//AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {`enter code here`
    // Override point for customization after application launch.

    CGRect screenBounds = [[UIScreen mainScreen] bounds];

    UIWindow *window = [[UIWindow alloc] initWithFrame:screenBounds];


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];



    self.viewController = [[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    self.nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];

    [window setRootViewController:  self.nav];

    [window makeKeyAndVisible];

    [self setWindow:window];

    return YES;
}
10
Bhushan_pawar

J'ai le modèle d'application vide original qui était utilisé dans les versions de Xcode antérieures à Xcode 6. Je l'ai téléchargé ici .

Vous pouvez le télécharger et le coller manuellement dans le répertoire du modèle Xcode ou l'installer à l'aide du gestionnaire de paquets pour Xcode, Alcatraz . Il suffit de chercher Xcode Vide Application .

6
Isuru

supprime le fichier Main.storyboard

Cela peut simplement être supprimé.

met à jour le fichier ProjectName-Info.plist

Supprimez la touche Main storyboard base file name.

Créer un fichier nib et le lier au contrôleur de vue du projet

1.Créez un fichier nib (Fichier -> Nouveau -> Fichier -> Affichage)

2.Mettez à jour la classe File's Owner's à l’appel du contrôleur de vue du projet.

3. Liez la sortie File's Owner'sview à l'objet view du fichier nib.

Mettre à jour le délégué de l'application

1.Importer le fichier d’en-tête du contrôleur de vue du projet

2.Mettez à jour la méthode application:didFinishLaunchingWithOptions::

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    MyViewController *viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
5
Bhargav

Xcode 9.3.1 et Swift 4

  1. Tout d’abord, vous devez supprimer Main.storyboard in Navigateur de projet menu.
  2. Supprimez la ligne Nom de base du fichier du storyboard dans Info.plist .
  3. Et n'oubliez pas de supprimer la cellule Interface principale (supprimez simplement Principal ) dans votre cible du projet - Général - Informations sur le déploiement
  4. Après que les étapes vont à AppDelegate.Swift et en fonction didFinishLaunchingWithOptions écrivez le suivant:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
    
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = UINavigationController(rootViewController: ViewController())
    
        return true
    }
    
5
iAleksandr

Pour Xcode 8 et Swift 3. Supprimez simplement le fichier .storyboard, la référence correspondante sera automatiquement supprimée de votre .plist et de votre AppDelegate.Swift ajoutez le code suivant.

    let initialViewController = UIViewController()
    initialViewController.view.backgroundColor = .white
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = initialViewController
    window?.makeKeyAndVisible()

Vous pouvez écrire votre propre ViewCountroller personnalisé et l'utiliser dans le AppDelegate.Swift en tant que votre self.window?.rootViewController, il vous suffit de remplacer UIViewController par votre propre ViewController dans le code ci-dessus.

5
Vakas

J'utilise XCode6 Beta et j'ai cherché une autre solution à ce problème en ajoutant un modèle vide de XCode5.x.x à XCode6 Beta.

Pour ce faire, cliquez avec le bouton droit sur XCode5.x.x dans Applications, cliquez sur "Afficher le contenu du package" et copiez "Empty Application.xctemplate" dans le chemin indiqué.

Contenu/Développeur/Plateformes/iPhoneOS.platform/Développeur/Bibliothèque/Xcode/Modèles/Modèles de projet/Application

Maintenant quittez la fenêtre et ouvrez le chemin donné pour XCode6

Table des matières/Développeur/Plateformes/iPhoneOS.platform/Développeur/Bibliothèque/Xcode/Modèles/Modèles de projets/iOS/Application /

Collez 'Empty Application.xctemplate' dans le dossier de l'application. Maintenant, redémarrez XCode6 en quittant & créez un nouveau projet. Vous obtiendrez l'option 'Application vide'.

Maintenant, lorsque je crée un nouveau projet vide, un fichier .pch est ajouté automatiquement dans le projet (à ajouter manuellement dans XCode6)

J'espère que ça va marcher

3
Gagan_iOS

D'autres ont déjà expliqué comment se débarrasser du story-board, je vais donc sauter ici. Voici comment je préfère le faire dans mon code avec moins de chaînage optionnel (écrit en Swift 3.1):

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.backgroundColor = .white
    window.rootViewController = MyRootViewController()
    window.makeKeyAndVisible()
    self.window = window

    return true
}
1
DevAndArtist

Oui, ou utilisez simplement l'une des versions bêta précédentes pour la créer, puis continuez sur la dernière version.

1
P1kachu

Vous pouvez créer votre propre modèle de projet pour Xcode. Pour votre demande, vous pouvez utiliser un modèle sur ce site:

https://github.com/elprup/xcode7-project-template

1
elprup

Mise à jour: Swift 5 et iOS 13:

  1. Créer une application à vue unique.
  2. Supprimer Main.storyboard (clic droit et supprimer).
  3. Supprimez l'entrée "Nom de base du fichier de storyboard principal" dans le fichier Info.plist.
  4. Ouvrez SceneDelegate.Swift et changez func scene à partir de:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let _ = (scene as? UIWindowScene) else { return }
}

à

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).x

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
    }
}
0
Eric Wiener