151 votes

Xcode bloqué sur l'indexation

Un projet sur lequel je travaille depuis 2 mois a cessé de fonctionner sans raison parce que Xcode est resté bloqué sur "Indexing". Je ne peux plus construire le projet. Si j'essaie de le construire, Xcode se bloque et je dois forcer la sortie. Cela se produit uniquement avec ce projet.

J'ai essayé de nettoyer toutes les données dérivées mais ça n'a pas aidé.

J'utilise Xcode 4.5.2.

Des idées ?

0voto

David Kyslenko Points 136

J'ai essayé toutes les choses énumérées, l'indexation est toujours gelée. Ceci m'a aidé : Si votre indexation est gelée, et que vous avez un ou plusieurs processus swift qui consomment 99% de votre cpu - il suffit de tuer cette ou ces tâches swift, d'attendre un peu, et la progression devrait se faire. Cela peut se répéter, jusqu'à ce qu'il atteigne la fin, dans mon cas, j'ai tué le processus 7 fois, mais à la fin, l'indexation était terminée !

0voto

J'ai eu ce problème sur un projet SwiftUI. Il s'est avéré que l'une de mes vues SwiftUI avait une variable incorrectement déclarée. J'avais :

@EnvironmentObject var roomViewModel

où j'en avais besoin :

@EnvironmentObject var roomViewModel: RoomViewModel

Il n'y avait pas d'erreur de compilation, juste une indexation sans fin. Après avoir corrigé l'erreur, le projet s'est construit rapidement.

0voto

Mohammed Hasan Points 71

Oui, chaque fois que j'essaie d'ouvrir mon Main.Storyboard, Xcode se fige soudainement. Cela ne se produisait qu'avec un seul de mes projets, puis cela s'est produit pour tous mes projets sur Xcode.

J'ai essayé ce qui suit avec pas de chance :

  1. Supprimez Xcode et réinstallez-le.

  2. Le facteur a réinitialisé mon mac.

  3. Créez un nouveau projet et déplacez les dossiers vers le nouveau projet. Cela n'a pas non plus fonctionné pour moi.

Solution [Dans mon cas], ce qui, je crois, arrive à la plupart d'entre vous.

J'ai remarqué que le processus nommé "IBAgent-iOS" consomme la plupart des ressources de mon processeur. Chaque fois que je veux ouvrir le storyboard, il consomme jusqu'à 97 % des ressources du processeur !

Je dois donc aller dans le moniteur d'activité > Rechercher le nom de ce processus. "IBAgent-iOS" (Apparaît principalement en haut) > cliquez dessus et forcez la sortie.

0voto

user1820796 Points 16

Je sais que c'est une question assez ancienne, mais le problème existe toujours. Voici ce que j'ai trouvé en faisant cette expérience.

Dans un NavigationLink, je donnais un paramètre à une vue qui n'en prenait pas. Cela a bloqué la construction et l'indexation, mais n'a pas provoqué d'erreur de compilation. C'est que PAS cool.

Voici comment je l'ai reproduit. Dans une vue de premier niveau qui contient une vue de navigation, j'avais le bloc suivant dans une liste dans une pile. La hiérarchie de ma vue de premier niveau était donc quelque chose comme (pseudocode) :

Body {
    VStack {
        [CustomViewForPageHeader]
        List {
            (the code block pasted below)
            (some other things)
        }
    }
}

La partie offensante était la suivante :

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                CompletedTaskApprovalView( update: update )
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

Me rappelant que j'avais supprimé le paramètre lors de la restructuration de certaines données, j'ai été consterné que le compilateur n'ait pas vomi sur ce point. J'ai commenté toute la ligne, de sorte qu'elle ressemblait à :

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                //CompletedTaskApprovalView( update: update )
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

Et voilà, ça a marché comme sur des roulettes.

Non-commenté et a supprimé le paramètre...

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                CompletedTaskApprovalView()
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

whammo, redux, encore une fois, ça a bien marché.

J'ai tout dépouillé de la CompletedTaskApprovalView pendant que je retravaillais un peu le modèle de données, donc ça ressemble à ça (littéralement juste un emplacement) :

import SwiftUI

struct CompletedTaskApprovalView: View {

    var body: some View {
        Text("Approve chores")
            .font(.title)
    }
}

Le compilateur n'aurait jamais dû me laisser essayer de lui donner un paramètre. J'ai pensé que c'était bizarre, et je me suis demandé si le fichier de code de ma vue n'avait pas une sorte de corruption funky non visible. Dans le fichier de la vue de niveau supérieur, j'ai ajouté une nouvelle vue (SomeTestView) en bas...

struct SomeTestView: View {
    var body: some View {
        Text("this is just a thing")
    }
}

et l'a ajouté à ma boucle..

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                //CompletedTaskApprovalView()
                                SomeTestView()
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

Cela fonctionne bien.

Ajout d'un paramètre à l'instanciation ci-dessus (mais n'a pas fait PAS ajouter un à la définition de structure de la vue)... et il s'est comporté de la même manière que le problème original - il a bloqué la construction et l'indexation, apparemment sans fin, et n'a jamais vomi l'erreur de paramètre que j'attendais.

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                //CompletedTaskApprovalView()
                                SomeTestView( fish: "sandwich" )
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

Donc c'est bizarre et 100% décevant. Je me garde bien de faire un diagnostic plus poussé, mais... si quelqu'un rencontre encore ce problème, essayez-le ; vérifiez soigneusement vos paramètres et déclarations, et vous trouverez peut-être un problème similaire.

Bizarre. Frustrant. Confus. Agaçante.

-2voto

user6358800 Points 1

Command-Option-Shift-K pour nettoyer les dossiers de construction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X