Message d'erreur '_BSMachError: (os / kern) capacité invalide (20)'

173

Veuillez noter que ce message d'erreur est de niveau assez bas, il apparaît donc pour différentes raisons dans différents scénarios. Si vous avez un scénario qui n'est pas mentionné dans l'une des réponses ci-dessous, veuillez également envisager d'ajouter votre situation, donc peut-être que cela pourrait être une réponse centrale pour diverses situations qui soulèvent ce message d'erreur.

Modifier le 10 novembre 2015 Notez également que j'ai marqué ma propre réponse comme réponse, mais c'était avant que quiconque ait posté. Je suppose qu'aucune ne devrait vraiment être marquée comme réponse, car comme nous l'avons vu ci-dessous ... cette erreur n'a pas qu'une seule réponse car son niveau est si bas.

je suis entrain de courir

  • Simulateur iOS 9.0
  • XCode 7.0

Tout fonctionnait bien hier.

Aujourd'hui, après un tas de travail sur des choses liées à la rotation, j'ai commencé à avoir cette erreur dans la sortie de ma console lorsque j'exécute l'application dans le simulateur et que je la fais pivoter.

_BSMachError: (os / kern) capacité invalide (20)

_BSMachError: (os / kern) nom invalide (15)

Capture d'écran de ce problème - J'ai effacé mon dossier de construction, - J'ai nettoyé le dossier de données dérivé, - J'ai réinitialisé le simulateur.

Je travaillais avec

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Je vérifiais également divers paramètres de `` dessin '' sur l'inspecteur d'attributs dans IB.

J'ai également créé une catégorie utilitaire sur UIView où j'ai créé un tas de méthodes qui créent CGRectdes et m'aide à assigner des cadres aux vues.

Contrôleur de vue racine

Paramètres du contrôleur de vue racine

Logicsaurus Rex
la source
Je reçois cette erreur en travaillant sur BLE
Nex Mishra
1
Je ne trouve pas encore de solution et je l'obtiens également en tournant. Je reçois aussi parfois un avertissement de mémoire peu de temps après, même si Xcode signale que seule une petite quantité de mémoire est utilisée. Frustrant.
narco
79
Bien pense que vous avez expurgé MyFoodTracker: P
Sam Soffes
8
Pourquoi MyFoodTracker est-il barré d'une ligne rouge sur la capture d'écran?
Marián Černý
2
@LogicsaurusRex "Qu'est-ce que cela signifie?" n'est en effet pas une question utile, mais "A-t-elle besoin d'être corrigée?" est peut-être une meilleure question (à laquelle j'aimerais la réponse). Mon application semble fonctionner correctement mais affiche cette erreur. J'adorerais l'épingler et le réparer, mais ce n'est pas une petite application et la trouver me coûterait un temps précieux.
vrwim

Réponses:

144

Basé sur https://forums.developer.apple.com/thread/15683 :

Remplacez " Région de développement native de localisation " par info.plistÉtats-Unis au lieu de en.

Mise à jour: vous pouvez ensuite annuler ces modifications.

blacharnia
la source
3
Il a travaillé pour moi aussi. J'ai ensuite rétabli le paramètre sur "en" et l'erreur semble ne pas revenir.
Skoua
Cela a fonctionné pour moi comme une nouvelle instance de cette erreur. J'ai posté le message d'origine ici et j'obtenais cette erreur à cause de l'une des cases à cocher du dessin. Il était parti depuis longtemps, et a recommencé à apparaître pour une autre raison inconnue, et changer cela a en fait corrigé le problème ... SAINTE VACHE c'est génial.
Logicsaurus Rex
Le mien est réglé sur ja, non en. Que devrais-je faire? Réglez-le sur Japan?
Nicolas Miari
1
Cela a fonctionné. Cependant, il est revenu à nouveau et aucune erreur 😒
Neo Ighodaro
30
Je n'aime pas vraiment les réponses comme ça. Parce que ça n'explique rien. Est-ce un bug sur XCode? Est-ce que notre positionnement de code est incorrect? Ou quoi?
GeneCode
66

J'ai également rencontré les _BSMachErrorerreurs de la console lors de la liaison profonde dans l'application Paramètres sur iOS 9 à partir d'une UIAlertControlleraction. A dispatch_asyncrésolu mon problème:

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];
19Craige
la source
2
Cela a supprimé l'erreur de console pour moi, mais le bogue de verrouillage principal que j'essayais de corriger et qui se produit en même temps n'a pas été aidé
Jason
peut probablement généraliser cette réponse, j'ai eu la mienne en effectuant un segue dans un uialertcontroller (presque le même code). Cela a probablement à voir avec la façon dont le contrôleur d'alertes sort de l'image. Résolution de mon problème avec dispatch_async également.
user3802077
même problème ici - en particulier, cela se produit dans le simulateur 9.2 lorsque vous accédez aux paramètres système à partir de mon application via le gestionnaire pour UIAlertAction à partir de UIAlertController. Lorsque j'ai réécrit le code dans UIAlertController au lieu de l'ancien UIAlertView, la carte SIM a renvoyé les mêmes erreurs _BSMach (15,20). Ne s'est pas produit sur un appareil réel (ipad). Dispatch_async a rendu le simulateur heureux. Est définitivement lié à UIAlertController.
Mike Kogan le
même problème, c'est à nouveau la tête, cette fois pas dans la sim mais sur un ipad et PAS la sim. cette fois, c'est un code qui a rendu une vue dans un contexte pdf qui a causé les macherrors. à nouveau, dispatch_async l'a corrigé. J'ai également vérifié que lorsque ce code s'exécutait sans être appelé depuis le gestionnaire d'achèvement d'un UIAlertAction dans un UIAlertController, cette erreur ne se produisait pas. dans mes deux cas, l'erreur n'était visible que dans la console de débogage XCode et l'application a continué à s'exécuter correctement. Aucune des idées de localisation suggérées sur ce fil n'a eu d'impact sur l'un ou l'autre scénario.
Mike Kogan
@Jason J'ai eu le même problème, il a supprimé le message d'erreur de la console, mais il plante toujours. Avez-vous réussi à le résoudre d'une manière ou d'une autre?
bp14 le
32

Ok, je ne l'ai pas complètement épinglé, mais cela vous mènera à 99% du chemin. J'utilise un contrôle de carte tiers d'ESRI, et quelque chose à ce sujet n'aime pas l'un de ces paramètres de dessin dans l'inspecteur d'attributs. Je n'ai pas essayé chaque paramètre individuellement pour voir de quel paramètre il s'agit, mais lorsque je les ai tous désactivés (dans la boîte rouge), tout a fonctionné comme un charme, et j'ai arrêté de recevoir le message d'erreur ci-dessus dans la console. Si et quand j'ai le temps de le fixer au réglage précis ou à la combinaison de paramètres, je mettrai à jour la réponse.

entrez la description de l'image ici

Logicsaurus Rex
la source
Je pense que votre réponse est plutôt bonne. Cependant, je supprimerais le texte en gras en haut. Il y a eu un grand nombre de votes négatifs anonymes de réponses ces derniers temps, je doute que ce soit quelque chose de personnel.
Jason D
et si je dois en utiliser un?
Zaraki
15

C'est fou mais pour moi, la solution était simplement de supprimer tous les points d'arrêt du fichier où l'erreur s'est produite.

Quant à la cause? Je pense que j'ai accidentellement appuyé sur une touche de raccourci pour créer un point d'arrêt dans la ligne actuelle. Parce que ce n'était pas intentionnel, j'ai à nouveau appuyé sur la même touche de raccourci pour la supprimer.

Oh mon cher XCode ...

agro1986
la source
Cela a fonctionné pour moi. Un indice que c'était le problème était que Xcode se briserait sur des lignes qui n'avaient pas de point d'arrêt. Ensuite, sur une ligne différente, j'ai obtenu les _BSMachErrors ci-dessus.
didge
12

J'avais les mêmes erreurs ...

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

J'appelais openURL () depuis un UIAlertAction

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

Le report de l'exécution du bloc jusqu'à la prochaine boucle d'exécution l'a corrigé ...

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

J'obtenais ce qui suit lors de la fourniture de nouvelles données:

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

L'erreur s'est produite lorsqu'un bouton a été utilisé pour fournir de nouvelles données. Un a NSTimerété utilisé pour actualiser et mettre à jour les données au retour d'une performSegueWithIdentifieraction. La minuterie était activée puis invalidée immédiatement après l'utilisation au moment du retour. Le MSMachErrors'est arrêté lorsque la minuterie a été retirée et - (void)viewWillAppear:(BOOL)animatedet (void)viewDidAppear:(BOOL)animatedont été utilisés pour effectuer la même fonction. Cette erreur a commencé avec la mise à niveau vers Xcode 7.

Patt
la source
6

J'ai résolu ce problème en modifiant la valeur de la Localization native development regionclé en United Kingdom [ou toute région spécifique] par rapport à sa valeur par défaut enprésente dans info.plistvotre projet.

  1. Sélectionner Project Navigator
  2. Recherchez le info.plistfichier présent dans le dossier ProjectNameTests.
  3. Modifiez la valeur de Localization native development region keyà une région spécifique pour par exemple. Royaume-Uni

Étape 1 et 2

Étape 3

Jayprakash Dubey
la source
Oui, ce correctif semble fou, mais cela fonctionne. Pour moi, l'application a fonctionné lorsque Xcode 7.3.1 s'est déployé sur un iPod touch de 5e génération connecté. Mais lors du premier déploiement de Xcode sur un iPad Air connecté, j'ai rencontré cela BSMachError. Changer de région pour United Statesfaire disparaître l'erreur. Encore un autre mystère Xcode inexplicable.
Basil Bourque
4

J'ai également rencontré le même problème dans une NSOperation exécutée sur un thread d'arrière-plan et j'obtenais toujours cette erreur car un UIAlertController se supprimait toujours alors qu'une autre transaction d'interface utilisateur essayait de se produire. La modification de mon code a résolu le problème.

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

Beaucoup de gens ne savent pas à propos du report - Cela permet à la portée actuelle de se terminer, puis de s'exécuter après. Un peu soigné.

Styler Kellen
la source
4

J'ai fait face à la même erreur capacité invalide (20) et nom invalide (15). J'ai essayé les solutions mentionnées par d'autres telles que:

  • Clé de région de développement native de localisation dans info.plist
  • Modification des paramètres de dessin dans l'inspecteur d'attributs
  • Dictionnaire d'exceptions ATS même modifié dans info.plist

Mais aucune de ces solutions n'a résolu mon problème. En fait, j'essayais de partager un document, mais la génération du document prendrait un certain temps et je voulais afficher un UIActivityIndicatorView à l'utilisateur jusqu'à ce que le document se charge.

La solution à mon erreur était:

//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;
    }];
});
});
1218GG
la source
Excellent, a travaillé pour moi! Il est important de savoir que la mise à jour de l'interface utilisateur doit se faire dans le dispatch_get_main_queue ()
MkaysWork
3

Le changement de la chaîne de localisation de en à États-Unis a résolu ce problème pour moi. Cependant, assurez-vous de nettoyer après avoir modifié Info.plist. J'ai remarqué que les mises à jour ne fonctionnent pas lorsque vous construisez juste après avoir apporté des modifications plist.entrez la description de l'image ici

AlphaCodaSeven
la source
2

Dans mon cas, c'était Little Snitch, il bloquait automatiquement les URL.

Vaibhav Mishra
la source
2

Je pourrais reproduire l'erreur pour moi: si vous modifiez l'une des vues dans une vue que je ferme déjà (popViewControllerAnimated), je reçois l'erreur.

J'ai une action UINavigationButton qui crée une tâche asynchrone (POSTRequest). Avant d'effectuer cette demande, j'ai défini la vue personnalisée de ce bouton sur un indicateur de progression. En revenant de l'appel asynchrone, je distribue au thread principal et réinitialise le customView de ce bouton. Après cela, je ferme la vue (popViewControllerAnimated).

C'est le code CORRECT où l'erreur n'apparaît pas:

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

Ce qui a causé l'erreur a été de changer de ligne: fermer la vue, puis définir le customView sur nil:

/* 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
      })
    })
}
Miaumi
la source
2

Cette erreur a commencé à apparaître après avoir ajouté quelques observateurs:

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

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

Le problème a disparu lorsque j'ai spécifié le nom de la classe au lieu de 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)
Fook
la source
2

J'ai eu la même erreur et aucune des réponses ci-dessus ne s'appliquait à mon problème. Le problème est apparu lorsque j'ai enregistré mon contrôleur de vue en tant qu'observateur pour un changement d'orientation de périphérique, de sorte que les vues pouvaient être redimensionnées et les dessins dans la vue pouvaient être créés en fonction de la nouvelle taille de la vue.

J'avais une sortie d'un viewGraph qui était une sous-classe de UIView dans laquelle j'ai dessiné quelques graphiques. En mode paysage, la taille de viewGraph est plus grande qu'en mode portrait. Ainsi, lorsque l'appareil change d'orientation, le speedGraph devait être redessiné.

Le problème était que j'ai ajouté plusieurs sous-vues à la vue speedGraph, qui contenaient des graphiques. Ces sous-vues devaient être réorganisées dans la vue speedGraph, puis redessinées. Une fois que l'appareil a changé son orientation, j'ai à nouveau appelé viewDidAppear pour que la vue speedGraph et toutes ses sous-vues soient à nouveau disposées et redessinées. L'appel de setNeedsDisplay pour speedGraph ne fonctionne pas avec les changements d'orientation et les sous-vues dans une vue.

Qu'est-ce que j'ai fait de mal qui a fait apparaître l'erreur? Dans viewDidAppear, j'appelle une méthode qui fait quelques calculs et ajoute les sous-vues à la vue speedGraph. Le problème était que ces sous-vues étaient créées dans la méthode et ajoutées à la vue speedGraph dans cette méthode. Après avoir quitté la méthode, les références à ces sous-vues sont, bien sûr, supprimées, mais les sous-vues dans la vue speedGraph restent, puisqu'elles sont ajoutées. Lorsque l'appareil change, les sous-vues sont créées à nouveau et ajoutées à la vue speedGraph, qui contient déjà ces sous-vues, mais ne peut plus trouver les références à ces sous-vues. Le tableau des sous-vues de la vue speedGraph s'allonge de plus en plus avec (je pense) des sous-vues pendantes.

J'ai résolu le problème en définissant les sous-vues qui seront ajoutées à la vue speedGraph en tant que propriété de classe, puis en faisant ce qu'il fallait faire avec les vues à l'intérieur de cette méthode. Avec ce changement, le problème avait disparu.

MacUserT
la source
2

Puisque nous pouvons poster toutes les situations retournant la même erreur ici, je me suis senti libre de poster la mienne :). J'ai eu l'erreur lorsque j'ai modifié les paramètres de confidentialité en arrière-plan. Mon application a ouvert l'application de paramètres afin que l'utilisateur puisse lui accorder l'autorisation d'accéder à sa photothèque, lorsque le commutateur d'autorisation est défini, l'application se bloque avec l'erreur mentionnée:

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

Cela semble être un redémarrage forcé de votre application par le système d'exploitation, car l'utilisateur a changé ce à quoi votre application peut accéder. Donc, dans mon cas, c'est une action du système d'exploitation qui a causé l'erreur.

MQoder
la source
J'ai aussi celui-là. Ce n'est donc pas un bug. Lorsque l'application n'est pas connectée à Xcode, rien de terrifiant ne se produit. Merci mon frère, vous pourriez gagner des heures sur mon temps de débogage.
yuji
1

J'ai eu le même message d'erreur, car j'ai assignune objectpropriété comme @property (assign, nonatomic) NSNumber *aVariable;, corrigée en changeant en strong.

Allen
la source
1

Pour ce que ça vaut - il semble que de nombreuses situations génèrent cette erreur. Dans mon cas, j'avais publié une alerte lorsque l'utilisateur rejetait un formulaire de saisie de données et que les données étaient dans le formulaire. J'ai pu éliminer l'erreur en démissionnant par programme le premier répondeur de tous les champs applicables avant de dérouler le contrôleur de vue.

user2698617
la source
C'est le problème que j'ai aussi, mais comme le contrôleur de vue est rejeté par le bouton de retour de la barre de navigation du contrôleur de navigation, il prepareForSegue()n'est pas appelé et je ne sais pas où démissionner du premier répondeur.
TimSim
1

J'ai vu cela lorsque j'ai appuyé sur le Homebouton pendant que un UIAlertControllerétait affiché, ce qui a été rejeté lorsque j'ai relancé l'application. J'ai ajouté du code pour ignorer le UIAlertControllerdans appDelegate:

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

et le message d'erreur a disparu.

emrys57
la source
1

J'ai eu cette erreur lors du rejet d'un popover via un délégué. Dans la méthode delegateMethod, j'ai déclenché des trucs GUI. Mettre le GUI-Stuff dans le completionBlock de licenciementViewControllerAnimated l'a corrigé.

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

Je suis un novice dans ce domaine, alors prenez-le pour ce qu'il vaut.

Ce qui a résolu ce problème pour moi a été de changer les mesures simulées> Taille> en plein écran sur iPad. Tous mes points de vue SAUF pour celui qui a jeté cette erreur, nous avons défini le plein écran sur iPad. Quand je l'ai changé, l'erreur a disparu ...

user1045302
la source
1

La raison pour laquelle certains développeurs n'obtiennent pas l'erreur est revenue après le passage de «États-Unis» à «en» (ou) d'une autre région, c'est qu'il y a une différence entre les vues «Liste de propriétés» et «Code source». C'est probablement un bogue Xcode. Chaque fois qu'il y a une discordance entre ces deux vues, cette erreur sera générée, quelle qu'elle soit "en" ou "English". Si vous avez changé en "en" ou "États-Unis" pour que les deux vues soient identiques, le problème sera résolu.

Non
la source
1

J'ai eu cette erreur de:

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

etc

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:

créer une nouvelle invite de dictionnaire et:

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

puis utilisé l'invite dans mes appels d'alerte. Cela a résolu le problème.

Il semble donc que ce soit une question de timing.

Jérémie
la source
J'ai peur que cela n'a fonctionné que pendant un certain temps, puis il est réapparu - donc commenter le cas 1, puis appeler cette alerte plus tard semble avoir résolu le problème.
Jeremy le
0

avec Xcode 8.1 et iOs 10, j'ai également rencontré

_BSMachError: (os / kern) capacité invalide (20)

_BSMachError: (os / kern) nom invalide (15)

essayant de remplacer UiTraiCollection var pour changer au moment de l'exécution les classes iPad'size pour avoir deux dispositions d'interface différentes dans Portraid et Landscape. Cela a fonctionné sans aucun crash mais générer nos erreurs.

C'était le code "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
}

Les erreurs ont disparu en utilisant override func viewWillTransitioncomme alternative pour détecter la rotation de l'interface.

J'espère que cela sera utile à quelqu'un

Swalsz
la source
0

Dans mon cas, la cause de l'erreur était due au redimensionnement. Construit en IB. Tout ce qui peut changer la taille d'un champ de texte ou similaire, par exemple changer la longueur de la ligne, peut conduire à cette erreur, je crois. Dans mon cas, j'ai simplement dû ajuster la taille du champ de texte pour couvrir toutes les possibilités afin qu'il n'ait pas besoin de redimensionner la boîte et d'entrer en conflit avec autre chose.

Terence K
la source