Запустите симулятор iOS из Xcode и получите черный экран, за которым следует зависание Xcode и невозможность остановки задач

85

У меня проблемы с запуском основного приложения для iPhone (во время чтения лекций Stanford iTunes CS193p) в симуляторе iOS.

Я искал какое-то время (как в Google, так и в SO), но пока не могу найти решение. Есть много похожих ошибок, но решения, похоже, не исправляют это.

В Xcode нажимаю "запустить". Он успешно компилируется и компилируется, запускает симулятор iOS, но никогда не загружает приложение. Только статус-бар вверху. С черным экраном.

Я написал только очень простой код (следуя лекциям) и не могу решить эту проблему.

Чтобы еще больше запутать ситуацию, я написал веб-оболочку (UIWebView)перед этими лекциями, и она отлично работает. Но в коде почти нет разницы. Все новые приложения, которые я создаю с нуля, терпят неудачу из-за одной и той же проблемы с черным экраном.

Если я нажму кнопку «Домой» на симуляторе и запустю приложение, оно отобразится. Но Xcode, похоже, не знает, что происходит.

Это как если бы Xcode потерял способность общаться с симулятором iOS и предполагает, что он запущен (даже если я выйду из симулятора iOS). Я пытаюсь выйти из Xcode, и он просит меня остановить задачи. Потом просто зависает. Поэтому мне нужно принудительно перезапустить, чтобы выйти из Xcode.

Я использую: 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

КалькуляторAppDelegate.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
Мэтт
источник
1
Иногда я это получаю. Это совершенно не связано с кодом проекта и представляет собой некоторую ошибку или проблему с XCode. Так было и в более ранних версиях (XCode 4.x). Нет решения, кроме как заставить бросить курить.
весна
1
Да, я принудительно завершаю работу, перезагружаю компьютер и запускаю Xcode. Также вы можете удалить «Производные данные» в органайзере Xcode (раздел проекта)
MCKapur
2
Если ваш симулятор не умещается на вашем экране, возможно, вы видите нижнюю часть основного учебного приложения с белым фоном. Прокручивая, вращая или масштабируя окно (команда + 3), вы можете узнать. Это может быть неочевидно для новичка, поэтому может кому-то помочь.
DiegoG

Ответы:

94

Удивительно, но то, что сработало для меня, - это перейти в меню iOS Simulator и нажать «Сбросить содержимое и настройки». (в iOS 13 он находится в разделе «Оборудование»)

дуг
источник
11
Джеп, это помогло мне! Для тех из вас, кто не смог найти эту опцию: запустите симулятор, а затем выберите в строке меню (вверху экрана) iOS-Simulator -> Reset Content and Settings.
Timo,
9
Совсем не помогло: ((
имитируйте
1
@daylight Спасибо за ваш комментарий. Я заметил, что эта проблема существует только для одного конкретного проекта, и поскольку этот проект был создан только для целей тестирования, мне все равно.
подражает
1
@mimic попробуйте бежатьxcrun simctl shutdown all
Риш
1
Этот параметр теперь находится в строке меню «Устройство»
izhang05
43

Перед перезагрузкой эмулятора сначала перейдите на экран « Навигатор проектов» ваших проектов и под общим экраном -> информация о депоименте проверьте правильность настройки основного свойства интерфейса !

введите описание изображения здесь

Крис
источник
Это сработало для меня! Хотя моя проблема была в устройстве. После запуска изображение просто становится черным со строкой состояния. Даже не достигнув applicationDidLaunchWithOptions в appDelegate.
SleepNot
Честно говоря, я новичок в iOS, но похоже, что ваше приложение выдает исключение при запуске. В эмуляторе все работало правильно? Вы можете попробовать запустить его через эмулятор и посмотреть свой журнал, это должно дать вам некоторое представление о том, что это за исключение, если это так,
Крис,
Нет, теперь все в порядке. Не выводил никаких исключений, я даже пробовал вести журнал. Ваш ответ решил это для меня.
SleepNot
Аналогичная проблема здесь. В следующем разделе «Значки приложений и изображения запуска» не был установлен «Файл экрана запуска». После установки у меня снова был пользовательский интерфейс.
Wizard of Kneup
Я удалил свою основную раскадровку и снова добавил ее, в результате чего параметр «Основной интерфейс» проекта был пустым. Бесконечно благодарен! Это решило мою загадку.
Мишель
16

Если вы используете SwiftUI

Если вы обновляетесь с предыдущей версии Xcode 11, есть некоторые изменения в SceneDelegate willConnectTo session: options connectionOptions инициализацию :

Основной windowтеперь инициализируется с использованием UIWindow(windowScene: windowScene), где он раньше былUIWindow(frame: UIScreen.main.bounds)

В предыдущей версии:

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = UIHostingController(rootView: ContentView())
    self.window = window
    window.makeKeyAndVisible()

В новой версии:

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = UIHostingController(rootView: ContentView())
        self.window = window
        window.makeKeyAndVisible()
    }
bauerМузыка
источник
1
Большое спасибо, учитывая, что это относительно новая технология. Найти этот ответ было немного сложно, это был ответ на мое решение!
Юлиани Норьега
Большое спасибо, я все перепробовала. Это настолько неочевидное решение, что спасибо, что поделились им.
Налов
9

Я новичок в разработке приложений для iOS. Я с самого начала практиковался в разработке приложений для iOS, и при запуске очень простого приложения Hello World я также столкнулся с той же проблемой, что после создания и запуска приложения в симуляторе iOS появляется только черный пустой экран. Каким-то образом, пытаясь найти решение проблемы, я случайно щелкнул Window -> Scale -> 50% в симуляторе iOS, и это действительно решило мою проблему. Затем я мог видеть домашнюю страницу своего приложения и, щелкнув значок приложения, смог успешно запустить свое приложение. Версии приложения: Xcode 5.1 iOS Simulator: 7.1 OSX: 10.9.3

asdf
источник
6

Это могло произойти из-за неправильной установки информации о развертывании. (т.е. если ваша раскадровка не установлена ​​в качестве основного интерфейса)

Эрик Хоу
источник
Я наконец понял, что смотрю на то, с чем LaunchScreen.storyboard мне следовало работать Main.storyboard. Как только я это понял, появляется экран с содержимым. Спасибо за указатель здесь
Джин Бо
5

Все, что вам нужно сделать, это перезагрузить компьютер.

Лоло
источник
1
иногда простые вещи работают, решает черный экран моего iPad-приложения
Heestand XYZ
5

Решение 1. Вы можете Quit simulatorпопробовать еще раз.

Решение 2 (рекомендуется): перейдите к iOS Simulator->Reset Content and Settings...

Шаг 1

Появится всплывающее предупреждение о том, 'Are you sure you want to reset the iOS Simulator content and settings?'

Шаг 2

Выберите, Resetесли хотите, или Don't Resetкнопку.

Обратите внимание, что после сброса содержимого симулятора все приложения, установленные на симуляторе, будут удалены, и оно будет сброшено до исходных настроек.

Джайпракаш Дубей
источник
5

Другое решение заключается в том, что если вы программно создаете пользовательский интерфейс в проекте Objective C, вам может потребоваться добавить код для расширения представления, поэтому вам нужно будет добавить эти 3 строки, чтобы интерфейс окна взаимодействовал с кодом (внешние 2 фактически взаимодействуют с кодом, а другой изменит цвет экрана на белый, чтобы вы знали, что он работает).

- (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;
}
сиви
источник
4

Если вы потеряете точку входа в раскадровке или просто захотите изменить точку входа, вы можете указать это в Interface Builder. Чтобы установить новую точку входа, вы должны сначала решить, какой ViewController будет действовать как новая точка входа, и в инспекторе атрибутов установите флажок Initial Scene.

Вы можете попробовать: http://www.scott-sherwood.com/ios-5-specifying-the-entry-point-of-your-storyboard/

user2101881
источник
1

Пожалуйста, убедитесь, что вы сделали это, если вы получаете черный экран после копирования раскадровки из другого проекта. введите описание изображения здесь

Абхинав Джа
источник
0

Мне удалось найти решение этой проблемы. Это было любезно найдено благодаря этой публикации в блоге:

http://vandadnp.wordpress.com/2012/03/18/xcode-4-3-1-cannot-attach-to-ios-simulator/

Решение состоит в том, чтобы нажать cmd + shift +, (command, shift, а затем запятую ",") .., чтобы загрузить некоторые параметры для выпуска или отладки.

Измените отладчик с LLDB на GDB. Это устраняет проблему.

Мэтт
источник
1
Отладчик GDB устарел, и Xcode 4.6 является последней версией, которая его поддерживает. developer.apple.com/library/mac/#releasenotes/DeveloperTools/…
Аарон Брагер,
0

Чтобы убедиться, что это проблема симулятора, посмотрите, сможете ли вы подключиться к симулятору с совершенно новым проектом без изменения кода. Попробуйте шаблон панели вкладок.

Если вы думаете, что это проблема симулятора, нажмите меню симулятора iOS. Выберите «Сбросить содержимое и настройки ...». Нажимаем «Сброс».

Я не вижу ваш XIB и какие @properties вы подключили в Interface Builder, но также может быть, что вы не загружаете свое окно или ваше окно не загружает ваш контроллер представления.

Аарон Брагер
источник
Привет, Аарон, спасибо за ответ. Я попытался просто загрузить пустой проект (панель вкладок, а также пустое приложение). У него такая же проблема. При использовании отладчика LLDB он каждый раз дает сбой . Если я переключу его на GDB, он будет работать нормально. Ваш комментарий ниже к моему ответу о том, что он устарел после 4.6. Я просто надеюсь, что что-то сработает, когда придет время, потому что это, кажется, главная проблема.
Мэтт
0

У меня была такая же проблема с Xcode ... черный экран при запуске приложений, без отладки и щелчка мыши Xcode заблокировался.

Я наконец нашел проблему ... следуя примеру, что симулятор не может подключиться к Xcode, я взглянул на свой файл etc / hosts и обнаружил, что несколько месяцев назад, чтобы решить другую проблему, я отредактировал файл хоста, чтобы сопоставить localhost с моим фиксированный IP вместо стандартного ... мое значение:

10.0.1.17 локальный хост

Это должно сработать, так как это мой IP, но вернув его обратно к фиксированному IP-адресу Xcode по умолчанию ...

127.0.0.1 локальный

Надеюсь это поможет.

Чад Цельсий
источник
0

Я делал то, что предлагает Дуг («Сбросить содержимое и настройки»), что работает, но занимает много времени и действительно раздражает ... пока я недавно случайно не нашел другое решение, которое намного быстрее и, похоже, также работает до сих пор! Просто нажмите cmd + L на симуляторе или перейдите в меню симулятора «Оборудование -> Блокировка», которое блокирует экран, когда вы разблокируете экран, приложение работает, как будто ничего не произошло :)

Дими Дим
источник
0

Со мной произошло то, что Тип класса не был UIViewController для скрипта, прикрепленного к моему контроллеру представления. Это было для UITabController ..... Я по ошибке быстро создал неправильный тип класса .... Так что убедитесь, что класс правильный тип ... Надеюсь, это кому-то поможет. Я очень спешил и совершил ошибку.

ТортИгрыСтудии
источник
0

Просто перезагрузите симулятор, нажав Симулятор-> Сбросить содержимое и настройки ..

Правин С.
источник
0

вы также можете перейти в «Оборудование» -> «Перезагрузка», затем «Оборудование» -> «Домой» и нажать на свое приложение.

coder666
источник
0

Убедитесь, что установлен Initial View Controller.

Давут Дев
источник
0

Я решил это только после удаления симуляторов с предыдущих версий iOS.

Эран Талмор
источник
0

У меня были черные экраны симулятора только для симуляторов iOS 11. После попытки сброса, перезагрузки, переустановки и создания новой учетной записи пользователя на моем компьютере я нашел следующее решение:

defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferRendererHint 3

найдено в этом ответе здесь: Симулятор iOS Xcode 9 становится черным экраном после установки бета-версии Xcode 10

Apoc
источник
0

Пожалуйста, проверьте все ограничения для всех представлений и просмотрите полную раскадровку. Обычно это происходит из-за этого.

С уважением, Арора

Гаурав Арора
источник
0

Если вы недавно обновились до Xcode 11 beta 3 и попытаетесь запустить более старый проект SwiftUI, вам необходимо внести некоторые изменения в SceneDelegate, где загружаются представления, иначе экраны будут оставаться черными на устройствах под управлением iOS 13 beta 3, что, конечно, включает в себя все тренажеры.

    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()
    }
}

Поведение не ограничивается строго симуляторами, но поскольку большинство людей будут запускать бета-версию программного обеспечения исключительно на симуляторах, это будет происходить только в этом контексте. Это озадачило меня на некоторое время, так что надеюсь, что это поможет.

Энди
источник
0

Когда я перенес свой проект на Xcode 11.1, у меня возникла проблема. Эта проблема с черным экраном может возникнуть при любой презентации внутри ViewControllers.

Этот ответ мне помог. Поскольку модальное представление изменилось в iOS 13. Если вы не столкнетесь с этой проблемой до iOS 13, попробуйте добавить строку ниже в свой ViewController перед его представлением;

viewController.modalPresentationStyle = .fullScreen

после того, как ваш код может выглядеть так, как показано ниже;

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)
огужан
источник
0

Я разрабатывал флаттер с помощью студии Android и запускал симулятор, симулятор был темным, и я сбросил содержимое в соответствии с принятым ответом. Но это не устранило мою проблему. Мой процессор каким-то образом работал достаточно высоко, поэтому я перезапустил, но не исправил проблему. Я открыл Xcode и запустил одно из моих родных приложений для iOS, симулятор снова открылся как обычно. Я закрыл Xcode и открыл Android Studio, а затем снова начал разрабатывать приложение flutter.

Анкур Лахири
источник
0

введите описание изображения здесь

Это была моя причина возникновения этой проблемы.

По какой-то причине «Is Initial View Controller» (для моего основного View Controller) не был отмечен, что вызывало черный экран при загрузке.

Надеюсь, это кому-то поможет!

Мне нравится кодировать
источник
0

Я решил этот вопрос, установив цвет фона окна, как это в 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
    }
}
Майкл Тангс
источник