从Xcode启动iOS模拟器并出现黑屏,然后挂起Xcode并且无法停止任务


83

我在iOS模拟器中运行基本的iPhone应用程序时遇到困难(在浏览Stanford iTunes CS193p讲座时)。

我已经搜索了一段时间(包括Google和SO),但到目前为止仍找不到解决方案。有许多类似的错误,但是解决方案似乎无法解决此问题。

在Xcode中,我单击“运行”。它可以编译并成功构建,启动iOS模拟器,但始终无法加载该应用程序。仅状态栏在顶部。带黑屏。

我只写了非常基本的代码(跟着讲课),无法解决这个问题。

为了使事情更加混乱,(UIWebView)在这些讲座之前,我写了一个Web包装程序,效果很好。但是代码几乎没有任何区别。我从头开始创建的所有新应用都因相同的黑屏问题而失败。

如果我按下模拟器上的主屏幕按钮并启动应用程序,它将显示出来。但是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)中。没有办法,只能强迫戒烟。
2013年

1
是的,我强制退出,重新启动计算机,然后启动Xcode。另外,您可能想删除Xcode组织者(项目部分)中的“派生数据”
MCKapur 2013年

2
如果模拟器不适合您的屏幕,则您可能会看到带有白色背景的基本教程应用程序的底部。通过滚动,旋转或缩放窗口(命令+3),您可以找到答案。对于初学者来说,这可能并不明显,因此可以对某人有所帮助。
DiegoG

Answers:


90

令人惊讶的是,对我有用的是转到iOS Simulator菜单,然后按“重置内容和设置”。(在iOS 13中,其位于“硬件”下)


11
杰普,这对我有用!对于那些找不到该选项的人:启动模拟器,然后在菜单栏中选择(屏幕顶部)iOS-Simulator -> Reset Content and Settings
2013年

9
根本没有帮助我:((
模仿

1
@daylight感谢您的评论。我注意到,这个问题仅存在于一个特定项目中,并且因为创建该项目只是出于测试目的,所以我并不在乎。
模拟

1
@mimic尝试跑步xcrun simctl shutdown all
Rish

1
现在,此设置位于“设备”菜单栏下
izhang05

42

重置仿真器之前,请先转到项目的“项目导航器”屏幕,然后在常规->部署信息屏幕下检查主界面 属性是否已正确设置!

在此处输入图片说明


这对我有用!虽然我的问题出在设备上。启动图像后,它只是带有状态栏变黑。甚至没有到达appDelegate处的applicationDidLaunchWithOptions。
SleepNot

老实说,我对ios来说还很陌生,但是听起来您的应用在启动时会抛出异常。它在仿真器中能正常工作吗?您可以尝试通过模拟器运行它,并查看您的日志,这应该给您一些指示,以防万一
克里斯(Chris

不,现在可以了。没有输出任何异常,我什至尝试记录。您的回答为我解决了。
SleepNot

类似的问题在这里。在下一节“应用程序图标和启动图像”中,未设置“启动屏幕文件”。设置好之后,我又有了UI。
Kneup向导

我删除了我的主情节提要,然后重新添加了它,这将项目设置“ Main Interface”设置为空白。太感谢了!它消除了我的神秘感。
米歇尔

15

如果您使用的是SwiftUI

如果要从以前的Xcode 11版本进行更新,则对SceneDelegate willConnectTo session: options connectionOptions初始化有一些更改:

window现在,主要UIWindow(windowScene: windowScene)使用来初始化main。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
非常感谢您,因为这是一项相对较新的技术。找到这个答案有点挑战,这是我的解决方案的答案!
Yuliani Noriega

非常感谢,我尝试了一切。这不是一个显而易见的解决方案,以感谢您的分享。
纳洛夫

9

我是iOS应用程序开发的新手。我从一开始就在尝试开发iOS应用,而在运行一个非常基本的Hello World应用时,我也遇到了同样的问题,即在iOS模拟器中构建和运行该应用后,仅出现黑屏。在努力寻找问题的解决方案时,我无意中单击了iOS模拟器中的Window-> Scale-> 50%,它确实解决了我的问题。然后,我可以看到带有应用程序的主页,然后单击应用程序图标,我可以成功运行我的应用程序。应用程式版本:Xcode 5.1 iOS模拟器:7.1 OSX:10.9.3


6

原因可能是未设置正确的部署信息。(即,如果您的故事板未设置为主界面)


我终于意识到我在看LaunchScreen.storyboard 我应该什么时候工作Main.storyboard。一旦弄清楚了,屏幕上就会显示内容。感谢这里的指针
基因博

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项目中以编程方式构建UI,则可能需要添加一些代码来填充视图,因此您需要添加这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应用程序黑屏
Anton-Hexagons



0

我设法找到了解决办法。发现此博客文章的礼貌:

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

解决方案是按cmd + shift +(命令,shift,然后用逗号“,”)..加载一些用于发布或调试的选项。

将调试器从LLDB更改为GDB。这样可以解决此问题。


1
不建议使用GDB调试器,而Xcode 4.6是最后一个支持它的版本。 developer.apple.com/library/mac/#releasenotes/DeveloperTools/...
亚伦Brager

0

为了确保这是模拟器问题,请查看是否可以在不更改任何代码的情况下通过全新项目连接到模拟器。尝试使用标签栏模板。

如果您认为这是模拟器问题,请按iOS模拟器菜单。选择“重置内容和设置...”。按“重置”。

我看不到您的XIB以及您在Interface Builder中连接的@properties,但是也可能是您没有加载窗口,或者您的窗口没有加载视图控制器。


嗨,亚伦,谢谢您的回复。我尝试仅加载一个空白项目(选项卡栏和空应用程序)。它有同样的问题。使用LLDB调试器时,它每次都会失败。如果我将其切换到GDB,则可以正常工作。以下是您对我的答案的评论,该评论关于4.6之后不推荐使用的答案。我只是希望那个时候能起作用,因为这似乎是主要问题。
马特

0

我在使用Xcode时遇到了同样的问题...启动应用程序时出现黑屏,没有调试,然后单击会锁定Xcode。

我终于找到了问题...跟随模拟器无法连接到Xcode的线索,我看了看我的etc / hosts文件,发现几个月前,为了解决另一个问题,我编辑了主机文件以将localhost映射到我的主机固定IP而不是默认IP ...我的值:

10.0.1.17本地主机

这应该起作用,因为那是我的IP,但是将其更改回默认的IP固定Xcode ...

127.0.0.1本地主机

希望这可以帮助。


0

我一直在按照doug的建议(“重置内容和设置”)工作,但需要花费很多时间,而且确实很烦人……直到我最近发现完全偶然的另一种解决方案更快,而且到目前为止似乎也可以使用!只需在模拟器上按cmd + L或转到模拟器菜单“硬件->锁定”即可锁定屏幕,当您解锁屏幕时,该应用程序的运行就像什么都没有发生:)


0

我发生的事情是类的Type不是UIViewController,因为它没有附加到我的视图控制器的脚本。它是用于UITabController的.....我错误地迅速创建了错误的类类型..因此,请确保该类是否正确。.希望这对某人有所帮助。我很着急,犯了这个错误。


0

只需单击“模拟器”->“重置内容和设置”即可重置模拟器。


0

您还可以转到“硬件”->“重新启动”,然后选择“硬件”->“主页”,然后单击您的应用




0

我的黑色模拟器屏幕仅适用于iOS 11 sims。尝试重置,重新启动,重新安装并在我的计算机上创建一个全新的用户帐户后,我发现了以下解决方案:

defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferRendererHint 3

在此处找到此答案:安装Xcode 10 Beta后,Xcode 9 iOS模拟器变为黑屏



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

这种行为并不严格限于模拟器,但是由于大多数人只会在模拟器上运行Beta软件,因此它只会在这种情况下发生。它使我困惑了好一阵子,希望对您有所帮助。


0

当我在Xcode 11.1上进行项目时,遇到了这个问题。该黑屏问题可能发生在ViewController之间的任何演示中。

这个 答案帮助了我。因为模态演示随着iOS 13的改变而有所变化。 如果您在iOS 13之前没有遇到这个问题,请尝试在ViewController演示之前在您的ViewController中添加以下行;

viewController.modalPresentationStyle = .fullScreen

您的代码如下所示之后;

let vc = UIViewController()
vc.modalPresentationStyle = .fullScreen //or .overFullScreen for transparency
self.present(vc, animated: true, completion: nil)

0

我正在使用android studio开发flutter并运行模拟器,模拟器是黑暗的,我根据接受的答案重置了内容。但这并不能解决我的问题。我的CPU运行到某种程度的足够高,所以我重新启动了,但没有解决问题。我打开Xcode并运行我的本机iOS应用程序之一,模拟器照常重新打开。我关闭了Xcode并打开了Android Studio,然后再次开始开发flutter应用程序。


0

在此处输入图片说明

这就是我遇到这个问题的原因。

由于某些原因,未选中“是初始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
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.