wake-up-neo.com

Fehlermeldung '_BSMachError: (os/kern) ungültige Fähigkeit (20)'

Bitte beachten Sie, dass es sich bei dieser Fehlermeldung um einen niedrigen Pegel handelt, der in verschiedenen Szenarien aus verschiedenen Gründen auftritt. Wenn Sie ein Szenario haben, das in einer der folgenden Antworten nicht erwähnt wird, ziehen Sie bitte in Betracht, Ihre Situation hinzuzufügen. Vielleicht könnte dies eine zentrale Antwort auf verschiedene Situationen sein, in denen diese Fehlermeldung angezeigt wird.

Edit 10. November 2015 Beachten Sie auch, ich habe meine eigene Antwort als Antwort markiert, aber das war, bevor noch jemand geschrieben hatte. Ich vermute, keiner sollte wirklich als Antwort markiert werden, denn wie wir jetzt unten gesehen haben, hat dieser Fehler keine einzige Antwort, weil er so niedrig ist.

Ich renne

  • iOS 9.0 Simulator
  • XCode 7.0

Alles hat gestern gut funktioniert.

Heute, nach einer Reihe von Arbeiten zum Thema Rotation, bekam ich diesen Fehler in meiner Konsolenausgabe, wenn ich die App im Simulator ausführe und sie drehe.

_BSMachError: (os/kern) ungültige Funktion (20)

_BSMachError: (os/kern) ungültiger Name (15)

 Screenshot for this issue - Ich habe meinen Build-Ordner gelöscht. - Ich habe den Ordner für abgeleitete Daten gesäubert. - Ich habe den Simulator zurückgesetzt.

Ich habe mit gearbeitet 

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Ich habe auch verschiedene Einstellungen für 'Zeichnen' im Eigenschafteninspektor in IB geprüft.

Ich habe auch eine Hilfskategorie in UIView erstellt, in der ich eine Reihe von Methoden erstellt habe, die CGRects erstellen und mir dabei helfen, den Ansichten Frames zuzuweisen.

 Root View Controller

 Root View Controller Settings

170
Logicsaurus Rex

Ok, ich habe es nicht vollständig festgehalten, aber das bringt Sie zu 99% dorthin ... Ich benutze ein Kartensteuerelement eines Drittanbieters von ESRI, und etwas davon mag eine dieser Zeichnungen nicht Einstellungen im Bereich "Attribute". Ich habe nicht jede Einstellung einzeln versucht, um zu sehen, um welche Einstellung es sich handelt, aber als ich sie alle abschaltete (in der roten Box), funktionierte alles wie ein Zauber und ich beendete die Fehlermeldung oben in der Konsole. Wenn und wenn ich Zeit habe, die genaue Einstellung oder Kombination von Einstellungen festzulegen, werde ich die Antwort aktualisieren.

 enter image description here

32
Logicsaurus Rex

Basierend auf der https://forums.developer.Apple.com/thread/15683

Ändern Sie "Localization native development region" in info.plist in United States anstelle von en.

Aktualisiert: Dann können Sie diese Änderungen rückgängig machen.

143
blacharnia

Ich bin auch auf die _BSMachError-Konsolenfehler gestoßen, als ich unter iOS 9 von einer UIAlertController-Aktion tief in die Einstellungen-App verlinkt wurde. Ein dispatch_async hat mein Problem gelöst:

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

Es ist verrückt, aber für mich bestand die Lösung darin, alle Haltepunkte in der Datei zu entfernen, an denen der Fehler auftrat.

Wie für die Ursache? Ich glaube, ich habe aus Versehen eine Tastenkombination gedrückt, um einen Haltepunkt in der aktuellen Zeile zu erstellen. Da dies nicht beabsichtigt war, drückte ich erneut dieselbe Tastenkombination, um es zu löschen.

Oh mein lieber XCode ...

14
agro1986

Ich habe die gleichen Fehler bekommen ...

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

Ich habe openURL () von einer UIAlertAction aufgerufen

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

Verschiebung der Ausführung des Blocks bis zur nächsten Laufschleife korrigiert ...

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

Ich habe bei der Lieferung neuer Daten Folgendes erhalten:

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

Der Fehler trat auf, wenn eine Schaltfläche zum Bereitstellen neuer Daten verwendet wurde. Eine NSTimer wurde verwendet, um Daten nach der Rückkehr von einer performSegueWithIdentifier-Aktion zu aktualisieren und zu aktualisieren. Der Timer wurde aktiviert und dann sofort nach der Verwendung zur Rückkehrzeit ungültig gemacht. Die Variable MSMachError wurde angehalten, als der Timer entfernt wurde, und - (void)viewWillAppear:(BOOL)animated und (void)viewDidAppear:(BOOL)animated wurden für dieselbe Funktion verwendet. Dieser Fehler begann mit dem Upgrade auf Xcode 7. 

9
Patt

Dieses Problem wurde behoben, indem der Wert von Localization native development region key in United Kingdom[oder einem bestimmten Bereich] von seinem in info.plist Ihres Projekts vorhandenen Standardwert en geändert wurde.

  1. Project Navigator auswählen
  2. Suchen Sie die info.plist-Datei im Ordner ProjectNameTests.
  3. Ändern Sie den Wert von Localization native development region key in eine bestimmte Region für z. Großbritannien

 Step 1 and 2

 Step 3

6

Ich bin auch auf das gleiche Problem in einer NSOperation gestoßen, die in einem Hintergrundthread ausgeführt wird, und ich habe diesen Fehler immer noch erhalten, da sich ein UIAlertController immer noch selbst entfernte, während eine andere UI-Transaktion versucht wurde. Das Ändern dieses Codes hat das Problem behoben. 

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

Viele Leute wissen nichts über das Verschieben. - Der aktuelle Bereich wird abgeschlossen und anschließend ausgeführt. Ein bisschen ordentlich. 

4
Kellen Styler

Ich war mit der gleichen Fehler ungültigen Fähigkeit (20) und ungültigem Namen (15) konfrontiert. Ich habe die von anderen genannten Lösungen ausprobiert:

  • Schlüssel für die native Entwicklungsregion der Lokalisierung in info.plist
  • Ändern der Zeichnungseinstellungen im Bereich "Attribute"
  • Sogar das ATS Exception Dictionary in info.plist wurde geändert

Aber keine dieser Lösungen hat mein Problem gelöst. Eigentlich wollte ich ein Dokument freigeben, aber das Generieren eines Dokuments würde einige Zeit in Anspruch nehmen, und ich wollte dem Benutzer bis zum Laden des Dokuments ein UIActivityIndicatorView anzeigen.

Die Lösung für meinen Fehler war:

//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;
    }];
});
});
4
1218GG

Das Ändern der Lokalisierungszeichenfolge von en in die USA hat dieses Problem behoben. Stellen Sie jedoch sicher, dass Sie nach dem Ändern von Info.plist eine Bereinigung durchführen. Ich habe festgestellt, dass Updates nicht funktionieren, wenn Sie nur nach Änderungen an Plist Builds erstellen.  enter image description here

3
AlphaCodaSeven

Dieser Fehler wurde angezeigt, nachdem ich einige Beobachter hinzugefügt hatte:

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

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

Das Problem wurde behoben, als ich den Klassennamen anstelle von self angegeben habe:

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

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

In meinem Fall war es Little Snitch, der die URLs automatisch blockierte.

2
Vaibhav Mishra

Ich hatte den gleichen Fehler und keiner der obigen Punkte traf auf mein Problem zu. Das Problem trat auf, als ich meinen Ansichtscontroller als Beobachter für eine Änderung der Geräteorientierung registriert hatte. Daher konnte die Größe der Ansichten geändert und die Zeichnungen in der Ansicht entsprechend der neuen Größe der Ansicht erstellt werden.

Ich hatte einen Auslass von ViewGraph, einer Unterklasse von UIView, in der ich einige Grafiken gezeichnet habe. Im Querformatmodus ist ViewGraph größer als im Hochformatmodus. Wenn das Gerät seine Ausrichtung ändert, musste der speedGraph neu gezeichnet werden.

Das Problem war, dass ich der SpeedGraph-Ansicht, die Grafiken enthielt, mehrere Unteransichten hinzufügte. Diese Unteransichten mussten in der speedGraph-Ansicht neu angeordnet und anschließend neu gezeichnet werden. Nachdem das Gerät seine Ausrichtung geändert hatte, rief ich erneut viewDidAppear an, um die speedGraph-Ansicht und alle ihre Unteransichten neu zu gestalten und neu zu zeichnen. Der Aufruf von setNeedsDisplay für speedGraph funktioniert nicht mit Orientierungsänderungen und Unteransichten in einer Ansicht.

Was habe ich falsch gemacht, wodurch der Fehler angezeigt wurde. In viewDidAppear rufe ich eine Methode auf, die einige Berechnungen durchführt und die Unteransichten zur speedGraph-Ansicht hinzufügt. Das Problem war, dass diese Unteransichten in der Methode erstellt wurden und in dieser Methode der speedGraph-Ansicht hinzugefügt wurden. Nach dem Verlassen der Methode werden die Verweise auf diese Unteransichten natürlich gelöscht, die Unteransichten in der speedGraph-Ansicht bleiben jedoch erhalten, da sie hinzugefügt werden. Wenn sich das Gerät ändert, werden die Unteransichten erneut erstellt und der SpeedGraph-Ansicht hinzugefügt, die bereits über diese Unteransichten verfügt, die Verweise auf diese Unteransichten jedoch nicht mehr finden können. Die Reihe der Unteransichten der speedGraph-Ansicht wird mit (ich denke) unübersichtlichen Unteransichten immer länger.

Ich habe das Problem gelöst, indem ich die Untersichten definiert habe, die der speedGraph-Ansicht als Klasseneigenschaft hinzugefügt werden, und dann die erforderlichen Schritte mit den Ansichten innerhalb dieser Methode ausführen. Mit dieser Änderung war das Problem weg.

2
MacUserT

Da wir alle Situationen posten können, in denen derselbe Fehler zurückgegeben wird, konnte ich mich gerne melden :). Ich habe den Fehler erhalten, wenn ich die Datenschutzeinstellungen im Hintergrund geändert habe. Meine App hat die Einstellungs-App geöffnet, sodass der Benutzer ihr die Berechtigung für ihre Fotobibliothek erteilen kann. Wenn der Berechtigungsschalter aktiviert ist, stürzt die App mit dem erweiterten Fehler ab:

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

Dies scheint ein erzwungener Neustart Ihrer App durch das Betriebssystem zu sein, da der Benutzer geändert hat, was auf Ihre App zugreifen kann. In meinem Fall ist es also eine Aktion des Betriebssystems, die den Fehler verursacht hat.

2
MQoder

Ich könnte den Fehler für mich reproduzieren: Wenn Änderungen an einer der Ansichten in einer Ansicht vorgenommen werden, die ich tatsächlich gerade schließe (popViewControllerAnimated), erhalte ich den Fehler.

Ich habe eine UINavigationButton-Aktion, die eine asynchrone Task (POSTRequest) vornimmt. Bevor ich diese Anforderung ausführte, setze ich das customView dieser Schaltfläche auf eine Fortschrittsanzeige. Wenn ich von dem asynchronen Aufruf zurückkomme, übermittle ich den Haupt-Thread und setze die customView dieser Schaltfläche zurück. __ Danach schließe ich die Ansicht (popViewControllerAnimated).

Dies ist der richtige Code, bei dem der Fehler nicht angezeigt wird:

/* 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)
      })
    })
}

Was den Fehler verursacht hat, war das Wechseln der Zeilen: Schließen der Ansicht und Setzen der benutzerdefinierten Ansicht auf Null:

/* 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
Miaumi

Ich habe diesen Fehler von:

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

usw

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:

erstellen eines neuen Wörterbuchs Aufforderung und: 

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

und dann in meinen Alertaufrufen die Eingabeaufforderung verwendet. Das Problem wurde behoben.

Es scheint also, dass es sich um ein Timing-Problem handelt.

1
Jeremy

Der Grund, warum einige Entwickler den Fehler nicht zurückbekamen, nachdem sie von "Unites States" zu "en" (oder) einer anderen Region gewechselt sind, ist die Diskrepanz zwischen den Ansichten "Eigenschaftenliste" und "Quellcode". Es ist wahrscheinlich ein Xcode-Fehler. Wenn zwischen diesen beiden Ansichten Unstimmigkeiten bestehen, wird dieser Fehler ausgegeben, unabhängig davon, ob es sich um "en" oder "English" handelt. Wenn Sie für beide Ansichten auf "en" oder "United States" geändert haben, wird das Problem behoben.

1
Nay

Für was es wert ist - es scheint, dass viele Situationen diesen Fehler auslösen. In meinem Fall hatte ich eine Benachrichtigung gesendet, wenn der Benutzer ein Dateneingabeformular abgewiesen hat und die Daten im Formular waren. Ich konnte den Fehler beheben, indem ich den ersten Responder vor dem Abwickeln des View-Controllers programmatisch von allen zutreffenden Feldern absetzte.

1
user2698617

Ich habe die gleiche Fehlermeldung erhalten, weil ich assign eine object-Eigenschaft wie @property (assign, nonatomic) NSNumber *aVariable; habe, die durch Ändern in strong behoben wurde.

1
Allen

Ich bin ein Neuling in diesem Bereich, also nimm dies für das, was es wert ist.

Was für mich behoben wurde, war das Ändern der simulierten Metriken> Größe> in iPad Vollbild. Alle meine Ansichten AUSSER für die, die diesen Fehler ausgelöst hat, haben wir auf iPad Full Screen gesetzt. Als ich es änderte, ging der Fehler weg ...

1
user1045302

Ich hatte diesen Fehler, als ich einen Popover per Delegate entließ. In der DelegateMethod habe ich ein paar GUI-Stuff ausgelöst. Das Einfügen des GUI-Stuff in den completionBlock von dismissViewControllerAnimated hat es behoben.

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

Ich habe dies gesehen, als ich die Home-Taste drückte, während eine UIAlertController angezeigt wurde, die jedoch beim Neustart der App verworfen wurde. Ich habe Code hinzugefügt, um die UIAlertController in der appDelegate zu verwerfen:

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

und die Fehlermeldung verschwand.

1
emrys57

mit Xcode 8.1 und 10 war ich auch konfrontiert 

_BSMachError: (os/kern) ungültige Funktion (20)

_BSMachError: (os/kern) ungültiger Name (15)

beim Versuch, UiTraiCollection var zu überschreiben, um die Laufzeitklassen des iPad zu ändern, um zwei unterschiedliche Schnittstellenlayouts in Portraid und Landscape zu haben. Es hat ohne Absturz funktioniert, erzeugt aber unsere Fehler.

Dies war der "maliciuos" Code:

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
}

Die Fehler mit override func viewWillTransition als Alternative zum Erkennen der Rotation der Schnittstelle sind verschwunden. 

Ich hoffe, das wird jemandem nützlich sein

0
Swalsz

In meinem Fall lag die Ursache des Fehlers in der Größenänderung. Erbaut in IB. Alles, was die Größe eines Textfeldes oder ähnliches verändern kann, zum Beispiel die Zeilenlänge, kann zu diesem Fehler führen, glaube ich. In meinem Fall musste ich einfach die Textfeldgröße anpassen, um alle Möglichkeiten abzudecken, damit die Größe des Felds nicht geändert werden muss und ein Konflikt mit etwas anderem entsteht.

0
Terence K