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


83

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

Я деякий час шукав (як Google, так і SO), але поки що не міг знайти рішення. Є багато подібних помилок, але рішення, здається, не виправляють цього.

У Xcode я натискаю "запустити". Він успішно компілюється та будується, запускає iOS-симулятор, але не завантажує програму. Тільки рядок стану вгорі. З чорним екраном.

Я написав лише базовий код (далі разом з лекціями) і не можу обійти цю проблему.

Щоб ще більше заплутати справи, (UIWebView)перед цими лекціями я написав веб-обгортку, і це чудово працює. Але в коді майже немає різниці. Всі нові додатки, які я створюю з нуля, зазнають невдач із тією ж проблемою чорного екрану.

Якщо я натиснув кнопку «Домашня сторінка» на симуляторі та запустив програму, вона з’явиться. Але Xcode, здається, не знає, що відбувається.

Це так, ніби Xcode втратив можливість спілкуватися з iOS Simulator і припускає, що він працює (навіть якщо я вийшов з iOS simulator). Я намагаюся вийти з 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

1
Я отримую це іноді. Він абсолютно не пов’язаний з кодом проекту і є деякою помилкою або проблемою з XCode. Це також траплялося в попередніх версіях (XCode 4.x). Немає рішення, окрім як змусити кинути.
весна

1
Так, я примусово кидаю, перезавантажую комп’ютер, а потім запускаю Xcode. Також ви можете видалити "Виведені дані" в організаторі Xcode (розділ проекту)
MCKapur

2
Якщо ваш симулятор не відповідає вашому екрану, можливо, ви бачите нижню частину базового підручника з білим тлом. Прокручуючи, обертаючи або масштабуючи вікно (команда + 3), ви можете це дізнатись. Це може бути не очевидно для початківців, отже, це може допомогти комусь.
DiegoG

Відповіді:


90

Дивно, але те, що у мене спрацювало, було перейти в меню iOS Simulator і натиснути "Скинути вміст і налаштування". (в iOS 13, під апаратним забезпеченням)


11
Джеп, це зробило для мене фокус! Для тих з вас, хто не зміг знайти такий варіант: запустіть симулятор, а потім виберіть у рядку меню (у верхній частині екрана) iOS-Simulator -> Reset Content and Settings.
Тимо

9
Мені зовсім не допомогло: ((
імітувати

1
@daylight Дякую за ваш коментар. Я зазначив, що ця проблема існує лише для одного конкретного проекту, і оскільки цей проект створений лише для цілей тестування, мені все одно.
імітувати

1
@mimic спробувати бігxcrun simctl shutdown all
Ріш

1
Зараз це налаштування знаходиться в рядку меню "Пристрій"
izhang05,

42

Перш ніж скинути емулятор, спершу перейдіть до екрана проектів " Навігатор проектів " і під загальним екраном -> інформація про депонування перевірте, чи правильно налаштовано властивість основного інтерфейсу !

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


Це спрацювало для мене! Хоча моя проблема була на пристрої. Після запуску зображення воно просто стає чорним із рядком стану. Навіть не досягнувши applicationDidLaunchWithOptions у appDelegate.
SleepNot

Чесно кажучи, я досить новий для iOS, але схоже, що ваш додаток створює виняток при запуску. Чи правильно він працював в емуляторі? Ви можете спробувати запустити його через емулятор і поглянути на свій журнал, це має дати вам певні вказівки, що таке виняток, якщо це так
Кріс

Ні, зараз це нормально. Не виводив жодного винятку, я навіть спробував вести журнал. Ваша відповідь вирішила це для мене.
SleepNot

Подібне питання тут. У наступному розділі "Піктограми програм та запуск зображень" "Файл екрана запуску" не встановлено. Після встановлення у мене знову з’явився користувальницький інтерфейс.
Wizard of Kneup

Я видалив свою основну раскадровку і знову додав її, що призвело до порожнього налаштування проекту "Основний інтерфейс". Завдяки мільйонів! Це виправило мою таємницю.
Мішель

15

Якщо ви використовуєте SwiftUI

Якщо ви оновлюєтесь із попередньої версії Xcode 11, є кілька змін в SceneDelegate willConnectTo session: options connectionOptionsініціалізації:

Зараз main 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()
    }

1
Щиро дякую, враховуючи, що це відносно нова технологія. Знайти цю відповідь було дещо складно, це була відповідь на моє рішення!
Юліані Норієга

Щиро дякую, я спробував усе. Це настільки не очевидне рішення, що дякуємо, що поділилися ним.
Налов

9

Я новачок у розробці додатків для iOS. Я займався розробкою програм для iOS з самого початку, і під час запуску дуже базової програми Hello World, я також зіткнувся з тією ж проблемою, що після створення та запуску програми в симуляторі iOS з’являється лише чорний порожній екран. Якось, намагаючись знайти рішення проблеми, я випадково натиснув вікно -> Масштаб -> 50% у симуляторі iOS, і це вирішило мою проблему. Потім я міг побачити домашню сторінку з моїм додатком і натиснувши піктограму програми, я зміг успішно запустити свою програму. Версії програми: Xcode 5.1 iOS Simulator: 7.1 OSX: 10.9.3


6

Це може бути наслідком невстановлення правильної інформації про розгортання. (тобто якщо ваша розкадровка не встановлена ​​як основний інтерфейс)


Нарешті я зрозумів, що дивлюся, LaunchScreen.storyboard коли мені слід було працювати Main.storyboard. Як тільки я це зрозумів, на екрані з’являється вміст. Дякую за вказівник тут
Gene Bo

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

Все, що вам потрібно, має бути лише перезавантаження комп’ютера.


іноді прості речі працюють, вирішив мій додаток для iPad чорний екран
Антон - Шестикутники

4

Якщо вам слід втратити точку входу в своїй розкадровці або просто хочете змінити точку входу, ви можете вказати це в Interface Builder. Щоб встановити нову точку входу, спочатку потрібно вирішити, який ViewController діятиме як нова точка входу, і в Інспекторі атрибутів встановити прапорець Початкова сцена.

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


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 localhost

Це повинно працювати, оскільки це мій IP, але змінивши його назад на встановлений за замовчуванням IP-код із фіксованим Xcode ...

127.0.0.1 localhost

Сподіваюся, це допомагає.


0

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


0

Зі мною сталося, що тип класу не був UIViewController для сценарію, прикріпленого до мого контролера перегляду. Це було для UITabController ..... Я помилково швидко створив неправильний тип класу .... Тож переконайтеся, що клас правильний тип. Я поспішив і допустив цю помилку.



0

Ви також можете перейти до Обладнання -> перезавантажити, потім Обладнання -> Домашня сторінка та натиснути на Ваш додаток


0

Переконайтеся, що встановлений контролер початкового перегляду



0

У мене були чорні екрани симулятора лише для симів iOS 11. Спробувавши скинути налаштування, перезавантажити, перевстановити та створити на своєму комп'ютері абсолютно новий рахунок облікового запису, я знайшов таке рішення:

defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferRendererHint 3

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


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

Я розробляв флаттер за допомогою андроїд-студії та запускав симулятор, симулятор був темний, і я скидав вміст відповідно до прийнятої відповіді. Але це не вирішило моєї проблеми. Мій процесор працював якось досить високо, тому я перезавантажився, але проблему не вирішив. Я відкрив Xcode і запустив один із власних додатків для iOS, симулятор знову відкрився, як зазвичай. Я закрив Xcode і відкрив Android Studio, а потім знову почав розробляти програму flutter.


0

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

Це було моєю причиною виникнення цієї проблеми.

З якоїсь причини не встановлено прапорець "Є початковий контролер перегляду" (для мого головного контролера перегляду), що спричинило завантаження чорного екрана.

Сподіваюся, це допомагає комусь там!


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
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.