Messaggio di errore "_BSMachError: (os / kern) capacità non valida (20)"


173

Si noti che questo messaggio di errore è di livello piuttosto basso, quindi si presenta per diversi motivi in ​​diversi scenari. Se hai uno scenario che non è menzionato in una delle risposte di seguito, ti preghiamo di considerare di aggiungere anche la tua situazione, quindi forse questa potrebbe essere una risposta centrale per varie situazioni che generano questo messaggio di errore.

Modifica il 10 novembre 2015 Inoltre, ho contrassegnato la mia risposta come risposta, ma era prima che chiunque altro avesse pubblicato. Immagino che nessuno dovrebbe davvero essere contrassegnato come risposta, perché come abbiamo visto di seguito ... questo errore non ha una sola risposta perché è di livello così basso.

sto correndo

  • Simulatore iOS 9.0
  • XCode 7.0

Tutto ha funzionato bene ieri.

Oggi, dopo un sacco di lavori sulle cose relative alla rotazione, ho iniziato a ricevere questo errore nell'output della mia console quando eseguo l'app nel simulatore e lo giro.

_BSMachError: (os / kern) capacità non valida (20)

_BSMachError: (os / kern) nome non valido (15)

Schermata per questo problema - Ho cancellato la mia cartella di build, - Ho pulito la cartella dei dati derivati, - Ho ripristinato il simulatore.

Stavo lavorando con

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Stavo anche controllando varie impostazioni di "Disegno" nell'Ispettore Attributi in IB.

Ho anche creato una categoria di utilità su UIView in cui ho creato una serie di metodi che creano CGRecte mi aiutano ad assegnare i frame alle viste.

Controller vista radice

Visualizza impostazioni controller controller


ricevo questo errore mentre lavoro su BLE
Nex Mishra il

1
Non riesco ancora a trovare una soluzione e la ottengo anche durante la rotazione. A volte ricevo anche un avviso di memoria poco dopo, anche se Xcode segnala che viene utilizzata solo una piccola quantità di memoria. Frustrante.
narco,

79
Meno male che hai redatto MyFoodTracker: P
Sam Soffes,

8
Perché MyFoodTracker è barrato con una linea rossa nello screenshot?
Marián Černý,

2
@LogicsaurusRex "Cosa significa?" non è davvero una domanda utile, ma "Ha bisogno di essere riparato?" è forse una domanda migliore (a cui vorrei la risposta). La mia app sembra funzionare bene ma mostra questo errore. Mi piacerebbe fissarlo e risolverlo, ma questa non è una piccola app e trovarla mi costerebbe tempo prezioso.
vrwim,

Risposte:


144

Basato su https://forums.developer.apple.com/thread/15683 :

Modifica " Localizzazione area di sviluppo nativa " in info.plistStati Uniti anziché en.

Aggiornato: quindi è possibile ripristinare queste modifiche.


3
Ha funzionato anche per me. Ho quindi ripristinato l'impostazione su "en" e l'errore sembra non tornare.
Skoua,

Ha funzionato per me come NUOVA istanza di questo errore. Ho pubblicato qui il post originale e ho riscontrato questo errore a causa di una delle caselle di controllo del disegno. Era scomparso da molto tempo, e ora ha ricominciato a spuntare per qualche altra ragione sconosciuta, e cambiarlo in realtà l'ha risolto ... HOLY COW è fantastico.
Logicsaurus Rex,

Il mio è impostato su ja, no en. Cosa dovrei fare? Impostarlo su Japan?
Nicolas Miari,

1
Questo ha funzionato. Tuttavia è tornato di nuovo su en e nessun errore 😒
Neo Ighodaro

30
Non mi piacciono davvero le risposte come questa. Perché non spiega nulla. È un bug su XCode? Il nostro posizionamento del codice è sbagliato? O cosa?
GeneCode

66

Mi sono anche imbattuto in _BSMachErrorerrori della console durante il collegamento diretto all'app Impostazioni su iOS 9 da UIAlertControllerun'azione. A dispatch_asyncrisolto il mio problema:

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];

2
Ciò ha rimosso l'errore di console per me, ma il bug di blocco principale che stavo cercando di correggere che si verifica allo stesso tempo non è stato aiutato
Jason

posso probabilmente generalizzare questa risposta, ho ottenuto il mio mentre eseguivo segue in un controller uialert (quasi lo stesso codice). Probabilmente ha a che fare con il modo in cui il controller di allarme si fa fuori dal quadro. Risolto il mio problema anche con dispatch_async.
user3802077

stesso problema qui - in particolare questo si verifica nel simulatore 9.2 quando si accede alle impostazioni di sistema dalla mia app tramite il gestore per UIAlertAction da UIAlertController. Quando riscrivo il codice su UIAlertController invece che sul vecchio UIAlertView, il sim lanciava gli stessi errori _BSMach (15,20). Non si è verificato sul dispositivo reale (ipad). Dispatch_async ha reso felice il simulatore. È sicuramente correlato a UIAlertController.
Mike Kogan,

lo stesso problema ha sollevato di nuovo la testa, questa volta non nella sim ma su un ipad e NON sulla sim. questa volta è stato un po 'di codice a rendere una vista in un contesto pdf che ha causato i macherror. dispatch_async di nuovo risolto. Ho anche verificato che quando questo codice veniva eseguito senza essere richiamato dal gestore di completamento di un UIAlertAction in un UIAlertController questo errore non si verifica. in entrambi i miei casi l'errore era visibile solo nella console di debug XCode e l'app ha continuato a funzionare correttamente. Nessuna delle idee di localizzazione suggerite su questo thread ha avuto alcun impatto su entrambi gli scenari.
Mike Kogan,

@Jason Ho avuto lo stesso problema, ha rimosso il messaggio di errore della console, ma si blocca ancora. Sei riuscito a risolverlo in qualche modo?
bp14,

32

Ok, non l'ho ancora bloccato completamente, ma questo ti porterà il 99% del percorso. Sto usando un controllo di mappa di terze parti di ESRI e qualcosa al riguardo non piace una di queste impostazioni di disegno nell'Inspector degli attributi. Non ho provato ciascuna impostazione singolarmente per vedere quale sia l'impostazione, ma quando le ho disattivate tutte (nella casella rossa), tutto ha funzionato come un fascino e ho smesso di ottenere il messaggio di errore sopra nella console. Se e quando avrò il tempo di inchiodarlo alla precisa impostazione o combinazione di impostazioni, aggiornerò la risposta.

inserisci qui la descrizione dell'immagine


Penso che la tua risposta sia abbastanza buona. Tuttavia, rimuoverei il testo in grassetto in alto. Ultimamente ci sono stati molti voti anonimi di risposte, dubito che sia qualcosa di personale.
Jason D,

cosa succede se devo usare uno di questi?
Zaraki,

15

È pazzesco, ma per me la soluzione è stata quella di rimuovere tutti i punti di interruzione nel file in cui si è verificato l'errore.

Per quanto riguarda la causa? Penso di aver accidentalmente premuto un tasto di scelta rapida per creare un punto di interruzione nella riga corrente. Perché non era intenzionale, ho premuto di nuovo lo stesso tasto di scelta rapida per eliminarlo.

Oh mio caro XCode ...


Questo ha funzionato per me. Un indizio che questo era il problema era che Xcode si sarebbe spezzato su linee che non avevano breakpoint. Quindi, su una riga diversa ho ottenuto il _BSMachErrors sopra.
Didge

12

Stavo ottenendo gli stessi errori ...

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)

Stavo chiamando openURL () da a UIAlertAction

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    UIApplication.shared.openURL(url)
 }

Il rinvio dell'esecuzione del blocco fino a quando il successivo ciclo di esecuzione lo ha risolto ...

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    OperationQueue.main.addOperation {UIApplication.shared.openURL(url)}
 }

9

Stavo ottenendo quanto segue durante la fornitura di nuovi dati:

> _BSMachError: (os/kern) invalid capability (20)
> _BSMachError: (os/kern) invalid name (15)

L'errore si è verificato quando è stato utilizzato un pulsante per fornire nuovi dati. È NSTimerstato utilizzato per aggiornare e aggiornare i dati al ritorno da performSegueWithIdentifierun'azione. Il timer veniva attivato e quindi invalidato immediatamente dopo l'uso al momento del ritorno. Si MSMachErrorfermarono quando il timer fu rimosso e - (void)viewWillAppear:(BOOL)animatede (void)viewDidAppear:(BOOL)animatedfurono impiegati per svolgere la stessa funzione. Questo errore è iniziato con l'aggiornamento a Xcode 7.


6

Ho risolto questo problema modificando il valore della Localization native development regionchiave in United Kingdom [o qualsiasi regione specifica] dal suo valore predefinito enpresente nel info.plistprogetto.

  1. Selezionare Project Navigator
  2. Individua il info.plistfile presente nella cartella ProjectNameTests.
  3. Modificare il valore Localization native development region keyin una regione specifica per es. Regno Unito

Passaggio 1 e 2

Passaggio 3


Sì, questa correzione sembra pazza, ma funziona. Per me l'app ha funzionato quando Xcode 7.3.1 è stato distribuito su un iPod touch di quinta generazione collegato. Ma quando lo ho distribuito per la prima volta da Xcode a un iPad Air legato, ho riscontrato questo BSMachError. Il cambio di regione per far United Statesscomparire l'errore. Ancora un altro inspiegabile mistero di Xcode.
Basil Bourque,

4

Ho anche riscontrato lo stesso problema in una NSOperation in esecuzione su un thread in background e continuavo a ricevere questo errore perché un UIAlertController stava ancora rimuovendo se stesso mentre un'altra transazione UI stava tentando di avvenire. La modifica del mio codice per risolvere questo problema.

defer { 
    dispatch_async( dispatch_get_main_queue(),{
        completion()
    }) 
}

Molte persone non conoscono il differimento: consente di completare l'ambito corrente e quindi viene eseguito dopo. Kinda pulito.


4

Ho riscontrato lo stesso errore capacità non valida (20) e nome non valido (15). Ho provato le soluzioni citate da altri come:

  • Localizzazione della regione di sviluppo nativa chiave in info.plist
  • Modifica delle impostazioni del disegno nella finestra di ispezione degli attributi
  • Anche il dizionario delle eccezioni ATS modificato in info.plist

Ma nessuna di queste soluzioni ha risolto il mio problema. In realtà, stavo provando a condividere alcuni documenti, ma la generazione di documenti avrebbe richiesto del tempo e volevo mostrare un UIActivityIndicatorView all'utente fino a quando il documento non si carica.

La soluzione per il mio errore era:

//Create a alertView add UIActivityIndicatorView to it and present it in ViewController

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
//Call method 1 todo background process like getting data

dispatch_sync(dispatch_get_main_queue(), ^{
    //Call method 2 to update the UI
    [alert dismissViewControllerAnimated:YES completion:^(void){
        //My mistake was: I was calling method 2 over here to update the UI
        return;
    }];
});
});

Eccellente, ha funzionato per me! È importante sapere che l'aggiornamento dell'interfaccia utente deve essere eseguito in dispatch_get_main_queue ()
MkaysWork,

3

La modifica della stringa di localizzazione da en a United States ha risolto questo problema per me. Tuttavia, assicurati di pulire dopo aver modificato Info.plist. Ho notato che gli aggiornamenti non funzionano quando si crea solo dopo aver apportato modifiche plist.inserisci qui la descrizione dell'immagine



2

Potrei riprodurre l'errore per me: se si apportano modifiche a una delle viste all'interno di una vista che sto già chiudendo (popViewControllerAnimated) ricevo l'errore.

Sto avendo un'azione UINavigationButton che rende un'attività asincrona (POSTRequest). Prima di eseguire questa richiesta ho impostato la visualizzazione personalizzata di quel pulsante su un indicatore di avanzamento. Quando torno dalla chiamata asincrona invio al thread principale e reimposta la visualizzazione personalizzata di quel pulsante. Successivamente, chiudo la vista (popViewControllerAnimated).

Questo è il codice CORRETTO in cui l'errore non viene visualizzato:

/* right way, working without BSMachError */
@IBAction func sendRequest(sender: UIBarButtonItem) {
    /* setting the progress indicator as customView of the self.saveButton */
    self.showActivityIndicatory(self.saveButton)
    /* asynchronous REST call */
    UserDataManager.sharedInstance.requestFeedback(request, onCompletion: { error in
        dispatch_async(dispatch_get_main_queue(),{
        /* resetting the saveButton again to default by setting customView to nil */
        self.saveButton.customView = nil
        /* closing the view */
        self.navigationController!.popViewControllerAnimated(true)
      })
    })
}

Ciò che ha causato l'errore è stata la commutazione delle linee: chiusura della vista e impostazione di customView su zero:

/* WRONG way, causing BSMachError */
@IBAction func sendRequest(sender: UIBarButtonItem) {
    /* setting the progress indicator as customView of the self.saveButton */
    self.showActivityIndicatory(self.saveButton)
    /* asynchronous REST call */
    UserDataManager.sharedInstance.requestFeedback(request, onCompletion: { error in
        dispatch_async(dispatch_get_main_queue(),{
        /* closing the view */
        self.navigationController!.popViewControllerAnimated(true)
        /* resetting the saveButton again to default by setting customView to nil */
        self.saveButton.customView = nil
      })
    })
}

2

Questo errore è iniziato dopo che ho aggiunto alcuni osservatori:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)

Il problema è scomparso quando ho specificato il nome della classe anziché self:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.keyboardWillHideOrShow(_:)), name:UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyClass.keyboardWillHideOrShow(_:)), name:UIKeyboardWillHideNotification, object: nil)

2

Ho avuto lo stesso errore e nessuna delle precedenti è stata applicata al mio problema. Il problema è apparso quando ho registrato il mio controller di visualizzazione come osservatore di una modifica dell'orientamento del dispositivo, quindi le viste potevano essere ridimensionate e i disegni nella vista potevano essere fatti in base alle nuove dimensioni della vista.

Avevo uno sbocco di un viewGraph che era una sottoclasse di UIView in cui ho disegnato alcuni elementi grafici. In modalità orizzontale la dimensione del viewGraph è più grande che in modalità verticale. Pertanto, quando il dispositivo cambia orientamento, speedGraph deve essere ridisegnato.

Il problema era che ho aggiunto diverse visualizzazioni secondarie alla visualizzazione speedGraph, che conteneva grafica. Queste visualizzazioni secondarie dovevano essere disposte nuovamente nella visualizzazione speedGraph e quindi ridisegnate. Dopo che il dispositivo ha cambiato orientamento, ho chiamato viewDidAppear di nuovo per rendere la visualizzazione speedGraph e tutte le sue sottoview da ridisegnare e ridisegnare. Chiamare setNeedsDisplay per speedGraph non funziona con i cambiamenti di orientamento e le viste secondarie in una vista.

Che cosa ho fatto di sbagliato che ha fatto apparire l'errore. In viewDidAppear chiamo un metodo che esegue alcuni calcoli e aggiunge le visualizzazioni secondarie alla visualizzazione speedGraph. Il problema era che queste visualizzazioni secondarie venivano create nel metodo e aggiunte alla visualizzazione speedGraph in questo metodo. Dopo aver abbandonato il metodo, i riferimenti a queste visualizzazioni secondarie vengono, ovviamente, eliminati, ma le visualizzazioni secondarie nella visualizzazione speedGraph rimangono, poiché vengono aggiunte. Quando il dispositivo cambia, le visualizzazioni secondarie vengono nuovamente create e aggiunte alla visualizzazione speedGraph, che ha già queste visualizzazioni secondarie, ma non è più possibile trovare i riferimenti a tali visualizzazioni secondarie. La serie di sottoview di speedGraph view diventa sempre più lunga con (credo) sottoview penzolanti.

Ho risolto il problema definendo le viste secondarie che verranno aggiunte alla vista speedGraph come proprietà di classe e quindi fare ciò che era necessario fare con le viste all'interno di questo metodo. Con questa modifica il problema era sparito.


2

Dato che possiamo pubblicare tutte le situazioni che restituiscono lo stesso errore qui, mi sono sentito libero di pubblicare il mio :). Ho ricevuto l'errore quando ho modificato le impostazioni sulla privacy in background. La mia app ha aperto l'app delle impostazioni in modo che l'utente possa concederle l'autorizzazione al suo fotolibrare, quando l'interruttore di autorizzazione è impostato, l'app si arresta in modo anomalo con l'errore misurato:

_BSMachError: (os/kern) invalid capability (20)
_BSMachError: (os/kern) invalid name (15)

Questo sembra essere un riavvio forzato della tua app da parte del sistema operativo, poiché l'utente ha modificato ciò a cui la tua app può accedere. Quindi nel mio caso è un'azione del sistema operativo che ha causato l'errore.


Ho preso anche questo. Quindi questo non è in realtà un bug. Quando l'app non è connessa a Xcode, non accadrà nulla di terrificante. Grazie fratello, potresti semplicemente risparmiare ore del mio tempo di debug.
Yuji

1

Ho ricevuto lo stesso messaggio di errore, perché assignuna objectproprietà mi piace @property (assign, nonatomic) NSNumber *aVariable;, risolta cambiando in strong.


1

Per quello che vale - sembra che molte situazioni generino questo errore. Nel mio caso, avevo inviato un avviso quando l'utente stava respingendo un modulo di inserimento dati e i dati erano nel modulo. Sono stato in grado di eliminare l'errore dimettendo in modo programmatico il primo risponditore da tutti i campi applicabili prima di svolgere il controller di visualizzazione.


Questo è il problema che sto riscontrando anch'io, ma poiché il controller di visualizzazione viene ignorato dal pulsante Indietro dalla barra di navigazione del controller di navigazione, prepareForSegue()non viene chiamato e non so dove dimettermi dal primo risponditore.
TimSim,

1

Ho visto questo quando ho premuto il Homepulsante mentre UIAlertControllerera visualizzato un, che è stato respinto quando ho riavviato l'app. Ho aggiunto il codice per chiudere il UIAlertControllernel appDelegate:

func applicationWillResignActive(application: UIApplication) {
  window?.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
}

e il messaggio di errore è scomparso.


1

Ho riscontrato questo errore durante il licenziamento di un popover tramite delegato. Nel delegateMethod ho attivato alcuni elementi della GUI. Mettendo la GUI-Stuff nel completamento Blocco di dismissViewControllerAnimated risolto.

[myPopoverView dismissViewControllerAnimated:YES completion:^{ //GUI-Stuff}];

1

Sono un principiante, quindi prendi questo per quello che vale.

Ciò che ha risolto questo problema per me è stato cambiare le metriche simulate> Dimensioni> in iPad a schermo intero. Tutti i miei punti di vista TRANNE quello che ha generato questo errore, abbiamo impostato l'iPad a schermo intero. Quando l'ho cambiato, l'errore è andato via ...


1

Il motivo per cui alcuni sviluppatori non ottengono l'errore dopo essere passati da "Unites States" a "en" (o) altra regione, è che c'è una discrepanza tra le visualizzazioni "Elenco proprietà" e "Codice sorgente". Probabilmente è un bug Xcode. Ogni volta che c'è una discrepanza tra queste due viste genererà questo errore, qualunque esso sia "en" o "inglese". Se sei passato a "en" o "United States" affinché entrambe le viste siano uguali, il problema verrà risolto.


1

Ho ricevuto questo errore da:

var promptsArr =  StartRegAlerts() //Instance of the class

eccetera

func textFieldDidBeginEditing(textField: UITextField) {     
    switch textField.tag {
            case 0:
                alert(promptsArr.prompts["Name"]!)
            case 1:
                alert(promptsArr.prompts["CellPhone"]!)
            case 4:
                alert2(promptsArr.prompts["NUMBERCORRECT"]!)
                //alert(promptsArr.prompts["Wait4Pin"]!)

            default: break
            }
It only occurred for case 0 but not the other cases:
As a work around for now I commented out case 0 and that stopped the error.
I then changed  calling promptsArr.prompts by:

creando un nuovo prompt del dizionario e:

 override func viewDidAppear(animated: Bool) {
             prompt = promptsArr.prompts //
      }

e poi ho usato il prompt nelle mie chiamate di avviso. Ciò ha risolto il problema.

Quindi sembra che si tratti di un problema di temporizzazione.


Temo che abbia funzionato solo per un po 'e poi è riapparso, quindi commentare il caso 1 e poi chiamare quell'allerta sembra aver risolto il problema.
Jeremy,

0

con Xcode 8.1 e iOs 10 ho anche affrontato

_BSMachError: (os / kern) capacità non valida (20)

_BSMachError: (os / kern) nome non valido (15)

cercando di sostituire UiTraiCollection var per modificare in fase di esecuzione le classi di dimensioni dell'iPad in modo da avere due diversi layout di interfaccia in Portraid e Landscape. Ha funzionato senza alcun crash ma ha generato i nostri errori.

Questo era il codice "maliciuos":

override public var traitCollection: UITraitCollection {
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad && UIDevice.currentDevice().orientation.isPortrait.boolValue {
        return UITraitCollection(traitsFromCollections:[UITraitCollection(horizontalSizeClass: .Compact), UITraitCollection(verticalSizeClass: .Regular)])
    }
    return super.traitCollection
}

Gli errori sono andati usando override func viewWillTransitioncome alternativa per rilevare la rotazione dell'interfaccia.

Spero che questo sia utile a qualcuno


0

Nel mio caso la causa dell'errore era dovuta al ridimensionamento. Costruito in IB. Tutto ciò che può cambiare la dimensione di un campo di testo o simile, ad esempio cambiando la lunghezza della linea, può portare a questo errore, credo. Nel mio caso, ho dovuto semplicemente regolare le dimensioni del campo di testo per coprire tutte le possibilità, in modo che non fosse necessario ridimensionare la casella e entrare in conflitto con qualcos'altro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.