Xcode senza Storyboard e ARC


116

Ho scaricato il nuovo xcode-5 e ho appena iniziato a usarlo.

Possiamo creare un'applicazione che includa direttamente storyboard e ARC, non richiede opzioni come le versioni precedenti.

Quindi, la mia domanda è come possiamo usare xcode5 senza ARC e storyboard. dobbiamo rimuovere manualmente il file storyboard? o c'è qualche altra opzione.


3
Nessuno può davvero rispondere a questa domanda, ma penso che Apple l'abbia fatto perché sia ​​Storyboard che ARC sono il futuro nello sviluppo di app con Xcode o in Objective-C. Dato che Xcode 5 è ancora una beta, potrebbe essere che aggiungano il supporto entro la fine dell'anno, ma penso che non accadrà.
HA

6
Rimuovere manualmente il file storyboard e rimuovere il -fobjc-arcflag del compilatore nelle impostazioni del progetto.

19
Le domande sugli strumenti utilizzati principalmente dai programmatori sono molto attinenti all'argomento , a condizione che non chiedano il "meglio" di qualcosa o consigli di "acquisto". L'ho riaperto di conseguenza.
Tim Post

1
Ma questo non è il posto giusto per farlo. Capiscilo.
MZimmerman6

3
l'unica cosa che rende questo sotto NDA sono le parole "Xcode 5". qualsiasi cosa effettivamente descritta può essere eseguita sulle versioni precedenti di Xcode, quindi tecnicamente questo argomento è libero di discutere.
AtomRiot

Risposte:


150

Crea un progetto con un'applicazione vuota e aggiungi qualsiasi viewcontroller (ho aggiunto TestViewController qui)

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

PASSI PER RIMUOVERE L'ARCO

1) Nelle impostazioni di build, impostare Automatic Reference Counting su NO .

////////////////////////////////////////////////// /////////////////////////FINE//////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

Se hai già creato un'applicazione con storyboard e ARC, allora

PASSAGGI PER RIMUOVERE LA TAVOLA DELLA STORIA

1) Rimuovi il file Main.storyboard dal tuo progetto.

2) Aggiungi nuovi file con xib per il tuo controller, se non viene aggiunto nei sorgenti compilati nelle fasi di compilazione, aggiungili manualmente.

3) Rimuovi il nome base del file dello storyboard principale da plist .

4) Modificare il file appdelegate didFinishLaunchingWithOptions e aggiungere:

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

[self.window makeKeyAndVisible];

proprio come :

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

     // Override point for customization after application launch.

     TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
     UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
     self.window.rootViewController = nav;
     [self.window makeKeyAndVisible];

     return YES;
}


Ora, nell'esempio sopra devi gestire la gestione della memoria manualmente come,

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

 [test release]; 

PASSI PER RIMUOVERE L'ARCO

1) Nelle impostazioni di build, impostare Automatic Reference Counting su NO .


7
Non c'è più l'opzione "progetto vuoto"? Non credo che inizierò a usare gli storyboard.
Sulthan

1
Assicurati di cambiare l'impostazione "Interfaccia principale" di Target con il tuo nuovo <Controller di visualizzazione> di root.
Paul Brady,

hai ragione @Sulthan possiamo farlo con un progetto vuoto, ma queste sono le modifiche se ho già creato un'applicazione basata sulla visualizzazione. (dobbiamo rimuovere manualmente un po 'di codice storyboard dal file appDelegate) mentre in un'applicazione vuota dobbiamo aggiungere nuovo codice al suo interno :)
PJR

Mi sono imbattuto in una sceneggiatura che aggiungerà l'opzione per rimuovere gli storyboard: stackoverflow.com/a/19792955/329928
Chris Leyva

perché il nav UINavigationController * non viene rilasciato automaticamente? e dovremmo usare _window in [UIWindow alloc]?
hariszaman

44

Invece di eliminare il file dello storyboard, puoi creare un nuovo progetto con il modello di applicazione vuota. In questo modo puoi evitare la creazione del file storyboard.

Utilizzare i seguenti passaggi per omettere lo storyboard: inserisci qui la descrizione dell'immagine

  1. Crea un nuovo progetto con il modello Applicazione vuota.
  2. Aggiungere un nuovo viewController (Esempio: LoginViewController)
  3. Modificare l' didFinishLaunchingWithOptionsnel AppDelegate.mfile come di seguito specificato.

Cambia in:

#import "LoginViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Rimuovi ARC: vai su Build Setting -> Objective-C Automatic Reference Counting -> NO


1
Wow! Funziona come un fascino e molto più semplice della risposta accettata. Dovevo solo essere sicuro di cambiare tutti i riferimenti a LoginViewControllerin modo che corrispondessero al nome del mio controller.
JohnK

11

creare un nuovo progetto

! [Crea nuovo progetto]

rimuovere il nome di base del file dello storyboard principale in Informazioni

// rimuove il nome di base del file dello storyboard principale in Info

Aggiungi questo codice in appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

Quindi rimuovi automaticamente lo storyboard.

Per favore prova questo ... eseguito con successo. Grazie


5

Scorciatoia: preferisco

Crea il progetto senza Storyboard e ARC in xcode4, quindi apri il progetto in xcode5.


1
Mantenere una versione precedente di Xcode solo per questo non ne vale la pena. Preferisco creare un nuovo progetto, eliminare le cose dello Storyboard, aggiungere l'istanza di UIWindow in appDelegate e salvarlo come progetto modello per dopo.
kervich

3

Xcode 4 aveva la casella di controllo "Usa Storyboard" quando hai creato un nuovo progetto. È possibile prendere i vecchi modelli di applicazione Xcode 4 (file XML) e convertirli in Xcode 5. In questo modo, si recuperano i vecchi modelli che consentono di scegliere se si desidera o meno lo storyboard.


Ho scritto uno script che fa tutto il lavoro per te: https://github.com/jfahrenkrug/Xcode4templates


Dopo aver eseguito lo script, avrai una sezione "Xcode 4" nella schermata "Nuovo progetto":

inserisci qui la descrizione dell'immagine

E poi - ahimè! - riavrai indietro le tue amate scelte:

inserisci qui la descrizione dell'immagine

Avrai bisogno di una copia del bundle Xcode 4 .app da http://developer.apple.com/ios per usare questo script.


1
Tuttavia, questi modelli sono vecchi e non sfruttano tutte le nuove modifiche disponibili, come -registerClass: forCellReuseIdentifier :.
Mahboudz

@mahboudz Questo è vero. Devi modificarlo se quella funzionalità è importante per te. Ovviamente spero che Apple riporti la possibilità di rinunciare a Storyboard in una futura versione di Xcode.
Johannes Fahrenkrug

1
Lo spero. Come te, uso Storyboard in app più piccole, principalmente a causa del rapido sviluppo di TableView, ma in app più grandi, Storyboard è un grosso problema. Dallo scorrere, al ricordare gli ID segue (devono aggiungere un modo per utilizzare #defines o const NSString * tra storyboard e file sorgente), per risolvere i conflitti di git e altro ancora, gli storyboard non sono il tutto e finisci tutto.
mahboudz

quelle frecce V / A però.
John Riselvato

1
@JohnRiselvato Hai ragione :) Le odiose frecce ora sono sparite :)
Johannes Fahrenkrug

0

Ho un suggerimento:

  1. Il primo: creo il mio progetto con XCode 4.6 (perché questa versione è la più vicina a XCode 5).
    • Ovviamente con XCode 4.6, puoi scegliere di utilizzare o meno ARC, Storyboard.
  2. Il secondo: dopodiché aprirò il mio progetto con XCode 5. => Penso che Xcode 5 capirà che il progetto utilizza nonARC e, naturalmente, non ha Storyboard.

Spero che il tuo progetto funzioni! : D

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.