XcodeからiOSシミュレーターを起動し、黒い画面が表示された後、Xcodeがハングし、タスクを停止できません


83

iOSシミュレーターで基本的なiPhoneアプリケーションを実行するのに問題があります(スタンフォード大学のiTunes CS193pの講義を行っている間)。

私はしばらくの間(GoogleとSOの両方で)探していましたが、今のところ解決策を見つけることができません。多くの同様のバグがありますが、解決策はこれを修正していないようです。

Xcodeで「実行」をクリックします。コンパイルとビルドが正常に行われ、iOSシミュレーターが起動しますが、アプリをロードすることはできません。上部のステータスバーのみ。黒い画面で。

私は非常に基本的なコード(講義に続いて)を書いただけで、この問題を乗り越えることはできません。

さらに混乱させるために、私は(UIWebView)これらの講義の前にWebラッパーを作成しましたが、これは問題なく機能します。しかし、コードにはほとんど違いがありません。私が最初から作成したすべての新しいアプリはすべて、同じ黒い画面の問題で失敗します。

シミュレーターのホームボタンを押してアプリを起動すると、表示されます。しかし、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

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 2013

2
シミュレーターが画面に合わない場合は、背景が白の基本的なチュートリアルアプリの下部が表示されている可能性があります。ウィンドウをスクロール、回転、または拡大縮小することで(command + 3)、見つけることができます。これは初心者には明らかではないかもしれないので、誰かを助けるかもしれません。
DiegoG 2015年

回答:


90

驚いたことに、私にとってうまくいったのは、iOSシミュレーターのメニューに行き、「コンテンツと設定のリセット」を押すことでした。(iOS 13では、ハードウェアの下にあります)


11
うん、それは私のためにトリックをしました!そのオプションを見つけることができなかった人のために:シミュレーターを起動して、メニューバー(画面の上部)で選択しますiOS-Simulator -> Reset Content and Settings
ティモ

9
まったく助けになりませんでした:((
2016

1
@daylightコメントありがとうございます。この問題は特定の1つのプロジェクトにのみ存在し、このプロジェクトはテスト目的でのみ作成されているため、あまり気にしません。
2016

1
@mimic try runningxcrun simctl shutdown all
Rish

1
この設定は現在、「デバイス」メニューバーの下にあります
izhang05

42

エミュレータをリセットする前に、まずプロジェクトの「プロジェクトナビゲータ」画面に移動し、「一般」 ->「デポイメント情報」画面で、メインインターフェイスの プロパティが正しく設定されていることを確認してください。

ここに画像の説明を入力してください


これは私のために働いた!私の問題はデバイスにありましたが。起動画像の後、ステータスバーで黒くなります。appDelegateでapplicationDidLaunchWithOptionsに到達していません。
sleepNot 2014年

正直なところ、iOSはかなり新しいですが、アプリが起動時に例外をスローしているようです。エミュレーターで正しく機能しましたか?エミュレーターを介して実行してみて、ログを確認できます。これにより、例外が発生した場合の例外が
Chris

いいえ、今は大丈夫です。例外を出力していなかったので、ログに記録してみました。あなたの答えは私のためにそれを解決しました。
sleepNot 2014年

ここで同様の問題。次のセクション「アプリアイコンと起動画像」では、「起動画面ファイル」が設定されていませんでした。設定すると、UIが再び表示されます。
ウィザードオブニープ2015

メインストーリーボードを削除して再度追加したため、プロジェクト設定の「メインインターフェイス」が空白になりました。どうもありがとう!それは私の謎を直しました。
ミシェル

15

SwiftUIを使用している場合

以前のバージョンのXcode11から更新する場合、SceneDelegate willConnectTo session: options connectionOptions初期化にいくつかの変更があります。

メインwindowUIWindow(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シミュレーターでアプリをビルドして実行した後、黒い空白の画面しか表示されないという同じ問題に直面しました。どういうわけか、問題の解決策を見つけるのに苦労しているときに、iOSシミュレーターで誤って[ウィンドウ]-> [スケール]-> [50%]をクリックしましたが、問題は解決しました。その後、アプリのホームページが表示され、アプリアイコンをクリックすると、アプリを正常に実行できました。アプリのバージョン:Xcode 5.1 iOSシミュレーター: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

もう1つの解決策は、Objective CプロジェクトでプログラムでUIを構築している場合、ビューを拡張するためにコードを追加する必要がある場合があるため、ウィンドウのインターフェイスがコードと相互作用するようにこれらの3行を追加する必要があります(外側の2は実際にコードと対話しており、もう1つは画面を白に変更するため、機能することがわかります)。

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

ストーリーボードのエントリポイントを失う必要がある場合、または単にエントリポイントを変更したい場合は、InterfaceBuilderでこれを指定できます。新しいエントリポイントを設定するには、最初にどの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 +、(コマンド、シフト、コンマ "、")を押すことです。これにより、リリースまたはデバッグ用のいくつかのオプションが読み込まれます。

デバッガーをLLDBからGDBに変更します。これで問題が修正されます。


1
GDBデバッガーは非推奨であり、Xcode4.6はそれをサポートする最後のバージョンです。 developer.apple.com/library/mac/#releasenotes/DeveloperTools/...
アーロンBrager

0

シミュレーターの問題であることを確認するには、コードを変更せずに、まったく新しいプロジェクトでシミュレーターに接続できるかどうかを確認してください。タブバーテンプレートを試してください。

シミュレーターの問題だと思われる場合は、iOSシミュレーターメニューを押してください。「コンテンツと設定をリセット...」を選択します。「リセット」を押します。

XIBとInterfaceBuilderで接続した@propertiesが表示されませんが、ウィンドウが読み込まれていないか、ウィンドウがViewControllerを読み込んでいない可能性があります。


こんにちはアーロン、応答をありがとう。空のプロジェクト(タブバーと空のアプリケーション)をロードしてみました。同じ問題があります。LLDBデバッガーを使用すると、毎回失敗します。GDBに切り替えると、正常に動作します。4.6以降で非推奨になったという私の回答について、以下のコメントをご覧ください。それが主な問題のように思われるので、その時が来たら何かがうまくいくことを願っています。
マット

0

Xcodeでも同じ問題が発生しました...アプリの起動時に黒い画面が表示され、デバッグを行わずにクリックするとXcodeがロックされます。

私はついに問題を見つけました...シミュレータがXcodeに接続できなかったというリードに続いて、etc / hostsファイルを調べたところ、数か月前に別の問題を解決するためにホストファイルを編集してローカルホストを自分のデフォルトの代わりに固定IP ...私の値:

10.0.1.17ローカルホスト

これは私のIPなので機能するはずですが、デフォルトのIP固定Xcodeに戻すと...

127.0.0.1ローカルホスト

お役に立てれば。


0

私はダグが提案すること(「コンテンツと設定のリセット」)を実行していましたが、これは機能しますが、時間がかかり、本当に迷惑です...最近、完全に偶然の別の解決策を見つけるまで、はるかに高速で、これまでも機能しているようです!シミュレーターでcmd + Lを押すか、シミュレーターメニューの[ハードウェア->ロック]に移動して画面をロックします。画面のロックを解除すると、アプリは何も起こらなかったように動作します:)


0

私に起こったことは、クラスのタイプが、ビューコントローラーにアタッチされたスクリプトのUIViewControllerではなかったことです。それはUITabController用でした.....間違ったタイプのクラスを誤ってすばやく作成してしまいました....正しいタイプかどうかクラスを確認してください..これが誰かに役立つことを願っています。私は急いでいて、この間違いを犯しました。


0

[シミュレータ]-> [コンテンツと設定のリセット]をクリックして、シミュレータをリセットするだけです。


0

[ハードウェア]-> [再起動]、[ハードウェア]-> [ホーム]の順に移動して、アプリをクリックすることもできます。


0

Initial ViewControllerが設定されていることを確認してください



0

iOS11シム専用の黒いシミュレーター画面がありました。リセット、再起動、再インストールを試みて、自分のマシンに新しいユーザーアカウントを作成した後、この解決策を見つけました。

defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferRendererHint 3

ここでこの回答にあります:Xcode10ベータ版をインストールした後にXcode9iOSシミュレーターが黒い画面になります


0

すべてのビューのすべての制約を確認し、完全なストーリーボードを確認してください。通常、これはそのために発生します。

よろしく、アロラ


0

最近Xcode11ベータ3にアップデートして、古いSwiftUIプロジェクトを実行しようとした場合、ビューがロードされるSceneDelegateにいくつかの変更を加える必要があります。そうしないと、iOS13ベータ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でプロジェクトを実行すると、その問題が発生しました。その黒い画面の問題は、ViewController間のプレゼンテーションで発生する可能性があります。

その 答えは私を助けました。モーダルプレゼンテーションは iOS13で変更されたため、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 studioを使用してフラッターを開発し、シミュレーターを実行していましたが、シミュレーターが暗く、受け入れられた回答に従ってコンテンツをリセットしました。しかし、それは私の問題を解決しませんでした。CPUが十分に高い速度で実行されていたため、再起動しましたが、問題は修正されませんでした。Xcodeを開いて、ネイティブiOSアプリの1つを実行すると、シミュレーターが通常どおり再び開きました。Xcodeを閉じてAndroidStudioを開き、フラッターアプリの開発を再開しました。


0

ここに画像の説明を入力してください

これがこの問題を抱えている私の理由でした。

何らかの理由で、「Is Initial View Controller」(メインのView Controllerの場合)がオフになっていて、ロード時に黒い画面が表示されていました。

これが誰かを助けてくれることを願っています!


0

私はiOS13で次のようにウィンドウの背景色を設定してこの質問を解決しました:

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
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.