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?
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:
Single View Application
.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).Info.plist
.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;
}
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)
J'espère que cela t'aides!
Vous devez effectuer quelques étapes supplémentaires:
Alors voici un tutoriel complet:
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
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"
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;
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
}
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;
}
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 .
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's
view
à 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;
}
Xcode 9.3.1 et Swift 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
}
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.
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
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
}
Oui, ou utilisez simplement l'une des versions bêta précédentes pour la créer, puis continuez sur la dernière version.
Vous pouvez créer votre propre modèle de projet pour Xcode. Pour votre demande, vous pouvez utiliser un modèle sur ce site:
Mise à jour: Swift 5 et iOS 13:
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()
}
}