Как создать пустое приложение в Xcode без раскадровки

Xcode6 удалил Empty Application шаблон Empty Application при создании нового проекта. Как мы можем создать пустое приложение (без Storyboard) в Xcode6 и выше, как в более ранних версиях?

Ответ 1

В XCode6 и более XCode6 версиях нет опции для непосредственного создания пустого приложения, как в XCode5 и более ранних XCode5. Но все же мы можем создать приложение без Storyboard, выполнив следующие действия:

  1. Создать приложение с Single View Application.
  2. Удалите Main.storyboard и LaunchScreen.xib (выберите их, щелкните правой кнопкой мыши и выберите либо удалить их из проекта, либо удалить их полностью).
  3. Удалите записи "Основное имя файла основной раскадровки" и "Основное имя файла интерфейса экрана запуска" в файле Info.plist.
  4. Откройте AppDelegate.m и отредактируйте applicationDidFinishLaunchingWithOptions, чтобы он выглядел следующим образом:

Swift 3 и выше:

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

Ответ 2

Простым подходом было бы скопировать шаблон XCode 5 Empty Application в каталог XCode templates.

Вы можете скачать шаблон XCode 5 Empty Application из здесь, затем разархивируйте его и скопируйте в /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application.

P.S этот подход работает и с быстрым!

Edit
Как было предложено @harrisg в комментарии ниже, вы можете разместить вышеупомянутый шаблон в папке ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/, чтобы он мог быть доступен, даже если Xcode обновляется.
И если такого каталога нет, вам может понадобиться создать эту структуру каталогов: Templates/Project Templates/iOS/Application/ в ~/Library/Developer/Xcode/

Используя этот простой подход, я могу создать Empty Application в XCode 6. (Снимок экрана прилагается ниже)

Xcode Empty Application Template Надеюсь, это поможет!

Ответ 3

Есть еще несколько шагов, которые вам нужно сделать:

  • Чтобы добавить файл префикса. (Если вам это нужно)
  • Чтобы добавить образ запуска по умолчанию, в противном случае размер приложения будет 320x480 на iPhone 5.

Итак, вот полный учебник:

  • удалить файл Main.storyboard
  • удалить файл LaunchScreen.xib
  • удалить свойство "Основная база данных основного файла" в Info.plist
  • удалить свойство "Запустить имя файла интерфейса экрана" в Info.plist
  • добавить файл [app name] -Prefix.pch для поддержки файлов с содержимым:

    #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
    
  • добавить "$ SRCROOT/$PROJECT_NAME/[имя файла pch]" для настройки проекта → Настройки сборки → Apple LLVM 6.0 - Язык → "Заголовок префикса"

  • добавить "ДА" для настройки проекта → Настройки сборки → Apple LLVM 6.0 - Язык → "Прекомпиляция заголовка префикса"
  • откройте "Image.xcassets" и добавьте LaunchImage
  • создайте проект, затем появится предупреждение о отсутствующем образце запуска по умолчанию, просто нажмите на предупреждение и выберите, чтобы добавить значение по умолчанию, это добавит "Default-568h @2x" ИЛИ - Если вы хотите использовать брызгообразные изображения из "Images.xcassets", перейдите к настройкам проекта → TARGETS → General → в "Launch Images Source" выберите использование каталога активов, он создаст новый, вы можете выберите тогда, который будет использоваться в качестве каталога активов из существующих.
  • реализовать метод application:didFinishLaunchingWithOptions::

    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;
    

Ответ 4

Ответ Ахильса полностью верен. Для тех из нас, кто использует Swift, это будет так:
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
}

Ответ 5

Есть еще один шаг, который вам нужно сделать:

1) удалить основное имя файла основной раскадровки в файле 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;
}

Ответ 6

У меня есть оригинальный шаблон Empty Application, который использовался в версиях Xcode до Xcode 6. Я загрузил его здесь.

Вы можете загрузить его и вставить в каталог шаблона Xcode вручную или установить его с помощью диспетчера пакетов для Xcode, Alcatraz. Просто найдите Xcode Empty Application.

Ответ 7

Удалить файл Main.storyboard

Это можно просто удалить.

Обновить файл ProjectName-Info.plist

Удалите клавишу Main storyboard base file name.

Создайте файл nib и ссылку на контроллер представления проектов

1.Создайте файл nib (Файл → Новый → Файл → Просмотр)

2.Учитайте класс File Owner's для любого вида проектов  контроллер называется

3. Поместите вывод File Owner's view в объект view в файле nib

Обновить делегат приложения

1.Введите файл заголовков контроллеров проектов

2.Удалить метод приложения :didFinishLaunchingWithOptions::

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

Ответ 8

Для Xcode 8 и Swift 3. Просто удалите файл .storyboard, он автоматически удалит соответствующую ссылку из вашего .plist и в вашем AppDelegate.swift добавит следующий код.

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

Вы можете написать свой собственный ViewCountroller и использовать его в AppDelegate.swift как ваш self.window?.rootViewController, просто замените UIViewController своим собственным ViewController в приведенном выше коде.

Ответ 9

Xcode 9.3.1 и Swift 4

  1. Прежде всего вам необходимо удалить Main.storyboard в меню навигатора проекта.
  2. Чем удалить строку Основное имя файла раскадровки в Info.plist.
  3. И не забудьте удалить основной интерфейс ячейки (просто удалите основной) в вашей цели проекта - Общие - Информация о развертывании
  4. После этого перейдите в AppDelegate.swift и в функции didFinishLaunchingWithOptions напишите следующее:

    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
    }
    

Ответ 10

Я использую XCode6 Beta, и я искал другое решение этой проблемы, добавив пустой шаблон из XCode5.x.x в XCode6 Beta.

Для этого щелкните правой кнопкой мыши по XCode5.x.x в приложениях, нажмите "Показать содержимое пакета" и скопируйте "Empty Application.xctemplate" из заданного пути

Содержание/Разработчик/Платформы/iPhoneOS.platform/Разработчик/Library/Xcode/Шаблоны/Шаблоны проектов/Приложение

Теперь закройте окно и откройте данный путь для XCode6

Содержание/Разработчик/Платформы/iPhoneOS.platform/Разработчик/Library/Xcode/Шаблоны/Шаблоны проектов/iOS/Приложение/

Вставить 'Empty Application.xctemplate' внутри папки приложения. Теперь перезапустите XCode6, оставив и создав новый проект. Вы получите опцию "Пустое приложение".

Теперь, когда я создаю новый пустой проект, файл .pch автоматически добавляется в проект (который мы должны добавить вручную в XCode6)

Надеюсь, что это сработает

Ответ 11

Обновление: Swift 5 и iOS 13:

  1. Создайте приложение с одним представлением.
  2. Удалить Main.storyboard (щелкните правой кнопкой мыши и удалите).
  3. Удалите "Название раскадровки" из конфигурации сцены по умолчанию в файле Info.plist: enter image description here
  4. Откройте SceneDelegate.swift и измените 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 }
}

в

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

Ответ 12

Да, или просто используйте одну из предыдущих бета-версий, чтобы создать ее, и продолжайте в последней версии после.

Ответ 13

Вы можете создать свой собственный шаблон проекта для Xcode. Для вашего запроса вы можете использовать шаблон на этом сайте:

https://github.com/elprup/xcode7-project-template

Ответ 14

Другие уже объяснили, как избавиться от раскадровки, поэтому я пропущу здесь. Вот как я предпочитаю делать это в своем коде с менее необязательной цепочкой (написанной в 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
}