Як створити порожній додаток у Xcode без розгортки


146

Xcode6видалив Empty Applicationшаблон під час створення нового проекту. Як ми можемо створити порожній додаток (без аркуша розкадровки) в Xcode6і вище, як у попередніх версіях?


3
codefromabove.com/2014/09/… , дуже хороший підручник для цього
Анураг Бхакуні


Оновлений підручник з iOS9 та Xcode 7: medium.com/frozen-fire-studios/…
Ryan Poolos

Відповіді:


270

Немає варіантів у XCode6та вище версії для прямого створення порожнього додатка як у XCode5попередній, так і в попередній версії . Але все-таки ми можемо створити додаток без Storyboardнаступних кроків:

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

Швидкість 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
    }

Швидкий 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
    }

Завдання-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
Мені подобається зберігати LaunchScreen.xibі відповідний Info.plistзапис. Без цього додаток не буде приймати весь розмір екрана на більших iPhone, що некрасиво.
tboyce12

2
Мені подобається тримати «Розгорнуту дошку». Це зручно для створення різних матеріалів, але мені потрібно зробити початкову настройку, не покладаючись на дошки.
Mazyod

Можливо, помилка в Xcode 7 мені не вдалося видалити Main.storyboard із екрана налаштувань інформації про проект. Я використовував порожній шаблон програми Xcode 5, як згадував @Silentwarrior.
GoodSp33d

3
Якщо ви вручну не встановите кореневий ViewController, ця відповідь створює помилку виконання в XCode7: "NSInternalInconsistencyException", причина: "Очікується, що у вікнах програми буде встановлений контролер перегляду коренів у кінці запуску програми"

11
Будь ласка, додайте цей Код також: self.window.rootViewController = [[ViewController alloc] init]; у вашому AppDelegate.m за методом didFinishLaunchingWithOptions. Або ви отримаєте таку помилку: "Очікується, що вікна програми матимуть контролер перегляду коренів у кінці запуску програми"
Rizwan Ahmed

32

Простий підхід був би скопіювати XCode 5«и Empty Applicationшаблон для XCode" и шаблонів каталогу.

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

PS Цей підхід також працює швидко!

Змінити
Як запропонував @harrisg в коментарі нижче, ви можете помістити вищезгаданий шаблон у ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/папку, щоб він був доступний, навіть якщо Xcode оновлюється.
І якщо такої директорії немає, можливо, вам доведеться створити цю структуру каталогів: Templates/Project Templates/iOS/Application/в~/Library/Developer/Xcode/

Використовуючи цей простий підхід я в змозі створити Empty Applicationін XCode 6. (Знімок екрана додається нижче)

Xcode Порожній шаблон програми Сподіваюся, це допомагає!


Дякую. В якості замітки вам потрібно буде замінити цей шаблон після оновлення Xcode.
elliotrock

1
Якщо ви помістите його в ~ / Бібліотека / розробник / Xcode / шаблони / шаблони проектів / iOS / додаток /, його не потрібно буде замінювати щоразу, коли оновлення Xcode
harrisg

@harrisg не зміг знайти цей каталог у Йосеміті. Чи можете ви підтвердити його наявність? Дякую
S1LENT WARRIOR

1
Цей підхід працює з Xcode 7.1, проте LaunchScreen.storyboard створений, що деякі можуть не хотіти. Я все-таки використовував його, оскільки це не заважає моїм створеним вручну видами.
bitsand

1
Не забудьте розпакувати файл у каталог, копіювання недостатньо.
Балабан Маріо

17

Вам потрібно виконати ще кілька кроків:

  1. Щоб додати файл префікса. (Якщо вам це потрібно)
  2. Щоб додати зображення запуску за замовчуванням, інакше розмір програми складе 320x480 на iPhone 5.

Отже, ось повний підручник:

  1. видаліть файл Main.storyboard
  2. видаліть файл LaunchScreen.xib
  3. видаліть у Info.plist властивість "Основне ім'я файлу основного аркуша"
  4. видаліть властивість "Запустити базове ім'я файлу інтерфейсу" в Info.plist
  5. додайте файл "[назва програми] -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
  6. додати "$ SRCROOT / $ PROJECT_NAME / [pch назва файлу]" до налаштувань проекту -> Налаштування збірки -> Apple LLVM 6.0 - Мова -> "Заголовок префікса"

  7. додайте "ТАК" до налаштувань проекту -> Налаштування збірки -> Apple LLVM 6.0 - Мова -> "Заголовок префіксації префіксу"
  8. відкрийте "Image.xcassets" та додайте LaunchImage
  9. побудуйте проект, тоді з’явиться попередження про відсутнє зображення запуску за замовчуванням, просто натисніть на попередження та виберіть, щоб додати типовий параметр, це додасть «За замовчуванням-568h @ 2x» АБО - Якщо ви хочете використовувати зображення сплеску із "Зображення .xcassets ", перейдіть до налаштувань проекту -> ЦІТИ -> Загальне -> у" Запустіть джерело зображень "виберіть використовувати каталог активів, він створить новий, ви можете вибрати новий, який використовувати як каталог активів із наявного .
  10. 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;

16

Відповідь Ахілса абсолютно правильна. Для тих, хто використовує 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
}

12

Xcode 9.3.1 і Swift 4

  1. Перш за все вам потрібно видалити Main.storyboard в меню навігатора Project .
  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
    }

Xcode 11.2.1 і Swift 5

  1. Перш за все вам потрібно видалити Main.storyboard в меню навігатора Project .
  2. Потім видаліть рядок Основне ім'я файлу основної розкадрівки в Info.plist .
  3. І не забудьте видалити головний інтерфейс комірки (просто видаліть головний ) у проектній цілі - Загальній - Інформація про розгортання .
  4. Цей крок важливий, і його не було у попередніх версіях Xcode та Swift. У розділі Info.plist перейдіть до: Маніфест сцени програмиКонфігурація сцениРоль сеансу програмиПункт 0 та видаліть тут рядок Storyboard.name .
  5. Після цього перейдіть до SceneDelegate і на сцені функції напишіть наступне:

    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

Ще один крок, який потрібно зробити:

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

2
є проблема з межею, UIScreen.mainScreen (). Розмітки роздруковуються: (0,0,0,0,320,0,480.0). чому так?
Esqarrouth

9

Оновлення: Swift 5 та iOS 13:

  1. Створіть програму Single View.
  2. Видалити Main.storyboard (клацніть правою кнопкою миші та видаліть).
  3. Видаліть "Ім'я розгортки" з конфігурації сцени за замовчуванням у файлі Info.plist: введіть тут опис зображення
  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()
    }
}

2
Ви також повинні видалити "Основне ім'я файлу основної розкадрівки" з Info.plist, інакше ви отримаєте помилку "Не вдалося знайти розгорнуту таблицю з назвою" Головна "
Ziad Hilal

6

У мене є оригінальний шаблон «Порожня програма», який використовувався у версіях Xcode до Xcode 6. Я завантажив його сюди .

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


5

Видаліть файл Main.storyboard

Це можна просто видалити.

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

Вийміть Main storyboard base file nameключ.

Створіть файл nib та зв’яжіть його з контролером перегляду проекту

1.Створіть файл nib (Файл -> Створити -> Файл -> Переглянути)

2.Оновіть File's Owner'sклас до будь-якого виклику контролера подання проектів

3.Зв’яжіть File's 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;
}

5

Для 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 у наведеному вище коді.


1
Використовуючи Xcode 9.1 та Swift 4, якщо я просто видаляю файл раскадровки, не вручну видаляючи відповідну посилання зі списку .plist, я отримую помилку "Не вдалося знайти в комплекті розгортку з назвою" Main ". Здається, що я повинен видалити посилання вручну.
миротип

3

Я використовую XCode6 Beta і шукав інше рішення цієї проблеми, додавши порожній шаблон з XCode5.xx в бета-версію XCode6.

Для цього клацніть правою кнопкою миші на XCode5.xx у програмах, натисніть «Показати вміст пакета» та скопіюйте «Порожній додаток.xctemplate» із заданого шляху

Зміст / Розробник / Платформи / iPhoneOS.platform / Розробник / Бібліотека / Xcode / Шаблони / Шаблони проектів / Застосування

Тепер закрийте вікно та відкрийте заданий шлях для XCode6

Зміст / Розробник / Платформи / iPhoneOS.platform / Розробник / Бібліотека / Xcode / Шаблони / Шаблони проектів / iOS / Приклад /

Вставте "Порожній Application.xctemplate" всередину папки програми. Тепер перезапустіть XCode6, закривши і створити новий проект. Ви отримаєте опцію "Порожня програма".

Тепер, коли я створюю новий проект Empty, у проект автоматично додається .pch-файл (який ми маємо додати вручну в XCode6)

Сподіваюся, це спрацює


1

Так, або просто скористайтеся однією з попередніх версій бета-версії, щоб створити її, і продовжте останню версію після.



1

Інші вже пояснили, як позбутися розгортки, тому я пропускаю тут цю. Ось як я вважаю за краще це робити в своєму коді з менш необов'язковим ланцюжком (написано в 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
}

1

оновлення для Xcode 11 та ios 13. Після того, як у вас все встановлено, але ви все ще побачите чорний екран, це тому, що життєвий цикл обробляється UISceneDelegate, і коли ви створюєте новий проект, він автоматично генерує UISceneDelegate.m та UISceneDelegate.h. Щоб повернутися до старих часів, перш ніж ми звикнемо до UISceneDelegate. Наступні кроки можуть допомогти:

  1. видалити Маніфест сцени програми в плісті.

  2. видалити Manifest.h Scene Manifest.h та Manifest

  3. видалити код під позначкою #pragma - життєвий цикл UISceneSession в APPdelegate.m

  4. Додати @property (сильне, неатомічне) вікно UIW * *; в APPdelegate.h

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.