Xcode6
a supprimé le Empty Application
modèle 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 antérieures?
Xcode6
a supprimé le Empty Application
modèle 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 antérieures?
Réponses:
Il n'y a pas d'option dans XCode6
et au-dessus des versions pour créer directement une application vide comme dans XCode5
et plus tôt. Mais nous pouvons toujours créer une application sans Storyboard
en suivant ces étapes:
Single View Application
.Main.storyboard
et LaunchScreen.xib
(sélectionnez-les, cliquez avec le bouton droit de la souris et choisissez de les supprimer du projet ou de les supprimer complètement).Info.plist
fichier.Swift 3 et supérieur:
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;
}
LaunchScreen.xib
et l' Info.plist
entrée correspondante . Sans cela, l'application ne prendra pas toute la taille de l'écran sur les iPhones plus grands, ce qui est moche.
Une approche simple serait de copier le XCode 5
« s Empty Application
modèle à XCode
» s modèles répertoire.
Vous pouvez télécharger XCode 5
le Empty Application
modèle de ici , puis le décompresser et le copier dans le /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application
répertoire.
PS 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 un ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/
dossier afin qu'il soit disponible même si Xcode est mis à jour.
Et s'il n'y a pas de 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 suis capable de créer un fichier Empty Application
in XCode 6
. (Capture d'écran ci-dessous)
J'espère que cela t'aides!
Vous devez suivre quelques étapes supplémentaires:
Voici donc 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 de fichier pch]» aux paramètres du projet -> Paramètres de construction -> Apple LLVM 6.0 - Langue -> «En-tête de préfixe»
application:didFinishLaunchingWithOptions:
méthode de mise en œuvre :
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;
La réponse d'Akhils est totalement correcte. 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
}
Xcode 9.3.1 et Swift 4
Après ces étapes, accédez à AppDelegate.swift et dans la 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
}
Xcode 11.2.1 et Swift 5
Après cela, allez à SceneDelegate et dans la scène de fonction écrivez le suivant:
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 windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
}
Il y a une autre étape que vous devez faire:
1) supprimer le nom de base du fichier principal du storyboard 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;
}
Mise à jour: Swift 5 et iOS 13:
SceneDelegate.swift
et changer func scene
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()
}
}
J'ai le modèle original d'application vide qui a été utilisé dans les versions de Xcode avant Xcode 6. Je l'ai téléchargé ici .
Vous pouvez soit le télécharger et le coller manuellement dans le répertoire des modèles Xcode, soit l'installer à l'aide du gestionnaire de packages pour Xcode, Alcatraz . Recherchez simplement l' application Xcode Empty .
Supprimer le fichier Main.storyboard
Cela peut simplement être supprimé.
Mettre à jour le fichier ProjectName-Info.plist
Retirez la Main storyboard base file name
clé.
Créer un fichier nib et créer un lien vers le contrôleur de vue du projet
1.Créez un fichier nib (Fichier -> Nouveau -> Fichier -> Afficher)
2.Mettez à jour la File's Owner's
classe sur le nom du contrôleur de vue du projet
3.Liez la File's Owner's
view
prise à l' view
objet dans le fichier nib
Mettre à jour le délégué d'application
1. importez le fichier d'en-tête du contrôleur de vue du projet
2.Mettez à jour la :didFinishLaunchingWithOptions:
méthode d' application :
- (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;
}
Pour Xcode 8
et Swift 3
.
Supprimez simplement le .storyboard
fichier, il supprimera automatiquement la référence correspondante de votre .plist
et dans votre AppDelegate.swift
ajouter 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 en AppDelegate.swift
tant que votre self.window?.rootViewController
, remplacez simplement 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.xx à XCode6 Beta.
Pour ce clic droit sur XCode5.xx dans Applications, cliquez sur `` Afficher le contenu du package '' et copiez `` Empty Application.xctemplate '' à partir du chemin donné
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
Contenu / Développeur / Plateformes / iPhoneOS.platform / Développeur / Bibliothèque / Xcode / Modèles / Modèles de projet / iOS / Application /
Collez 'Empty Application.xctemplate' dans le dossier Application. Redémarrez maintenant XCode6 en quittant et créez un nouveau projet. Vous obtiendrez l'option «Application vide».
Maintenant, lorsque je crée un nouveau projet vide, un fichier .pch automatiquement ajouté dans le projet (que nous devons ajouter manuellement dans XCode6)
J'espère que cela fonctionnera
Vous pouvez créer votre propre modèle de projet pour Xcode. Pour votre demande, vous pouvez utiliser le modèle sur ce site:
D'autres ont déjà expliqué comment se débarrasser du storyboard, je vais donc sauter sur celui-ci ici. C'est ainsi que 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
}
mise à jour sur Xcode 11 et ios 13. Une fois que tout est configuré mais que vous voyez toujours un écran noir, c'est parce que le cycle de vie est géré par UISceneDelegate et lorsque vous créez un nouveau projet, il génère automatiquement UISceneDelegate.m et UISceneDelegate.h. Pour revenir à l'ancien temps avant de nous habituer à UISceneDelegate. les étapes suivantes pourraient aider:
supprimer le manifeste de la scène d'application dans plist.
supprimer Application Scene Manifest.h et Application Scene Manifest.m
supprimer le code sous la marque #pragma - Cycle de vie UISceneSession dans APPdelegate.m
ajouter @property (forte, non atomique) UIWindow * window; dans APPdelegate.h