Xcode6
ha eliminado la Empty Application
plantilla al crear un nuevo proyecto. ¿Cómo podemos crear una aplicación vacía (sin Storyboard) Xcode6
y superior, como en versiones anteriores?
Xcode6
ha eliminado la Empty Application
plantilla al crear un nuevo proyecto. ¿Cómo podemos crear una aplicación vacía (sin Storyboard) Xcode6
y superior, como en versiones anteriores?
Respuestas:
No hay una opción en las XCode6
versiones y superiores para crear directamente una aplicación vacía como en XCode5
y antes. Pero aún podemos crear una aplicación sin Storyboard
seguir estos pasos:
Single View Application
.Main.storyboard
y LaunchScreen.xib
(selecciónelos, haga clic con el botón derecho y elija eliminarlos del proyecto o eliminarlos por completo).Info.plist
archivo.Swift 3 y superior:
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
}
C objetivo:
- (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
y la Info.plist
entrada correspondiente . Sin él, la aplicación no ocupará todo el tamaño de la pantalla en iPhones más grandes, lo cual es feo.
Un enfoque simple sería copiar el XCode 5
's Empty Application
plantilla para XCode
' s plantillas de directorio.
Puede descargar XCode 5
la Empty Application
plantilla desde aquí , luego descomprimirla y copiarla al /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application
directorio.
PD: este enfoque también funciona con Swift.
Editar
Según lo sugerido por @harrisg en un comentario a continuación, puede colocar la plantilla mencionada anteriormente en la ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/
carpeta para que esté disponible incluso si se actualiza Xcode.
Y si no hay tal directorio presente, entonces es posible que deba crear esta estructura de directorio: Templates/Project Templates/iOS/Application/
en~/Library/Developer/Xcode/
El uso de este enfoque simple que soy capaz de crear una Empty Application
en XCode 6
. (Captura de pantalla adjunta a continuación)
¡Espero que esto ayude!
Hay algunos pasos más que debe seguir:
Así que aquí hay un tutorial completo:
agregue el archivo "[nombre de la aplicación] -Prefix.pch" a los archivos de soporte con contenido:
#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
agregue "$ SRCROOT / $ PROJECT_NAME / [pch file name]" a la configuración del proyecto -> Configuración de compilación -> Apple LLVM 6.0 - Idioma -> "Encabezado de prefijo"
application:didFinishLaunchingWithOptions:
método de implementación :
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 respuesta de Akhils es totalmente correcta. Para aquellos de nosotros que usamos Swift, sería así:
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 y Swift 4
Después de esos pasos, vaya a AppDelegate.swift y en la función didFinishLaunchingWithOptions escriba lo siguiente:
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 y Swift 5
Después de esos pasos, vaya a SceneDelegate y en la escena de función escriba lo siguiente:
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()
}
Hay un paso más que debes hacer:
1) eliminar el nombre base del archivo del guión gráfico principal en el archivo 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;
}
Actualización: Swift 5 y iOS 13:
SceneDelegate.swift
y cambiar func scene
desde: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 }
}
a
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()
}
}
Tengo la plantilla de aplicación vacía original que se usó en las versiones de Xcode anteriores a Xcode 6. La he subido aquí .
Puede descargarlo y pegarlo en el directorio de plantillas de Xcode manualmente o instalarlo usando el administrador de paquetes para Xcode, Alcatraz . Simplemente busque Xcode Empty Application .
Eliminar el archivo Main.storyboard
Esto simplemente se puede eliminar.
Actualice el archivo ProjectName-Info.plist
Retirar la Main storyboard base file name
llave.
Cree un archivo plumín y enlace al controlador de vista del proyecto
1.Cree un archivo plumín (Archivo -> Nuevo -> Archivo -> Ver)
2. Actualice la File's Owner's
clase a lo que se llama el controlador de vista del proyecto
3.Enlace la File's Owner's
view
salida al view
objeto en el archivo plumín
Actualiza el delegado de la aplicación
1.Importar el archivo de encabezado del controlador de vista del proyecto
2. Actualice el :didFinishLaunchingWithOptions:
método de aplicación :
- (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;
}
Para Xcode 8
y Swift 3
.
Simplemente elimine el .storyboard
archivo, eliminará automáticamente la referencia correspondiente de usted .plist
y en su AppDelegate.swift
agregará el siguiente código.
let initialViewController = UIViewController() initialViewController.view.backgroundColor = .white window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = initialViewController window?.makeKeyAndVisible()
Puede escribir su propio ViewCountroller personalizado y usarlo AppDelegate.swift
como su self.window?.rootViewController
, simplemente reemplace el UIViewController con su propio ViewController en el código anterior.
Estoy usando XCode6 Beta y busqué otra solución de este problema agregando una plantilla vacía de XCode5.xx a XCode6 Beta.
Para esto, haga clic derecho en XCode5.xx en Aplicaciones, haga clic en 'Mostrar contenido del paquete' y copie 'Empty Application.xctemplate' de la ruta dada
Contenidos / Desarrollador / Plataformas / iPhoneOS.platform / Desarrollador / Biblioteca / Xcode / Plantillas / Plantillas de proyectos / Aplicación
Ahora salga de la ventana y abra la ruta dada para XCode6
Contenido / Desarrollador / Plataformas / iPhoneOS.platform / Desarrollador / Biblioteca / Xcode / Plantillas / Plantillas de proyectos / iOS / Aplicación /
Pegue 'Empty Application.xctemplate' dentro de la carpeta de la aplicación. Ahora reinicie XCode6 al salir y crear un nuevo proyecto. Obtendrá la opción 'Aplicación vacía'.
Ahora, cuando estoy creando un nuevo proyecto vacío, se agrega automáticamente un archivo .pch en el proyecto (que tenemos que agregar manualmente en XCode6)
Espero que funcione
Puede crear su propia plantilla de proyecto para Xcode. Para su solicitud, puede usar la plantilla en este sitio:
Otros ya han explicado cómo deshacerse del guión gráfico, por lo que omitiré ese aquí. Así es como prefiero hacerlo en mi código con menos encadenamiento opcional (escrito 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
}
actualizar en Xcode 11 y ios 13. Después de configurar todo pero aún ver una pantalla en negro, es porque el ciclo de vida lo maneja UISceneDelegate y cuando crea un nuevo proyecto, generará automáticamente UISceneDelegate.m y UISceneDelegate.h. Para volver a los viejos tiempos antes de acostumbrarnos a UISceneDelegate. Los siguientes pasos podrían ayudar:
eliminar el Manifiesto de escena de aplicación en plist.
eliminar Application Scene Manifest.h y Application Scene Manifest.m
eliminar código bajo la marca #pragma - Ciclo de vida UISceneSession en APPdelegate.m
agregue la ventana UIWindow * de @property (strong, nonatomic); en APPdelegate.h