Xcode ohne Storyboard und ARC

116

Ich habe den neuen xcode-5 heruntergeladen und gerade damit begonnen.

Wir können Anwendungen direkt erstellen, einschließlich Storyboard und ARC. Es wird nicht nach Optionen wie in früheren Versionen gefragt.

Meine Frage ist also, wie wir xcode5 ohne ARC und Storyboard verwenden können. Müssen wir die Storyboard-Datei manuell entfernen? oder gibt es eine andere Option.

PJR
quelle
3
Niemand kann das wirklich beantworten, aber ich denke, Apple hat es getan, weil sowohl Storyboards als auch ARC die Zukunft bei der Entwicklung von Apps mit Xcode oder in Objective-C sind. Da Xcode 5 noch eine Beta ist, könnte es sein, dass sie später in diesem Jahr Unterstützung dafür hinzufügen, aber ich denke, das wird nicht passieren.
HAT
6
Entfernen Sie die Storyboard-Datei manuell und entfernen Sie das -fobjc-arcCompiler-Flag in den Projekteinstellungen.
19
Fragen zu Tools, die hauptsächlich von Programmierern verwendet werden, sind sehr thematisch , vorausgesetzt, sie fragen nicht nach dem Besten von etwas oder nach Einkaufsempfehlungen. Ich habe dies entsprechend wieder geöffnet.
Tim Post
1
Dies ist jedoch nicht der richtige Ort dafür. Verstehe das.
MZimmerman6
3
Das einzige, was dies unter NDA macht, ist der Teil "Xcode 5". Alles, was tatsächlich beschrieben wurde, kann mit früheren Versionen von Xcode durchgeführt werden. Technisch gesehen ist dieses Thema also frei zu diskutieren.
AtomRiot

Antworten:

150

Erstellen Sie ein Projekt mit einer leeren Anwendung und fügen Sie einen beliebigen Viewcontroller hinzu (ich habe hier TestViewController hinzugefügt).

   - (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;
 }

SCHRITTE ZUM ENTFERNEN DES BOGENS

1) Setzen Sie in der Build-Einstellung die automatische Referenzzählung auf NO .

////////////////////////////////////////////////////////// /////////////////////////ENDE//////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////

Wenn Sie bereits eine Anwendung mit Storyboard und ARC erstellt haben, dann

SCHRITTE ZUM ENTFERNEN DES STORY BOARD

1) Entfernen Sie die Datei Main.storyboard aus Ihrem Projekt.

2) Fügen Sie mit xib neue Dateien für Ihren Controller hinzu. Wenn diese in Erstellungsphasen nicht in kompilierten Quellen hinzugefügt werden, fügen Sie sie manuell hinzu.

3) Entfernen Sie den Basisnamen der Haupt-Storyboard-Datei von der Liste .

4) Ändern Sie die Datei appdelegate didFinishLaunchingWithOptions und fügen Sie Folgendes hinzu:

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

[self.window makeKeyAndVisible];

so wie :

  - (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;
}


Im obigen Beispiel müssen Sie die Speicherverwaltung manuell wie folgt verwalten:

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

 [test release]; 

SCHRITTE ZUM ENTFERNEN DES BOGENS

1) Setzen Sie in der Build-Einstellung die automatische Referenzzählung auf NO .

PJR
quelle
7
Gibt es nicht mehr die Option "leeres Projekt"? Ich glaube nicht, dass ich anfangen werde, Storyboards zu verwenden.
Sulthan
1
Stellen Sie sicher, dass Sie die Einstellung "Hauptschnittstelle" Ihres Ziels auf Ihren neuen Root <View Controller> ändern.
Paul Brady
Sie haben Recht @Sulthan wir können es durch leeres Projekt tun, aber dies sind die Änderungen, wenn ich bereits Ansicht basierte Anwendung erstellt. (Wir müssen etwas Storyboard-Code manuell aus der appDelegate-Datei entfernen) Während wir in einer leeren Anwendung sind, müssen wir neuen Code hinzufügen :)
PJR
Ich bin auf ein Skript gestoßen
Chris Leyva
Warum wird der UINavigationController * nav nicht automatisch freigegeben? und wir sollten _window in [UIWindow alloc] verwenden?
Hariszaman
44

Anstatt die Storyboard-Datei zu löschen, können Sie ein neues Projekt mit der Vorlage "Leere Anwendung" erstellen. Damit Sie die Erstellung von Storyboard-Dateien vermeiden können.

Führen Sie die folgenden Schritte aus, um das Storyboard wegzulassen: Geben Sie hier die Bildbeschreibung ein

  1. Erstellen Sie ein neues Projekt mit der Vorlage "Leere Anwendung".
  2. Fügen Sie einen neuen Viewcontroller (Beispiel: LoginViewController)
  3. Ändern Sie die didFinishLaunchingWithOptionsIn- AppDelegate.mDatei wie unten angegeben.

Ändern:

#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;
}

ARC entfernen: Gehen Sie zu Build Setting -> Objective-C Automatic Reference Counting -> NO

Raj Subbiah
quelle
1
Beeindruckend! Funktioniert wie ein Zauber und viel einfacher als die akzeptierte Antwort. Ich musste nur sicherstellen, dass alle Referenzen so geändert wurden, dass sie mit LoginViewControllerdem Namen meines eigenen Controllers übereinstimmen.
JohnK
11

neues Projekt erstellen

! [Neues Projekt erstellen]

Entfernen Sie den Basisnamen der Haupt-Storyboard-Datei in Info

// Entfernen Sie den Basisnamen der Haupt-Storyboard-Datei in Info

Fügen Sie diesen Code in appdelegate hinzu

- (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;
}

Entfernen Sie dann automatisch Ihr Storyboard.

Bitte versuchen Sie dies ... erfolgreich ausgeführt. Vielen Dank

Ketan Patel
quelle
5

ShortCut: Ich bevorzuge

Erstellen Sie das Projekt ohne Storyboard und ARC in xcode4 und öffnen Sie das Projekt in xcode5.

SwapnilPopat
quelle
1
Es lohnt sich nicht, nur dafür eine ältere Version von Xcode zu verwenden. Ich möchte lieber ein neues Projekt erstellen, das Storyboard-Zeug loswerden, UIWindow-Instanziierung in appDelegate hinzufügen und es als Vorlagenprojekt für später speichern.
Kervich
3

Xcode 4 hatte das Kontrollkästchen "Storyboards verwenden", als Sie ein neues Projekt erstellt haben. Es ist möglich, die alten Xcode 4-Anwendungsvorlagen (XML-Dateien) abzurufen und in Xcode 5 zu konvertieren. Auf diese Weise erhalten Sie die alten Vorlagen zurück, mit denen Sie auswählen können, ob Sie Storyboards möchten oder nicht.


Ich habe ein Skript geschrieben, das alles für Sie erledigt: https://github.com/jfahrenkrug/Xcode4templates


Nach dem Ausführen des Skripts wird im Bildschirm "Neues Projekt" ein Abschnitt "Xcode 4" angezeigt:

Geben Sie hier die Bildbeschreibung ein

Und dann - Ach! - Sie erhalten Ihre geliebten Entscheidungen zurück:

Geben Sie hier die Bildbeschreibung ein

Sie benötigen eine Kopie des Xcode 4 .app-Bundles von http://developer.apple.com/ios , um dieses Skript verwenden zu können.

Johannes Fahrenkrug
quelle
1
Diese Vorlagen sind jedoch alt und nutzen nicht alle neuen verfügbaren Änderungen, z. B. -registerClass: forCellReuseIdentifier:.
Mahboudz
@ Mahboudz Das ist wahr. Sie müssen dies optimieren, wenn diese Funktionalität für Sie wichtig ist. Natürlich hoffe ich, dass Apple die Option zum Deaktivieren von Storyboards in einer zukünftigen Version von Xcode zurückbringt.
Johannes Fahrenkrug
1
Hoffentlich. Wie Sie verwende ich Storyboard in kleineren Apps, hauptsächlich aufgrund der schnellen TableView-Entwicklung, aber in größeren Apps ist Storyboard ein großes Problem. Vom Scrollen über das Speichern von Segue-IDs (sie müssen eine Möglichkeit hinzufügen, #defines oder const NSString * zwischen Storyboards und Quelldateien zu verwenden) bis hin zur Lösung von Git-Konflikten und mehr: Storyboards sind einfach nicht das A und O. Beende alles.
Mahboudz
diese V / A-Pfeile.
John Riselvato
1
@ JohnRiselvato Sie haben Recht :) Die widerlichen Pfeile sind jetzt weg :)
Johannes Fahrenkrug
0

Ich habe einen Tipp:

  1. Das erste: Ich erstelle mein Projekt mit XCode 4.6 (da diese Version XCode 5 am nächsten kommt).
    • Natürlich können Sie mit XCode 4.6 wählen, ob Sie ARC oder Storyboard verwenden oder nicht.
  2. Das zweite: Danach werde ich mein Projekt mit XCode 5 öffnen. => Ich denke, dass Xcode 5 verstehen wird, dass das Projekt nonARC verwendet und natürlich kein Storyboard hat.

Ich hoffe dein Projekt wird funktionieren! : D.

Linh Nguyen
quelle