Xcode6
удалил Empty Application
шаблон при создании нового проекта. Как мы можем создать пустое приложение (без раскадровки) в Xcode6
и выше, как в более ранних версиях?
Xcode6
удалил Empty Application
шаблон при создании нового проекта. Как мы можем создать пустое приложение (без раскадровки) в Xcode6
и выше, как в более ранних версиях?
Ответы:
В XCode6
версиях и выше нет возможности напрямую создать пустое приложение, как в XCode5
предыдущих версиях . Но все же мы можем создать приложение, не Storyboard
выполняя следующие действия:
Single View Application
.Main.storyboard
и LaunchScreen.xib
(выберите их, щелкните правой кнопкой мыши и выберите либо удалить их из проекта, либо удалить их полностью).Info.plist
файле записи «Основное имя файла основной раскадровки» и «Основное имя файла интерфейса экрана запуска» .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;
}
LaunchScreen.xib
и соответствующую Info.plist
запись. Без этого приложение не будет занимать весь размер экрана на больших iPhone, что некрасиво.
Простой подход был бы скопировать 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 этот подход работает и со swift!
Редактировать
Как предложено @harrisg в комментарии ниже, Вы можете поместить вышеупомянутый шаблон в ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/
папку, чтобы он мог быть доступен, даже если Xcode будет обновлен.
А если нет такого каталога нет, то вы , возможно , придется создать эту структуру каталогов: Templates/Project Templates/iOS/Application/
в~/Library/Developer/Xcode/
Используя этот простой подход я в состоянии создать Empty Application
ин XCode 6
. (Скриншот прилагается ниже)
Надеюсь это поможет!
Есть еще несколько шагов, которые вам нужно сделать:
Итак, вот полный урок:
добавьте файл «[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 - Язык -> «Заголовок префикса»
реализовать 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;
Ответ Ахилса совершенно правильный. Для тех из нас, кто использует 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
}
Xcode 9.3.1 и Swift 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
После этого шага перейти к 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()
}
Есть еще один шаг, который вам нужно сделать:
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;
}
Обновление: Swift 5 и iOS 13:
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()
}
}
У меня есть оригинальный шаблон пустого приложения, который использовался в версиях Xcode до Xcode 6. Я загрузил его здесь .
Вы можете либо загрузить его и вставить его в каталог шаблонов Xcode вручную, либо установить его, используя менеджер пакетов для Xcode, Alcatraz . Просто найдите Xcode Пустое приложение .
Удалить файл Main.storyboard
Это можно просто удалить.
Обновите файл ProjectName-Info.plist
Выньте Main storyboard base file name
ключ.
Создайте nib-файл и ссылку на контроллер вида проекта
1.Создайте файл пера (Файл -> Создать -> Файл -> Просмотр)
2. Обновите File's Owner's
класс до того, что называется контроллером представления проекта.
3.Связать File's Owner's
view
розетку с view
объектом в файле пера
Обновите делегат приложения
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;
}
Для 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 в приведенном выше коде.
Я использую XCode6 Beta, и я искал другое решение этой проблемы, добавив пустой шаблон из XCode5.xx в XCode6 Beta.
Для этого щелкните правой кнопкой мыши XCode5.xx в Приложениях, нажмите «Показать содержимое пакета» и скопируйте «Пустой Application.xctemplate» из указанного пути.
Содержание / Разработчик / Платформы / iPhoneOS.platform / Разработчик / Библиотека / Xcode / Шаблоны / Шаблоны проектов / Приложение
Теперь выйдите из окна и откройте заданный путь для XCode6
Содержание / Разработчик / Платформы / iPhoneOS.platform / Разработчик / Библиотека / Xcode / Шаблоны / Шаблоны проектов / iOS / Приложение /
Вставьте 'Empty Application.xctemplate' в папку приложения. Теперь перезапустите XCode6, выйдя и создайте новый проект. Вы получите опцию «Пустое приложение».
Теперь, когда я создаю новый пустой проект, в проект автоматически добавляется файл .pch (который мы должны добавить вручную в XCode6).
Надеюсь, это сработает
Вы можете создать свой собственный шаблон проекта для XCode. По вашему запросу вы можете использовать шаблон на этом сайте:
Другие уже объяснили, как избавиться от раскадровки, поэтому я пропущу эту тему здесь. Вот как я предпочитаю делать это в своем коде с меньшим количеством необязательных цепочек (написано в 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
}
обновление для Xcode 11 и ios 13. После того, как вы все настроили, но все еще видите черный экран, это потому, что жизненный цикл обрабатывается UISceneDelegate, а когда вы создаете новый проект, он автоматически генерирует UISceneDelegate.m и UISceneDelegate.h. Чтобы вернуться к прежним временам, прежде чем мы привыкнем к UISceneDelegate. следующие шаги могут помочь:
удалите манифест сцены приложения в листе.
удалить сценарий приложения Manifest.h и сценарий приложения Manifest.m
удалить код под знаком #pragma - жизненный цикл UISceneSession в APPdelegate.m
добавить @property (сильный, неатомный) UIWindow * window; в APPdelegate.h