Xcode'da Storyboard Olmadan Boş Uygulama Nasıl Oluşturulur


147

Xcode6Empty Applicationyeni bir proje oluştururken şablonu kaldırdı . Xcode6Önceki sürümlerde olduğu gibi, içinde ve üstünde nasıl boş bir uygulama (Storyboard olmadan) oluşturabiliriz ?


3
codefromabove.com/2014/09/… , bunun için çok iyi bir öğretici
Anurag Bhakuni


İOS9 ve Xcode 7 ile güncel eğitim: medium.com/frozen-fire-studios/…
Ryan Poolos

Yanıtlar:


270

XCode6Sürümlerde XCode5ve daha önceki sürümlerde olduğu gibi doğrudan Boş Uygulama oluşturma seçeneği yoktur . Ama yine de Storyboardşu adımları takip etmeden bir uygulama oluşturabiliriz :

  1. Bir Single View Application.
  2. Kaldır Main.storyboardve LaunchScreen.xib(onları seçin, sağ tıklayın ve projeden kaldırmayı veya tamamen silmeyi seçin).
  3. Dosyadaki "Ana film şeridi dosya temel adı" ve "Başlatma ekranı arabirimi dosya tabanı adı" girişlerini kaldırın Info.plist.
  4. AppDelegate.m'yi açın ve applicationDidFinishLaunchingWithOptions'ı aşağıdaki gibi görünecek şekilde düzenleyin:

Swift 3 ve üzeri:

    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
    }

Amaç-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;
    }

22
Tutmayı LaunchScreen.xibve ilgili Info.plistgirişi seviyorum . Bu olmadan, uygulama çirkin olan daha büyük iPhone'larda tüm ekran boyutunu kaplamaz.
tboyce12

2
Storyboard'u kendim saklamayı seviyorum. Çeşitli şeyler oluşturmak için uygun, ancak ilk kurulumu film şeridine güvenmeden yapmam gerekiyor.
Mazyod

Belki Xcode 7'de bir hata Main.storyboard'u proje bilgi ayarları ekranından hiç kaldıramadım. @ Silentwarrior tarafından belirtildiği gibi Xcode 5 boş uygulama şablonu kullandım.
GoodSp33d

3
Bir kök ViewController'ı manuel olarak kurmadığınız sürece, bu yanıt XCode7'de bir çalışma zamanı hatası oluşturur: 'NSInternalInconsistencyException', neden: 'Uygulama pencerelerinin uygulama başlatmasının sonunda bir kök görünüm denetleyicisine sahip olması bekleniyor'

11
Lütfen bu Kodu da ekleyin: self.window.rootViewController = [[ViewController ayırma] init]; didFinishLaunchingWithOptions yöntemi altında AppDelegate.m'nizde. Aksi takdirde şu hatayı alırsınız: 'Uygulama pencerelerinin, uygulamanın başlatılmasının sonunda bir kök görünüm denetleyicisine sahip olması bekleniyor'
Rizwan Ahmed

32

Basit bir yaklaşım kopyalamak olacaktır XCode 5'ın Empty Applicationşablon için XCode' s şablonları dizin.

Sen indirebilirsiniz XCode 5'ın Empty Applicationşablonu burada bunun unzip sonra ve kopyalamak /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Applicationdizindeki.

Not: Bu yaklaşım da hızlı çalışıyor!

Düzenle
@harrisg tarafından aşağıdaki yorumda önerildiği gibi, yukarıda belirtilen şablonu ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/klasöre yerleştirebilirsiniz, böylece Xcode güncellense bile kullanılabilir olabilir.
Böyle dizin mevcut olup olmadığını, o zaman bu dizin yapısını oluşturmak gerekebilir: Templates/Project Templates/iOS/Application/in~/Library/Developer/Xcode/

Bu basit yaklaşımı kullanarak bir Empty Applicationgiriş oluşturabiliyorum XCode 6. (Ekran görüntüsü aşağıdadır)

Xcode Boş Uygulama Şablonu Bu yardımcı olur umarım!


Teşekkürler. Not olarak, Xcode güncellemelerinden sonra bu şablonu değiştirmeniz gerekecektir.
elliotrock

1
~ / Library / Developer / Xcode / Templates / Project Templates / iOS / Application / içine
koyarsanız,

@harrisg bu dizini Yosemite'de bulamadı. Varlığını teyit edebilir misin? Teşekkürler
S1LENT WARRIOR

1
Bu yaklaşım Xcode 7.1 ile çalışır, ancak bazılarının istemeyebileceği LaunchScreen.storyboard oluşturulur. El ile oluşturulan görünümlerime müdahale etmediği için onu kullandım.
bitsand

1
Dosyayı dizine açmayı unutmayın, kopyalama yeterli değildir.
Balaban Mario

17

Yapmanız gereken birkaç adım daha var:

  1. Bir önek dosyası eklemek için. (Eğer ihtiyacın olursa)
  2. Varsayılan bir başlatma görüntüsü eklemek için, aksi takdirde uygulama boyutu iPhone 5'te 320x480 olacaktır.

İşte tam bir eğitim:

  1. Main.storyboard dosyasını kaldır
  2. LaunchScreen.xib dosyasını kaldırın
  3. Info.plist'teki "Ana film şeridi dosyası temel adı" özelliğini kaldırın
  4. Info.plist içindeki "Başlatma ekranı arabirim dosyası temel adı" özelliğini kaldırın
  5. içeriği olan dosyaları desteklemek için "[uygulama adı] -Prefix.pch" dosyasını ekleyin:

    #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
    
  6. proje ayarlarına -> Yapı Ayarları -> Apple LLVM 6.0 - Dil -> "Önek Başlığı" na "$ SRCROOT / $ PROJECT_NAME / [pch dosya adı]" ekleyin

  7. proje ayarlarına "EVET" ekleyin -> Yapı Ayarları -> Apple LLVM 6.0 - Dil -> "Ön Derleme Önek Başlığı"
  8. "Image.xcassets" i açın ve LaunchImage ekleyin
  9. projeyi oluşturun, ardından varsayılan başlatma görüntüsünün eksik olduğuna dair bir uyarı olacaktır, sadece uyarıya basın ve varsayılanı eklemeyi seçin, bu "Varsayılan-568h @ 2x" ekleyecektir VEYA - "Görseller'den açılış görüntülerini kullanmak istiyorsanız .xcassets ", proje ayarlarına gidin -> HEDEFLER -> Genel ->" Görüntü Kaynağını Başlat "öğesinden varlık kataloğunu kullanmayı seçin, yeni bir tane oluşturacak, ardından mevcut olanlardan varlık kataloğu olarak hangisini kullanacağınızı seçebilirsiniz. .
  10. uygulama application:didFinishLaunchingWithOptions:yöntemi:

    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;
    

16

Akhils'in cevabı tamamen doğrudur. Swift kullananlar için bu şöyle olurdu:

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
}

14

Xcode 9.3.1 ve Swift 4

  1. Her şeyden önce silmek gerek Main.storyboard içinde Proje gezgini menüsü.
  2. Sonra silme satır Ana film şeridi dosya taban adı içinde Info.plist .
  3. Ve hücre Ana Arayüzünü silmeyi unutmayın (sadece Ana sizin de) Projesi Hedef - Genel - Dağıtım Bilgisi .
  4. Bu adımlardan sonra şuraya gidin: AppDelegate.swift'eve didFinishLaunchingWithOptions işlevindesonrakini yazın:

    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 ve Swift 5

  1. Her şeyden önce silmek gerek Main.storyboard içinde Proje gezgini menüsü.
  2. Sonra silme satır Ana film şeridi dosya taban adı içinde Info.plist .
  3. Ve hücreyi silmeyi unutma Esas Arabirimi (sadece kaldırmak Main sizin de) Genel - - Dağıtım Bilgisi Proje Hedefi .
  4. Bu adım önemlidir ve Xcode ve Swift'in önceki sürümlerinde yoktu. In Info.plist gidin: Uygulama Sahne ManifestSahne Yapılandırma Uygulama Oturum RolüMadde 0 ve burada silin Storyboard.name satır.
  5. Bu adımlardan sonra SceneDelegate'e gidin ve işlev sahnesinde sonrakini yazın:

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

10

Yapmanız gereken bir adım daha var:

1) plist dosyasındaki Ana film şeridi dosya temel adını kaldırın

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

2
bir sınır sorunu var, UIScreen.mainScreen (). sınırlar yazdırılıyor: (0.0,0.0,320.0,480.0). Neden?
Esqarrouth

10

Güncelleme: Swift 5 ve iOS 13:

  1. Tek Görünümlü Uygulama Oluşturun.
  2. Main.storyboard'u silin (sağ tıklayın ve silin).
  3. Info.plist dosyasındaki varsayılan sahne yapılandırmasından "Film Şeridi Adı" nı silin: görüntü açıklamasını buraya girin
  4. Açın SceneDelegate.swiftve değiştirin func scene:
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 }
}

-e

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

2
Ayrıca Info.plist'ten "Ana film şeridi dosyası temel adını" silmeniz gerekir, aksi takdirde "'Ana' adlı bir film şeridi bulunamadı" hatasını alırsınız
Ziad Hilal

6

Xcode 6'dan önceki Xcode sürümlerinde kullanılan orijinal Boş Uygulama şablonuna sahibim . Bunu buraya yükledim .

Ya indirip Xcode şablon dizinine manuel olarak yapıştırabilir ya da Xcode, Alcatraz için paket yöneticisini kullanarak kurabilirsiniz . Sadece Xcode Empty Application'ı arayın .


5

Main.storyboard dosyasını kaldırın

Bu basitçe silinebilir.

ProjectName-Info.plist dosyasını güncelleyin

Main storyboard base file nameAnahtarı çıkarın .

Bir uç dosyası oluşturun ve projenin görünüm denetleyicisine bağlantı oluşturun

1. Bir uç dosyası oluşturun (Dosya -> Yeni -> Dosya -> Görüntüle)

2. güncelleyin File's Owner's Sınıfı, projenin görünüm denetleyicisinin adı ne olursa olsun güncelleyin

3. Çıkışı uç dosyasındaki nesneye File's Owner's viewbağlayınview

Uygulama temsilcisini güncelleyin

1. Projenin görünüm denetleyicisinin başlık dosyasını içe aktarın

2. Uygulama :didFinishLaunchingWithOptions:yöntemini güncelleyin:

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

5

İçin Xcode 8ve Swift 3. Sadece silmek .storyboarddosyayı, bu otomatik olarak şunlara karşılık gelen referans silecektir .plistve içinde AppDelegate.swiftaşağıdaki kodu ekleyin.

    let initialViewController = UIViewController()
    initialViewController.view.backgroundColor = .white
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = initialViewController
    window?.makeKeyAndVisible()

Sen de ki kendi özel ViewCountroller ve kullanımını yazabilir AppDelegate.swiftsizin bizim gibi self.window?.rootViewControllersadece yukarıdaki kodda kendi ViewController ile UIViewController değiştirin.


1
Xcode 9.1 ve Swift 4'ü kullanarak, ilgili referansı .plist'ten manuel olarak kaldırmadan film şeridi dosyasını silersem, "Pakette 'Ana' adlı bir film şeridi bulunamadı" hatası alıyorum. Görünüşe göre referansı manuel olarak kaldırmam gerekiyor.
barış tipi

3

XCode6 Beta kullanıyorum ve XCode5.xx'ten XCode6 Beta'ya Boş şablon ekleyerek bu sorunun başka bir çözümünü aradım.

Bunun için Uygulamalar'da XCode5.xx'e sağ tıklayın 'Paket İçeriğini Göster'e tıklayın ve verilen yoldan' Boş Application.xctemplate 'kopyalayın

İçindekiler / Geliştirici / Platformlar / iPhoneOS.platform / Geliştirici / Kitaplık / Xcode / Şablonlar / Proje Şablonları / Uygulama

Şimdi Pencereden çıkın ve XCode6 için verilen yolu açın

İçindekiler / Geliştirici / Platformlar / iPhoneOS.platform / Geliştirici / Kitaplık / Xcode / Şablonlar / Proje Şablonları / iOS / Uygulama /

Uygulama klasörünün içine 'Boş Application.xctemplate' yapıştırın. Şimdi çıkıp yeni proje oluşturarak XCode6'yı yeniden başlatın. 'Boş Uygulama' seçeneği alacaksınız.

Şimdi yeni Boş proje oluştururken, projeye otomatik olarak eklenen bir .pch dosyası (XCode6'da manuel olarak eklememiz gerekiyor)

Umarım işe yarar


1

Evet, Veya onu oluşturmak için önceki Beta'lardan birini kullanın ve daha sonra en son sürümde devam edin.



1

Diğerleri film şeridinden nasıl kurtulacağını zaten açıkladı, bu yüzden burada onu atlayacağım. Bunu kodumda daha az isteğe bağlı zincirleme ile yapmayı tercih ederim (Swift 3.1'de yazılmıştır):

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
}

1

Xcode 11 ve ios üzerinde güncelleme 13. Her şeyi ayarladıktan sonra hala siyah bir ekran görüyorsanız, bunun nedeni yaşam döngüsünün UISceneDelegate tarafından yönetilmesidir ve yeni bir proje oluşturduğunuzda, UISceneDelegate.m ve UISceneDelegate.h'yi otomatik olarak oluşturacaktır. UISceneDelegate'e alışmadan önceki eski günlere dönmek için. aşağıdaki adımlar yardımcı olabilir:

  1. plist'teki Uygulama Sahnesi Manifestini silin.

  2. Application Scene Manifest.h ve Application Scene Manifest.m dosyasını sil

  3. #pragma işareti altındaki kodu sil - APPdelegate.m'de UISceneSession yaşam döngüsü

  4. @ özelliği (güçlü, atomik olmayan) UIWindow * pencere ekleyin; APPdelegate.h içinde

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.