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

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

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

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

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

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

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

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

Как будто Xcode потерял способность разговаривать с iOS Simulator и предполагает, что он работает (даже если я уйду из 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

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
4b9b3361

Ответ 1

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

Ответ 2

Прежде чем перезагружать эмулятор, сначала перейдите на экран "Project Navigator" на экране ваших проектов, а на экране общей информации → depoyment info проверьте правильность настройки свойства основного интерфейса!

enter image description here

Ответ 3

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

Ответ 4

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

Ответ 5

Другое решение заключается в том, что если вы создаете UI программно в проекте 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;
}

Ответ 6

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

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

Step 1

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

Step 2

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

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

Ответ 7

Если вы используете 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()
    }

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

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

Ответ 11

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

Если вы считаете, что это проблема симулятора, нажмите меню iOS Simulator. Выберите "Reset Контент и настройки...". Нажмите "Reset".

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

Ответ 12

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

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

10.0.1.17 localhost

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

127.0.0.1 localhost

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

Ответ 13

Я делал то, что предлагает doug ( "Reset Content and Settings" ), который работает, но занимает много времени, и это очень раздражает... пока я не нашел совершенно случайное другое решение, которое намного быстрее и, похоже, также работают до сих пор! Просто нажмите cmd + L на свой симулятор или перейдите в меню симулятора "Аппаратное обеспечение → Блокировка", которое блокирует экран, когда вы разблокируете экран, приложение работает так, как будто ничего не произошло:)

Ответ 14

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

Ответ 15

Просто reset ваш симулятор, нажав Simulator- > reset Содержание и настройки.

Ответ 16

вы также можете перейти на Hardware → reboot, затем Hardware → Home и нажмите на свое приложение

Ответ 17

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

Ответ 18

Убедитесь, что установлен начальный просмотр контроллера

Ответ 19

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

Ответ 20

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

defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferRendererHint 3

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

Ответ 21

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

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

Ответ 22

Если вы недавно обновились до 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()
    }
}

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

Ответ 23

Когда я перенес свой проект на 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)