Xcode6
ha rimosso il Empty Application
modello durante la creazione di un nuovo progetto. Come possiamo creare un'applicazione vuota (senza Storyboard) in Xcode6
e sopra, come nelle versioni precedenti?
Xcode6
ha rimosso il Empty Application
modello durante la creazione di un nuovo progetto. Come possiamo creare un'applicazione vuota (senza Storyboard) in Xcode6
e sopra, come nelle versioni precedenti?
Risposte:
Non esiste alcuna opzione nelle XCode6
versioni precedenti e superiori per la creazione diretta di un'applicazione vuota come nelle versioni XCode5
precedenti. Ma possiamo ancora creare un'applicazione senza Storyboard
seguire questi passaggi:
Single View Application
.Main.storyboard
e LaunchScreen.xib
(selezionali, fai clic con il pulsante destro del mouse e scegli di rimuoverli dal progetto o eliminarli completamente).Info.plist
file.Swift 3 e versioni successive:
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
}
Objective-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
e la Info.plist
voce corrispondente . Senza di essa, l'app non occuperà l'intera dimensione dello schermo su iPhone più grandi, il che è brutto.
Un approccio semplice sarebbe quello di copiare il XCode 5
's Empty Application
modello di XCode
' s cartella templates.
Puoi scaricare XCode 5
il Empty Application
modello da qui , quindi decomprimerlo e copiarlo nella /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application
directory.
PS questo approccio funziona anche con swift!
Modifica
Come suggerito da @harrisg in un commento qui sotto, puoi posizionare il modello sopra menzionato nella ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/
cartella in modo che possa essere disponibile anche se Xcode viene aggiornato.
E se non è presente tale directory, potrebbe essere necessario creare questa struttura di directory: Templates/Project Templates/iOS/Application/
in~/Library/Developer/Xcode/
Utilizzando questo semplice approccio sono in grado di creare un Empty Application
in XCode 6
. (Schermata allegata di seguito)
Spero che questo ti aiuti!
Ci sono alcuni altri passaggi che devi fare:
Quindi ecco un tutorial completo:
aggiungi il file "[nome app] -Prefix.pch" ai file di supporto con contenuti:
#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
aggiungi "$ SRCROOT / $ PROJECT_NAME / [nome file pch]" alle impostazioni del progetto -> Impostazioni di costruzione -> Apple LLVM 6.0 - Lingua -> "Intestazione prefisso"
implementare application:didFinishLaunchingWithOptions:
metodo:
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 risposta di Akhils è totalmente corretta. Per quelli di noi che usano Swift, sarebbe così:
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 e Swift 4
Dopo questi passaggi vai su AppDelegate.swift e in funzione didFinishLaunchingWithOptions scrivi il seguente:
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 e Swift 5
Dopo questi passaggi vai a SceneDelegate e nella scena della funzione scrivi il seguente:
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()
}
C'è un altro passo che devi fare:
1) rimuovere il nome base del file dello storyboard principale nel file 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;
}
Aggiornamento: Swift 5 e iOS 13:
SceneDelegate.swift
e cambia func scene
da: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 }
}
per
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()
}
}
Ho il modello di applicazione vuoto originale che era utilizzato nelle versioni Xcode precedenti a Xcode 6. L'ho caricato qui .
Puoi scaricarlo e incollarlo manualmente nella directory del modello Xcode o installarlo utilizzando il gestore pacchetti per Xcode, Alcatraz . Cerca l' applicazione Xcode Empty .
Rimuovere il file Main.storyboard
Questo può essere semplicemente cancellato.
Aggiorna il file ProjectName-Info.plist
Rimuovi la Main storyboard base file name
chiave.
Creare un file pennino e collegarlo al controller di visualizzazione del progetto
1.Creare un file pennino (File -> Nuovo -> File -> Visualizza)
2.Aggiorna la File's Owner's
classe in qualunque modo venga chiamato il controller di visualizzazione del progetto
3.Collegare l' File's Owner's
view
outlet view
all'oggetto nel file pennino
Aggiorna il delegato dell'app
1.Importa il file di intestazione del controller di visualizzazione del progetto
2.Aggiorna il :didFinishLaunchingWithOptions:
metodo dell'applicazione :
- (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;
}
Per Xcode 8
e Swift 3
.
Basta eliminare il .storyboard
file, eliminerà automaticamente il riferimento corrispondente dal tuo .plist
e nel tuo AppDelegate.swift
aggiungere il seguente codice.
let initialViewController = UIViewController() initialViewController.view.backgroundColor = .white window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = initialViewController window?.makeKeyAndVisible()
Puoi scrivere il tuo ViewCoolleroller personalizzato e utilizzarlo AppDelegate.swift
come tuo self.window?.rootViewController
, basta sostituire UIViewController con il tuo ViewController nel codice sopra.
Sto usando XCode6 Beta e ho cercato un'altra soluzione di questo problema aggiungendo un modello vuoto da XCode5.xx a XCode6 Beta.
Per questo fare clic destro su XCode5.xx in Applicazioni fare clic su "Mostra contenuto pacchetto" e copiare "Svuota Application.xctemplate" dal percorso indicato
Contenuti / Sviluppatore / Piattaforme / iPhoneOS.platform / Sviluppatore / Libreria / Xcode / Modelli / Modelli di progetto / Applicazione
Ora esci dalla finestra e apri il percorso indicato per XCode6
Contenuti / Sviluppatore / Piattaforme / iPhoneOS.platform / Sviluppatore / Libreria / Xcode / Modelli / Modelli di progetto / iOS / Applicazione /
Incolla "Svuota Application.xctemplate" nella cartella dell'applicazione. Ora riavvia XCode6 chiudendo e crea un nuovo progetto. Otterrai l'opzione "Svuota applicazione".
Ora quando sto creando un nuovo progetto vuoto, un file .pch viene aggiunto automaticamente nel progetto (che dobbiamo aggiungere manualmente in XCode6)
Spero che funzioni
Puoi creare il tuo modello di progetto per Xcode. Per la tua richiesta, puoi utilizzare il modello su questo sito:
Altri hanno già spiegato come sbarazzarsi dello storyboard, quindi salterò su quello qui. È così che preferisco farlo nel mio codice con un concatenamento meno opzionale (scritto in 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
}
aggiornamento su Xcode 11 e iOS 13. Dopo aver impostato tutto ma ancora visualizzato una schermata nera, è perché il ciclo di vita è gestito da UISceneDelegate e quando si crea un nuovo progetto, genererà automaticamente UISceneDelegate.m e UISceneDelegate.h. Per tornare ai vecchi tempi prima di abituarci a UISceneDelegate. i seguenti passaggi potrebbero aiutare:
elimina Application Scene Manifest in plist.
elimina Application Scene Manifest.h e Application Scene Manifest.m
elimina il codice sotto il segno #pragma - Ciclo di vita di UISceneSession in APPdelegate.m
aggiungi la finestra UIWindow * di @property (strong, nonatomic); in APPdelegate.h