Xcode6
usunął Empty Application
szablon podczas tworzenia nowego projektu. Jak możemy stworzyć pustą aplikację (bez Storyboard) w Xcode6
i powyżej, tak jak we wcześniejszych wersjach?
Xcode6
usunął Empty Application
szablon podczas tworzenia nowego projektu. Jak możemy stworzyć pustą aplikację (bez Storyboard) w Xcode6
i powyżej, tak jak we wcześniejszych wersjach?
Odpowiedzi:
W XCode6
wersjach i nowszych nie ma opcji bezpośredniego tworzenia pustej aplikacji, jak w XCode5
i wcześniejszych. Ale nadal możemy stworzyć aplikację bez, Storyboard
wykonując następujące kroki:
Single View Application
.Main.storyboard
i LaunchScreen.xib
(zaznacz je, kliknij prawym przyciskiem myszy i wybierz, czy chcesz je usunąć z projektu, czy całkowicie).Info.plist
pliku.Swift 3 i nowsze:
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
}
Cel 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
i odpowiedni Info.plist
wpis. Bez tego aplikacja nie zajmie całego rozmiaru ekranu na większych iPhone'ach, co jest brzydkie.
Podejście proste byłoby skopiować XCode 5
„s Empty Application
szablon do XCode
” s szablony katalog.
Można pobrać XCode 5
„s Empty Application
szablon z tutaj , a następnie rozpakuj go i skopiować do /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application
katalogu.
PS to podejście działa również szybko!
Edytuj
Zgodnie z sugestią @harrisg w komentarzu poniżej, możesz umieścić wyżej wymieniony szablon w ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/
folderze, aby był dostępny nawet po zaktualizowaniu Xcode.
A jeśli nie ma takiego katalogu, może być konieczne utworzenie takiej struktury katalogów: Templates/Project Templates/iOS/Application/
w~/Library/Developer/Xcode/
Korzystając z tego prostego podejścia, jestem w stanie stworzyć Empty Application
w XCode 6
. (Zrzut ekranu załączony poniżej)
Mam nadzieję że to pomoże!
Musisz wykonać jeszcze kilka czynności:
Oto pełny samouczek:
dodaj plik „[nazwa aplikacji] -Prefix.pch” do plików pomocniczych z zawartością:
#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
dodaj „$ SRCROOT / $ PROJECT_NAME / [nazwa pliku pch]” do ustawień projektu -> Ustawienia kompilacji -> Apple LLVM 6.0 - Język -> „Nagłówek prefiksu”
application:didFinishLaunchingWithOptions:
metoda realizacji :
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;
Odpowiedź Achils jest całkowicie poprawna. Dla tych z nas, którzy używają Swift, wyglądałoby to tak:
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 i Swift 4
Następnie przejdź do AppDelegate.swift iw funkcji didFinishLaunchingWithOptions napisz następną:
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 i Swift 5
Następnie przejdź do SceneDelegate iw funkcji scena napisz następną:
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()
}
Jest jeszcze jeden krok, który musisz zrobić:
1) Usuń nazwę bazową pliku głównego storyboardu w pliku 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;
}
Aktualizacja: Swift 5 i iOS 13:
SceneDelegate.swift
i zmień func scene
z: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 }
}
do
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()
}
}
Usuń plik Main.storyboard
Można to po prostu usunąć.
Zaktualizuj plik ProjectName-Info.plist
Wyjmij Main storyboard base file name
klucz.
Utwórz plik nib i połącz się z kontrolerem widoku projektu
1. Utwórz plik NIB (Plik -> Nowy -> Plik -> Widok)
2. Zaktualizuj File's Owner's
klasę do dowolnego wywoływanego kontrolera widoku projektu
3. Połącz File's Owner's
view
wylot z view
obiektem w pliku nib
Zaktualizuj delegata aplikacji
1. Importuj plik nagłówkowy kontrolera widoku projektu
2. Zaktualizuj :didFinishLaunchingWithOptions:
metodę aplikacji :
- (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;
}
Dla Xcode 8
i Swift 3
.
Po prostu usuń .storyboard
plik, automatycznie usunie on odpowiednie odniesienie z twojego .plist
i AppDelegate.swift
dodasz następujący kod.
let initialViewController = UIViewController() initialViewController.view.backgroundColor = .white window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = initialViewController window?.makeKeyAndVisible()
Możesz napisać własny niestandardowy ViewCountroller i używać go AppDelegate.swift
jako swojego self.window?.rootViewController
, po prostu zastąp UIViewController własnym ViewController w powyższym kodzie.
Używam XCode6 Beta i szukałem innego rozwiązania tego problemu, dodając pusty szablon z XCode5.xx do XCode6 Beta.
W tym celu kliknij prawym przyciskiem myszy XCode5.xx w aplikacjach, kliknij „Pokaż zawartość pakietu” i skopiuj „Empty Application.xctemplate” z podanej ścieżki
Zawartość / Programista / Platformy / iPhoneOS.platform / Developer / Library / Xcode / Templates / Project Templates / Application
Teraz zamknij okno i otwórz podaną ścieżkę dla XCode6
Spis treści / Programista / Platformy / iPhoneOS.platform / Developer / Library / Xcode / Templates / Project Templates / iOS / Application /
Wklej plik „Empty Application.xctemplate” do folderu aplikacji. Teraz zrestartuj XCode6, wychodząc i tworząc nowy projekt. Otrzymasz opcję „Pusta aplikacja”.
Teraz, gdy tworzę nowy pusty projekt, automatycznie dodawany jest plik .pch w projekcie (który musimy dodać ręcznie w XCode6)
Mam nadzieję, że to zadziała
Możesz stworzyć własny szablon projektu dla Xcode. Na żądanie możesz użyć szablonu na tej stronie:
Inni już wyjaśnili, jak pozbyć się storyboardu, więc pominę tutaj. W ten sposób wolę robić to w moim kodzie z mniejszą liczbą opcjonalnych łańcuchów (napisane w 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
}
aktualizacja na Xcode 11 i iOS 13. Po ustawieniu wszystkiego, ale nadal widzisz czarny ekran, dzieje się tak, ponieważ cykl życia jest obsługiwany przez UISceneDelegate i kiedy tworzysz nowy projekt, automatycznie generuje UISceneDelegate.m i UISceneDelegate.h. Aby wrócić do dawnych czasów, zanim przyzwyczailiśmy się do UISceneDelegate. następujące kroki mogą pomóc:
usuń plik Manifest sceny aplikacji w plist.
usuń Application Scene Manifest.h i Application Scene Manifest.m
usuń kod pod znakiem #pragma - cykl życia UISceneSession w APPdelegate.m
add @property (silne, nieatomowe) okno UIWindow *; w APPdelegate.h