Uruchom symulator iOS z Xcode i uzyskaj czarny ekran, a następnie Xcode zawiesza się i nie można zatrzymać zadań

85

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
Matt
źródło
1
Czasami to rozumiem. Jest całkowicie niezwiązany z kodem projektu i stanowi błąd lub problem z XCode. Tak też się stało we wcześniejszych wersjach (XCode 4.x). Nie ma wyjścia, jak tylko wymusić zakończenie.
wiosna
1
Tak, wymuszam zakończenie, restartuję komputer, a następnie uruchamiam Xcode. Możesz także chcieć usunąć „Dane pochodne” w organizatorze Xcode (sekcja projektu)
MCKapur,
2
Jeśli Twój symulator nie mieści się na ekranie, możesz zobaczyć dolną część podstawowej aplikacji samouczka na białym tle. Możesz się tego dowiedzieć, przewijając, obracając lub skalując okno (polecenie + 3). Może to nie być oczywiste dla początkującego, więc może komuś pomóc.
DiegoG

Odpowiedzi:

94

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)

Doug
źródło
11
Jep, to mi wystarczyło! Dla tych z Was, którzy nie mogli znaleźć tej opcji: Uruchom symulator, a następnie wybierz z paska menu (u góry ekranu) iOS-Simulator -> Reset Content and Settings.
Timo
9
W ogóle mi nie pomogło: ((
naśladuj
1
@daylight Dzięki za komentarz. Zauważyłem, że ten problem istnieje tylko dla jednego konkretnego projektu, a ponieważ ten projekt został stworzony tylko do celów testowych, nie obchodzi mnie to zbytnio.
naśladuj
1
@mimic try runningxcrun simctl shutdown all
Rish
1
To ustawienie znajduje się teraz na pasku menu „Urządzenie”
izhang05
43

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!

wprowadź opis obrazu tutaj

Chris
źródło
To zadziałało dla mnie! Chociaż mój problem dotyczył urządzenia. Po uruchomieniu obraz staje się czarny z paskiem stanu. Nawet nie osiągając applicationDidLaunchWithOptions w appDelegate.
SleepNot
Szczerze mówiąc, jestem całkiem nowy w iOS, ale wygląda na to, że Twoja aplikacja rzuca wyjątek podczas uruchamiania. Czy działało poprawnie w emulatorze? Możesz spróbować uruchomić go przez emulator i spojrzeć na swój dziennik, to powinno dać ci wskazówkę, jaki jest wyjątek, jeśli tak jest
Chris
Nie, teraz jest w porządku. Nie wyświetlałem żadnego wyjątku, próbowałem nawet zalogować. Twoja odpowiedź rozwiązała to za mnie.
SleepNot
Podobny problem tutaj. W następnej sekcji „Ikony aplikacji i obrazy uruchamiania” nie ustawiono opcji „Plik ekranu uruchamiania”. Po ustawieniu ponownie miałem interfejs użytkownika.
Wizard of Kneup
Usunąłem główny scenorys i dodałem go ponownie, co spowodowało, że ustawienie projektu „Główny interfejs” było puste. Stukrotne dzięki! Naprawiło moją tajemnicę.
Michelle
16

Jeśli używasz SwiftUI

Jeśli aktualizujesz z poprzedniej wersji Xcode 11, są pewne zmiany w SceneDelegate willConnectTo session: options connectionOptionsinicjalizacji:

Plik main windowjest teraz zainicjowany przy użyciu tego UIWindow(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()
    }
bauerMusic
źródło
1
Bardzo dziękuję, biorąc pod uwagę, że jest to stosunkowo nowa technologia. Znalezienie tej odpowiedzi było trochę trudne, to była odpowiedź na moje rozwiązanie!
Yuliani Noriega
Dziękuję bardzo, próbowałem wszystkiego. To nie jest tak oczywiste rozwiązanie, że dziękujemy za udostępnienie.
Nalov
9

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

asdf
źródło
6

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)

Eric Hou
źródło
W końcu zdałem sobie sprawę, że patrzę, LaunchScreen.storyboard kiedy powinienem był pracować Main.storyboard. Kiedy się zorientowałem, na ekranie pojawia się zawartość. Dzięki za wskazówkę tutaj
Gene Bo
5

Ponowne uruchomienie komputera powinno być wszystkim, co musisz zrobić.

Lolo
źródło
1
czasami proste rzeczy działają, rozwiązałem czarny ekran mojej aplikacji na iPada
Heestand XYZ,
5

Rozwiązanie 1: Możesz Quit simulatori spróbuj ponownie.

Rozwiązanie 2 (zalecane): Idź do iOS Simulator->Reset Content and Settings...

Krok 1

Spowoduje to wyświetlenie ostrzeżenia z informacją 'Are you sure you want to reset the iOS Simulator content and settings?'

Krok 2

Wybierz, Resetczy chcesz, czy też Don't Resetprzycisk.

Pamiętaj, że po zresetowaniu zawartości symulatora cała aplikacja zainstalowana na symulatorze zostanie usunięta i zresetuje się do ustawień początkowych.

Jayprakash Dubey
źródło
5

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;
}
sivi
źródło
4

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/

user2101881
źródło
1

Upewnij się, że zrobiłeś to, jeśli po skopiowaniu storyboardu z innego projektu pojawia się czarny ekran wprowadź opis obrazu tutaj

Abhinav Jha
źródło
0

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.

Matt
źródło
1
Debugger GDB jest przestarzały, a Xcode 4.6 jest ostatnią wersją obsługującą go. developer.apple.com/library/mac/#releasenotes/DeveloperTools/…
Aaron Brager,
0

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.

Aaron Brager
źródło
Cześć Aaron, dzięki za odpowiedź. Próbowałem po prostu załadować pusty projekt (pasek kart, a także pustą aplikację). Ma ten sam problem. Podczas korzystania z debuggera LLDB za każdym razem kończy się niepowodzeniem . Jeśli przełączę go na GDB, to działa dobrze. Widziałem twój komentarz poniżej na temat mojej odpowiedzi na temat tego, że została wycofana po 4.6. Mam tylko nadzieję, że coś zadziała, gdy nadejdzie czas, bo wydaje się, że to jest główny problem.
Matt,
0

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.

Czad Celsjusza
źródło
0

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 :)

Dimi Dim
źródło
0

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.

CakeGamesStudios
źródło
0

Po prostu zresetuj symulator, klikając Symulator-> Resetuj zawartość i ustawienia.

Pravin S.
źródło
0

możesz także przejść do Hardware -> reboot, następnie Hardware -> Home i kliknąć swoją aplikację

coder666
źródło
0

Upewnij się, że ustawiono kontroler widoku początkowego

davut dev
źródło
0

Rozwiązałem to dopiero po usunięciu symulatorów z wcześniejszych wersji iOS.

Eran Talmor
źródło
0

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

Apoc
źródło
0

Sprawdź wszystkie ograniczenia dla wszystkich widoków i przejrzyj całą scenorys. Zwykle dzieje się tak z tego powodu.

Pozdrawiam, Arora

Gaurav Arora
źródło
0

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.

Andy
źródło
0

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)
oguzhan
źródło
0

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.

Ankur Lahiry
źródło
0

wprowadź opis obrazu tutaj

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!

Lubię kodować
źródło
0

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
    }
}
Michael Tangs
źródło