Mam problem z uruchomieniem mojej podstawowej aplikacji na iPhone'a (podczas wykładów Stanford iTunes CS193p) w symulatorze iOS.
Szukałem przez jakiś czas (zarówno Google, jak i SO), ale do tej pory nie mogłem znaleźć rozwiązania. Istnieje wiele podobnych błędów, ale wydaje się, że rozwiązania tego nie rozwiązują.
W Xcode klikam „uruchom”. Kompiluje i buduje pomyślnie, uruchamia symulator iOS, ale nigdy nie ładuje aplikacji. Tylko pasek stanu u góry. Z czarnym ekranem.
Napisałem tylko bardzo podstawowy kod (zgodnie z wykładami) i nie mogę obejść tego problemu.
Aby jeszcze bardziej zmylić sprawy, napisałem opakowanie internetowe (UIWebView)
przed tymi wykładami i to działa dobrze. Ale nie ma prawie żadnej różnicy w kodzie. Wszystkie nowe aplikacje, które tworzę od podstaw, zawodzą z tym samym problemem z czarnym ekranem.
Jeśli naciśnę przycisk home na symulatorze i uruchomię aplikację, zostanie wyświetlona. Ale Xcode nie wydaje się wiedzieć, co się dzieje.
To tak, jakby Xcode stracił możliwość rozmowy z symulatorem iOS i zakłada, że działa (nawet jeśli opuściłem symulator iOS). Próbuję zakończyć Xcode i prosi mnie o zatrzymanie zadań. Wtedy po prostu wisi. Więc muszę wymusić ponowne uruchomienie, aby wyjść z Xcode.
Używam: OSX 10.8.2 Xcode 4.5.2 iOS Simulator 6.0
CalculatorAppDelegate.h
#import <UIKit/UIKit.h>
@interface CalculatorAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
CalculatorAppDelegate.m
#import "CalculatorAppDelegate.h"
@implementation CalculatorAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions
{
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end
CalculatorViewController.h
#import <UIKit/UIKit.h>
@interface CalculatorViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *display;
@end
CalculatorViewController.m
#import "CalculatorViewController.h"
@implementation CalculatorViewController
@synthesize display = _display;
- (IBAction)digitPressed:(UIButton *)sender
{
NSString *digit = [sender currentTitle];
NSLog(@"digit pressed = %@", digit);
}
@end
źródło
Odpowiedzi:
O dziwo, to, co zadziałało, to przejście do menu symulatora iOS i naciśnięcie „Resetuj zawartość i ustawienia”. (w iOS 13, jest pod sprzętem)
źródło
iOS-Simulator -> Reset Content and Settings
.xcrun simctl shutdown all
Przed zresetowaniem emulatora najpierw przejdź do ekranu " nawigatora projektów " i pod ekranem ogólnym -> informacje o rozrywce sprawdź, czy właściwość głównego interfejsu jest poprawnie skonfigurowana!
źródło
Jeśli używasz SwiftUI
Jeśli aktualizujesz z poprzedniej wersji Xcode 11, są pewne zmiany w
SceneDelegate
willConnectTo session: options connectionOptions
inicjalizacji:Plik main
window
jest teraz zainicjowany przy użyciu tegoUIWindow(windowScene: windowScene)
, gdzie byłUIWindow(frame: UIScreen.main.bounds)
W poprzedniej wersji:
let window = UIWindow(frame: UIScreen.main.bounds) window.rootViewController = UIHostingController(rootView: ContentView()) self.window = window window.makeKeyAndVisible()
W nowej wersji:
if let windowScene = scene as? UIWindowScene { let window = UIWindow(windowScene: windowScene) window.rootViewController = UIHostingController(rootView: ContentView()) self.window = window window.makeKeyAndVisible() }
źródło
Jestem nowicjuszem w tworzeniu aplikacji na iOS. Od samego początku ćwiczyłem tworzenie aplikacji na iOS i podczas uruchamiania bardzo podstawowej aplikacji Hello World napotkałem ten sam problem, że po zbudowaniu i uruchomieniu aplikacji w symulatorze iOS pojawia się tylko czarny pusty ekran. W jakiś sposób starając się znaleźć rozwiązanie problemu, przypadkowo kliknąłem Window -> Scale -> 50% w symulatorze iOS i rozwiązało to mój problem. Mogłem wtedy zobaczyć stronę główną z moją aplikacją i kliknąć ikonę aplikacji Mogłem pomyślnie uruchomić moją aplikację. Wersje aplikacji: Xcode 5.1 iOS Simulator: 7.1 OSX: 10.9.3
źródło
Może to wynikać z nieprawidłowego ustawienia informacji o wdrożeniu. (tj. jeśli Twój scenorys nie jest ustawiony jako główny interfejs)
źródło
LaunchScreen.storyboard
kiedy powinienem był pracowaćMain.storyboard
. Kiedy się zorientowałem, na ekranie pojawia się zawartość. Dzięki za wskazówkę tutajPonowne uruchomienie komputera powinno być wszystkim, co musisz zrobić.
źródło
Rozwiązanie 1: Możesz
Quit simulator
i spróbuj ponownie.Rozwiązanie 2 (zalecane): Idź do
iOS Simulator
->Reset Content and Settings...
Spowoduje to wyświetlenie ostrzeżenia z informacją
'Are you sure you want to reset the iOS Simulator content and settings?'
Wybierz,
Reset
czy chcesz, czy teżDon't Reset
przycisk.Pamiętaj, że po zresetowaniu zawartości symulatora cała aplikacja zainstalowana na symulatorze zostanie usunięta i zresetuje się do ustawień początkowych.
źródło
Innym rozwiązaniem jest to, że jeśli programowo budujesz interfejs użytkownika w projekcie Objective C, może być konieczne dodanie kodu w celu zawyżenia widoku, więc będziesz musiał dodać te 3 wiersze, aby interfejs okna współdziałać z kodem (zewnętrzne 2 faktycznie wchodzą w interakcję z kodem, a drugi zmieni ekran na biały, abyś wiedział, że działa).
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 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; }
źródło
Jeśli stracisz punkt wejścia w Storyboard lub po prostu chcesz zmienić punkt wejścia, możesz to określić w Interface Builder. Aby ustawić nowy punkt wejścia, musisz najpierw zdecydować, który ViewController będzie działał jako nowy punkt wejścia i w Inspektorze atrybutów zaznacz pole wyboru Scena początkowa.
Możesz spróbować: http://www.scott-sherwood.com/ios-5-specifying-the-entry-point-of-your-storyboard/
źródło
Upewnij się, że zrobiłeś to, jeśli po skopiowaniu storyboardu z innego projektu pojawia się czarny ekran
źródło
Udało mi się znaleźć na to poprawkę. Zostało znalezione dzięki uprzejmości tego wpisu na blogu:
http://vandadnp.wordpress.com/2012/03/18/xcode-4-3-1-cannot-attach-to-ios-simulator/
Rozwiązaniem jest naciśnięcie cmd + shift +, (polecenie, shift, a następnie przecinek „,”) .., co spowoduje załadowanie niektórych opcji zwolnienia lub debugowania.
Zmień debugger z LLDB na GDB. To rozwiązuje problem.
źródło
Aby upewnić się, że jest to problem z symulatorem, sprawdź, czy możesz połączyć się z symulatorem z zupełnie nowym projektem bez zmiany kodu. Wypróbuj szablon paska kart.
Jeśli uważasz, że to problem z symulatorem, naciśnij menu Symulator iOS. Wybierz „Zresetuj zawartość i ustawienia ...”. Naciśnij „Resetuj”.
Nie widzę twojego XIB i jakie @properties podłączyłeś w Interface Builder, ale może być również to, że nie ładujesz swojego okna lub twoje okno nie ładuje kontrolera widoku.
źródło
Miałem ten sam problem z Xcode ... czarny ekran podczas uruchamiania aplikacji, brak debugowania i klikanie blokowałoby Xcode.
W końcu znalazłem problem ... podążając za wskazówką, że symulator nie może połączyć się z Xcode, spojrzałem na mój plik etc / hosts i stwierdziłem, że kilka miesięcy temu, aby rozwiązać inny problem, wyedytowałem plik hosta, aby zmapować lokalny host na mój stałe IP zamiast domyślnego ... moja wartość:
10.0.1.17 localhost
To powinno działać, ponieważ to jest mój adres IP, ale zmieniając go z powrotem na domyślny stały adres IP Xcode ...
127.0.0.1 localhost
Mam nadzieję że to pomoże.
źródło
Robiłem to, co sugeruje Doug („Zresetuj zawartość i ustawienia”), co działa, ale zajmuje dużo czasu i jest naprawdę irytujące ... do czasu, gdy niedawno znalazłem zupełnie przypadkowe inne rozwiązanie, które jest znacznie szybsze i wydaje się działać do tej pory! Po prostu naciśnij cmd + L na swoim symulatorze lub przejdź do menu symulatora „Sprzęt -> Blokada”, które blokuje ekran, po odblokowaniu ekranu aplikacja działa jak nic :)
źródło
To, co się ze mną stało, to typ klasy nie był UIViewController dla skryptu dołączonego do mojego kontrolera widoku. To było dla UITabController ..... omyłkowo szybko utworzyłem niewłaściwy typ klasy ... Więc upewnij się, że klasa jest poprawna ... Mam nadzieję, że to komuś pomoże. Spieszyłem się i popełniłem ten błąd.
źródło
Po prostu zresetuj symulator, klikając Symulator-> Resetuj zawartość i ustawienia.
źródło
możesz także przejść do Hardware -> reboot, następnie Hardware -> Home i kliknąć swoją aplikację
źródło
Upewnij się, że ustawiono kontroler widoku początkowego
źródło
Rozwiązałem to dopiero po usunięciu symulatorów z wcześniejszych wersji iOS.
źródło
Miałem czarne ekrany symulatorów tylko dla symulatorów iOS 11. Po próbie zresetowania, ponownego uruchomienia, ponownej instalacji i utworzenia zupełnie nowego konta użytkownika na moim komputerze znalazłem to rozwiązanie:
defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferRendererHint 3
znaleźć w tej odpowiedzi tutaj: Xcode 9 iOS Simulator staje się czarnym ekranem po zainstalowaniu Xcode 10 beta
źródło
Sprawdź wszystkie ograniczenia dla wszystkich widoków i przejrzyj całą scenorys. Zwykle dzieje się tak z tego powodu.
Pozdrawiam, Arora
źródło
Jeśli niedawno zaktualizowałeś Xcode 11 beta 3 i spróbowałeś uruchomić starszy projekt SwiftUI, musisz wprowadzić pewne zmiany w SceneDelegate, gdzie widoki są ładowane, w przeciwnym razie ekrany pozostaną czarne na urządzeniach z iOS 13 beta 3, co oczywiście zawiera wszystkie symulatory.
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). // Use a UIHostingController as window root view controller if let windowScene = scene as? UIWindowScene { let window = UIWindow(windowScene: windowScene) window.rootViewController = UIHostingController(rootView: ContentView()) self.window = window window.makeKeyAndVisible() } }
Zachowanie nie ogranicza się wyłącznie do symulatorów, ale ponieważ większość ludzi będzie uruchamiać oprogramowanie w wersji beta wyłącznie na symulatorach, wystąpi tylko w tym kontekście. Dość długo mnie to zaskakiwało, więc mam nadzieję, że pomoże.
źródło
Kiedy wykonałem projekt na Xcode 11.1, napotkałem ten problem. Ten problem z czarnym ekranem może wystąpić w dowolnej prezentacji między kontrolerami ViewControllers.
Ta odpowiedź mi pomogła. Ponieważ prezentacja modalna zmieniła się w iOS 13. Jeśli nie masz tego problemu przed iOS 13, spróbuj dodać wiersz poniżej do kontrolera ViewController przed jego prezentacją;
viewController.modalPresentationStyle = .fullScreen
po twoim kodzie może wyglądać jak poniżej;
let vc = UIViewController() vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency self.present(vc, animated: true, completion: nil)
źródło
Rozwijałem flutter w Android Studio i uruchamiając symulator, symulator był ciemny i zresetowałem zawartość zgodnie z zaakceptowaną odpowiedzią. Ale to nie rozwiązało mojego problemu. Mój procesor działał wystarczająco wysoko, więc uruchomiłem ponownie, ale nie rozwiązałem problemu. Otworzyłem Xcode i uruchomiłem jedną z moich natywnych aplikacji na iOS, symulator został ponownie otwarty jak zwykle. Zamknąłem Xcode i otworzyłem Android Studio, po czym ponownie zacząłem tworzyć aplikację flutter.
źródło
To był mój powód, dla którego miałem ten problem.
Z jakiegoś powodu opcja „Jest początkowym kontrolerem widoku” (dla mojego głównego kontrolera widoku) nie była zaznaczona, co powodowało ładowanie czarnego ekranu.
Mam nadzieję, że to komuś pomoże!
źródło
Rozwiązałem to pytanie, ustawiając kolor tła okna w ten sposób w iOS 13:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let _ = (scene as? UIWindowScene) else { return } if let windowScene = scene as? UIWindowScene { window = UIWindow(windowScene: windowScene) window?.backgroundColor = .white let storyBoard = UIStoryboard(name: "Main", bundle: nil) // workaround for svprogresshud let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.window = window } }
źródło