Komunikat o błędzie „_BSMachError: (os / kern) nieprawidłowa zdolność (20)”

173

Należy pamiętać, że ten komunikat o błędzie jest dość niski, więc pojawia się z różnych powodów w różnych scenariuszach. Jeśli masz scenariusz, który nie jest wymieniony w żadnej z odpowiedzi poniżej, rozważ dodanie również swojej sytuacji, więc może to być centralna odpowiedź na różne sytuacje, które powodują ten komunikat o błędzie.

Edytuj 10 listopada 2015 r. Zauważ również, że oznaczyłem własną odpowiedź jako odpowiedź, ale to było zanim ktokolwiek inny opublikował. Myślę, że żadna nie powinna być oznaczona jako odpowiedź, ponieważ jak widzieliśmy poniżej ... ten błąd nie ma tylko jednej odpowiedzi, ponieważ jest tak niski.

biegnę

  • Symulator iOS 9.0
  • XCode 7.0

Wczoraj wszystko działało dobrze.

Dzisiaj, po wielu pracach nad rzeczami związanymi z rotacją, zacząłem otrzymywać ten błąd w wynikach mojej konsoli, gdy uruchamiam aplikację w symulatorze i obracam ją.

_BSMachError: (os / kern) nieprawidłowa zdolność (20)

_BSMachError: (os / kern) nieprawidłowa nazwa (15)

Zrzut ekranu dotyczący tego problemu - wyczyściłem folder kompilacji, - wyczyściłem folder danych pochodnych, - zresetowałem symulator.

Pracowałem z

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Sprawdzałem też różne ustawienia „Rysowania” w Inspektorze atrybutów w IB.

Stworzyłem także kategorię narzędzi na UIView, gdzie stworzyłem kilka metod, które tworzą CGRecti pomagają mi przypisywać ramki do widoków.

Główny kontroler widoku

Ustawienia kontrolera widoku głównego

Logicsaurus Rex
źródło
Otrzymuję ten błąd podczas pracy nad BLE
Nex Mishra
1
Nie mogę jeszcze znaleźć rozwiązania, a także otrzymuję je podczas obracania. Czasami otrzymuję również ostrzeżenie dotyczące pamięci, mimo że Xcode zgłasza, że ​​używana jest tylko niewielka ilość pamięci. Denerwujący.
narco
79
Dobrze, że zredagowałeś MyFoodTracker: P
Sam Soffes
8
Dlaczego MyFoodTracker jest przekreślony czerwoną linią na zrzucie ekranu?
Marián Černý
2
@LogicsaurusRex "Co to znaczy?" to rzeczywiście nie jest przydatne pytanie, ale „Czy wymaga naprawy?” to może lepsze pytanie (na które chciałbym odpowiedzieć). Moja aplikacja działa prawidłowo, ale wyświetla ten błąd. Chciałbym to ustalić i naprawić, ale to nie jest mała aplikacja, a znalezienie jej kosztowałoby mnie cenny czas.
vrwim

Odpowiedzi:

144

Na podstawie https://forums.developer.apple.com/thread/15683 :

Zmień „ Lokalizację natywnego regionu rozwojuinfo.plistna Stany Zjednoczone zamiast en.

Zaktualizowano: Następnie możesz cofnąć te zmiany.

blacharnia
źródło
3
Mnie też się udało. Następnie przywróciłem ustawienie „en” i wydaje się, że błąd nie powraca.
Skoua
To zadziałało dla mnie jako NOWA instancja tego błędu. Opublikowałem tutaj oryginalny post i otrzymywałem ten błąd z powodu jednego z pól wyboru rysunku. To zniknęło przez długi czas, a teraz zaczęło pojawiać się ponownie z innego nieznanego powodu, a zmiana tego faktycznie naprawiła to ... ŚWIĘTA KROWA, to jest niesamowite.
Logicsaurus Rex
Mój jest ustawiony na janie en. Co powinienem zrobić? Ustawić to Japan?
Nicolas Miari
1
To zadziałało. Jednak wrócono z powrotem do en ponownie i bez błędu 😒
Neo Ighodaro
30
Nie lubię takich odpowiedzi. Bo to niczego nie wyjaśnia. Czy to błąd w XCode? Czy to niewłaściwe pozycjonowanie kodu? Albo co?
GeneCode
66

Napotkałem również _BSMachErrorbłędy konsoli podczas głębokiego linkowania do aplikacji Ustawienia na iOS 9 z UIAlertControllerakcji. dispatch_asyncRozwiązać mój problem:

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];
19Craig
źródło
2
To usunęło błąd konsoli, ale główny błąd blokowania, który próbowałem naprawić, który występuje w tym samym czasie, nie pomógł
Jason
prawdopodobnie mogę uogólnić tę odpowiedź, otrzymałem swoją podczas wykonywania płynności w kontrolerze uialert (prawie ten sam kod). Prawdopodobnie ma to związek z tym, jak kontroler alertów wymyka się z obrazu. Rozwiązałem również mój problem z dispatch_async.
user3802077,
ten sam problem - szczególnie występuje to w symulatorze 9.2 podczas przechodzenia do ustawień systemowych z poziomu mojej aplikacji za pośrednictwem modułu obsługi dla UIAlertAction z poziomu UIAlertController. Kiedy przepisałem kod do UIAlertController zamiast starego UIAlertView, sim wyrzucił te same błędy _BSMach (15,20). Nie wystąpiło na prawdziwym urządzeniu (iPadzie). Dispatch_async uszczęśliwił symulator. Jest zdecydowanie powiązany z UIAlertController.
Mike Kogan
Ten sam problem pojawił się znowu w głowie, tym razem nie na karcie SIM, ale na iPadzie, a NIE na karcie SIM. tym razem był to kod, który wyrenderował widok do kontekstu PDF, który spowodował wystąpienie macherr. ponownie dispatch_async naprawił to. Sprawdziłem również, że gdy ten kod jest wykonywany bez wywołania z modułu obsługi zakończenia UIAlertAction w kontrolerze UIAlertController, ten błąd nie występuje. w obu moich przypadkach błąd był widoczny tylko w konsoli debugowania XCode, a aplikacja nadal działała poprawnie. Żaden z pomysłów lokalizacyjnych zasugerowanych w tym wątku nie miał żadnego wpływu na którykolwiek ze scenariuszy.
Mike Kogan
@Jason Miałem ten sam problem, usunąłem komunikat o błędzie konsoli, ale nadal się zawiesza. Czy udało ci się to jakoś rozwiązać?
bp14
32

Ok, nie przypiąłem tego do końca, ale to da ci 99% drogi. Używam kontrolki mapy innej firmy z ESRI i coś w niej nie odpowiada jednemu z tych ustawień rysowania w Inspektorze atrybutów. Nie próbowałem każdego ustawienia osobno, aby zobaczyć, które to ustawienie, ale kiedy je wszystkie wyłączyłem (w czerwonym polu), wszystko działało jak urok i przestałem otrzymywać powyższy komunikat o błędzie w konsoli. Jeśli i kiedy zdążę, aby ustalić dokładne ustawienie lub kombinację ustawień, zaktualizuję odpowiedź.

wprowadź opis obrazu tutaj

Logicsaurus Rex
źródło
Myślę, że twoja odpowiedź jest całkiem dobra. Jednak usunąłbym pogrubiony tekst u góry. Ostatnio pojawiło się wiele anonimowych głosów przeciw odpowiedziom, wątpię, czy to coś osobistego.
Jason D
co jeśli muszę użyć jednego z nich?
Zaraki,
15

To szalone, ale dla mnie rozwiązaniem było po prostu usunięcie wszystkich punktów przerwania w pliku, w którym wystąpił błąd.

Co do przyczyny? Myślę, że przypadkowo nacisnąłem klawisz skrótu, aby utworzyć punkt przerwania w bieżącej linii. Ponieważ było to niezamierzone, ponownie nacisnąłem ten sam klawisz skrótu, aby go usunąć.

O mój drogi XCode ...

agro1986
źródło
To zadziałało dla mnie. Jedną wskazówką, że to był problem, było to, że Xcode przerywałby linie, które nie miały punktu przerwania. Następnie w innym wierszu otrzymałem powyżej _BSMachErrors.
didge
12

Otrzymywałem te same błędy ...

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

Dzwoniłem do openURL () z UIAlertAction

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

Odroczenie wykonania bloku do następnej pętli uruchamiania naprawiło to ...

alert.addAction(UIAlertAction(title: actionTitle, style: .Default) {
    OperationQueue.main.addOperation {UIApplication.shared.openURL(url)}
 }
Murray Sagal
źródło
9

Podczas dostarczania nowych danych otrzymywałem następujące informacje:

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

Wystąpił błąd, gdy do podania nowych danych użyto przycisku. An NSTimersłużył do odświeżania i aktualizowania danych po powrocie z performSegueWithIdentifierakcji. Timer był aktywowany, a następnie unieważniany natychmiast po użyciu w czasie powrotu. MSMachErrorZatrzymany, gdy zegar usunięto i - (void)viewWillAppear:(BOOL)animatedi (void)viewDidAppear:(BOOL)animatedbyły wykorzystywane do wykonania tej samej funkcji. Ten błąd zaczął się od aktualizacji do Xcode 7.

Patt
źródło
6

Naprawiono ten problem, zmieniając wartość Localization native development regionklucza na United Kingdom [lub dowolny określony region] z domyślnej wartości enobecnej w info.plisttwoim projekcie.

  1. Wybierz Project Navigator
  2. Zlokalizuj info.plistplik obecny w folderze ProjectNameTests.
  3. Zmień wartość Localization native development region keyna dowolny konkretny region np. Zjednoczone Królestwo

Krok 1 i 2

Krok 3

Jayprakash Dubey
źródło
Tak, ta poprawka brzmi szalenie, ale działa. Dla mnie aplikacja działała, gdy Xcode 7.3.1 został wdrożony na podłączonym iPodzie touch piątej generacji. Jednak po pierwszym wdrożeniu z Xcode na uwięzi iPada Air napotkałem to BSMachError. Przełączam region, aby United Statesusunąć błąd. Kolejna niewytłumaczalna tajemnica Xcode.
Basil Bourque
4

Napotkałem również ten sam problem w NSOperation działającym w wątku w tle i nadal otrzymywałem ten błąd, ponieważ UIAlertController wciąż się usuwał, gdy próbowała przeprowadzić inna transakcja interfejsu użytkownika. Zmodyfikowanie mojego kodu w ten sposób rozwiązało problem.

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

Wiele osób nie wie o odroczeniu - pozwala na zakończenie bieżącego zakresu, a następnie działa po. Coś schludnie.

Kellen Styler
źródło
4

Napotkałem ten sam błąd, nieprawidłowa zdolność (20) i nieprawidłowa nazwa (15). Wypróbowałem rozwiązania, o których wspominali inni, takie jak:

  • Lokalizacja klucz natywnego regionu rozwoju w info.plist
  • Zmiana ustawień rysunku w Inspektorze atrybutów
  • Nawet zmieniony Słownik wyjątków ATS w info.plist

Ale żadne z tych rozwiązań nie rozwiązało mojego problemu. Właściwie próbowałem udostępnić jakiś dokument, ale generowanie dokumentu zajęłoby trochę czasu i chciałem wyświetlić użytkownikowi UIActivityIndicatorView do czasu załadowania dokumentu.

Rozwiązanie mojego błędu brzmiało:

//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
źródło
Świetnie, pracowało dla mnie! Ważne, aby wiedzieć, że aktualizacja interfejsu użytkownika powinna być wykonana w dispatch_get_main_queue ()
MkaysWork
3

Zmiana łańcucha lokalizacji z en na Stany Zjednoczone rozwiązała ten problem. Jednak pamiętaj, aby wyczyścić po zmianie Info.plist. Zauważyłem, że aktualizacje nie działają, gdy po prostu budujesz po wprowadzeniu zmian w plist.wprowadź opis obrazu tutaj

AlphaCodaSeven
źródło
2

W moim przypadku był to Little Snitch, automatycznie blokował adresy URL.

Vaibhav Mishra
źródło
2

Mogę odtworzyć błąd dla mnie: Jeśli wprowadzę zmiany w jednym z widoków w widoku, który faktycznie zamykam (popViewControllerAnimated), otrzymuję błąd.

Mam akcję UINavigationButton, która sprawia, że ​​zadanie asynchroniczne (POSTRequest). Przed wykonaniem tego żądania ustawiłem CustomView tego przycisku na wskaźnik postępu. Wracając z wywołania asynchronicznego, wysyłam do głównego wątku i resetuję customView tego przycisku. Następnie zamykam widok (popViewControllerAnimated).

To jest PRAWIDŁOWY kod, w którym błąd się nie pojawia:

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

Przyczyną błędu było przełączanie wierszy: zamknięcie widoku, a następnie ustawienie niestandardowego widoku na 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
      })
    })
}
Miaumi
źródło
2

Ten błąd zaczął się pojawiać po dodaniu kilku obserwatorów:

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

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

Problem zniknął, gdy podałem nazwę klasy zamiast 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
źródło
2

Miałem ten sam błąd i żadne z powyższych nie dotyczyło mojego problemu. Problem pojawił się, gdy zarejestrowałem swój kontroler widoku jako obserwatora zmiany orientacji urządzenia, dzięki czemu można było zmieniać rozmiar widoków, a rysunki w widoku można było tworzyć zgodnie z nowym rozmiarem widoku.

Miałem wylot viewGraph, który był podklasą UIView, w którym narysowałem trochę grafiki.W trybie poziomym rozmiar viewGraph jest większy niż w trybie portretowym. Kiedy więc urządzenie zmieniło swoją orientację, speedGraph musiał zostać przerysowany.

Problem polegał na tym, że dodałem kilka podwidoków do widoku speedGraph, który zawierał grafikę. Te podwidoki musiały zostać ponownie ułożone w widoku speedGraph, a następnie ponownie narysowane. Po tym, jak urządzenie zmieniło orientację, ponownie wywołałem viewDidAppear, aby widok speedGraph i wszystkie jego podglądy zostały ułożone od nowa i ponownie narysowały. Wywołanie setNeedsDisplay dla speedGraph nie działa w przypadku zmian orientacji i podglądów podrzędnych w widoku.

Co zrobiłem źle, co spowodowało pojawienie się błędu. W viewDidAppear wywołuję metodę, która wykonuje pewne obliczenia i dodaje podwidoki do widoku speedGraph. Problem polegał na tym, że te podwidoki zostały utworzone w metodzie i dodane do widoku speedGraph w tej metodzie. Po opuszczeniu metody odniesienia do tych widoków podrzędnych są oczywiście usuwane, ale widoki podrzędne w widoku speedGraph pozostają, ponieważ zostały dodane. Kiedy urządzenie się zmienia, podglądy są tworzone ponownie i dodawane do widoku speedGraph, który ma już te widoki podrzędne, ale nie można już znaleźć odniesień do tych widoków podrzędnych. Tablica podglądów podrzędnych widoku speedGraph staje się coraz dłuższa z (jak sądzę) wiszącymi podwidokami.

Rozwiązałem problem, definiując widoki podrzędne, które zostaną dodane do widoku speedGraph jako właściwość klasy, a następnie zrobię to, co należało zrobić z widokami wewnątrz tej metody. Wraz z tą zmianą problem zniknął.

MacUserT
źródło
2

Ponieważ możemy opublikować tutaj wszystkie sytuacje zwracające ten sam błąd, śmiało mogę opublikować mój :). Otrzymałem błąd, gdy zmieniłem ustawienia prywatności w tle. Moja aplikacja otworzyła aplikację ustawień, aby użytkownik mógł przyznać jej uprawnienia do swojej fotolibiblioteki, gdy przełącznik uprawnień jest ustawiony, aplikacja ulega awarii i wyświetla się wspomniany błąd:

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

Wygląda na to, że jest to wymuszone ponowne uruchomienie aplikacji przez system operacyjny, ponieważ użytkownik zmienił dostęp do aplikacji. Więc w moim przypadku jest to działanie systemu operacyjnego, który spowodował błąd.

MQoder
źródło
Ten też mam. Więc to właściwie nie jest błąd. Gdy aplikacja nie jest połączona z Xcode, nic przerażającego się nie wydarzy. Dzięki brachu, możesz po prostu zaoszczędzić godziny mojego czasu debugowania.
yuji
1

Mam ten sam komunikat o błędzie, bo assignto objectwłasność takiego @property (assign, nonatomic) NSNumber *aVariable;, ustalonego przez zmianę strong.

Allen
źródło
1

Na co warto - wydaje się, że wiele sytuacji rzuca ten błąd. W moim przypadku wysłałem alert, gdy użytkownik odrzucał formularz wprowadzania danych, a dane znajdowały się w formularzu. Udało mi się wyeliminować błąd, programowo rezygnując z pierwszej odpowiedzi ze wszystkich odpowiednich pól przed rozwinięciem kontrolera widoku.

user2698617
źródło
To jest problem, który mam, ale ponieważ kontroler widoku jest odrzucany przez przycisk Wstecz na pasku nawigacyjnym kontrolera nawigacji, prepareForSegue()nie dzwoni i nie wiem, gdzie zrezygnować z pierwszej osoby odpowiadającej.
TimSim
1

Widziałem to, gdy nacisnąłem Homeprzycisk, gdy UIAlertControllerbył wyświetlany symbol a, który został odrzucony po ponownym uruchomieniu aplikacji. Dodałem kod, aby zwolnić UIAlertControllerw appDelegate:

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

a komunikat o błędzie zniknął.

emrys57
źródło
1

Wystąpił ten błąd podczas odrzucania popovera przez delegata. W delegateMethod uruchomiłem pewne GUI-Stuff. Umieszczenie GUI-Stuff w kompletacji CompleteBlock of dismissViewControllerAnimated naprawiło to.

[myPopoverView dismissViewControllerAnimated:YES completion:^{ //GUI-Stuff}];
Yedy
źródło
1

Jestem w tym nowicjuszem, więc weź to za to, co jest warte.

Rozwiązaniem tego problemu była zmiana Symulowane metryki> Rozmiar> na pełny ekran iPada. Wszystkie moje poglądy Z WYJĄTKIEM tego, który spowodował ten błąd, ustawiliśmy na pełny ekran iPada. Kiedy to zmieniłem, błąd zniknął ...

user1045302
źródło
1

Powodem, dla którego niektórzy deweloperzy nie dostają błędu, który pojawił się po zmianie z „Stanów Zjednoczonych” na „en” (lub) inny region, jest rozbieżność między widokami „Lista właściwości” i „Kod źródłowy”. To prawdopodobnie błąd Xcode. Ilekroć wystąpi rozbieżność między tymi dwoma poglądami, zgłosi ten błąd, niezależnie od tego, czy jest to „en”, czy „angielski”. Jeśli zmienisz na „en” lub „United States”, aby oba widoki były takie same, rozwiąże problem.

Nie
źródło
1

Otrzymałem ten błąd z:

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

itp

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:

tworzenie nowej podpowiedzi ze słownika i:

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

a następnie użyłem zachęty w moich połączeniach ostrzegawczych. To rozwiązało problem.

Wygląda więc na to, że jest to kwestia czasu.

Jeremy
źródło
Obawiam się, że działało to tylko przez chwilę, a potem pojawił się ponownie - więc skomentowanie przypadku 1, a następnie wywołanie tego alertu później wydaje się, że problem rozwiązał.
Jeremy
0

z Xcode 8.1 i iOS 10 też się spotkałem

_BSMachError: (os / kern) nieprawidłowa zdolność (20)

_BSMachError: (os / kern) nieprawidłowa nazwa (15)

próbując zastąpić UiTraiCollection var, aby zmienić w czasie wykonywania klasy rozmiaru iPada, aby miały dwa różne układy interfejsu w Portraid i Landscape. Działało bez awarii, ale generuje nasze błędy.

To był kod „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
}

Błędy zostały wykorzystane override func viewWillTransitionjako alternatywa do wykrywania rotacji interfejsu.

Mam nadzieję, że komuś się to przyda

Swalsz
źródło
0

W moim przypadku przyczyną błędu była zmiana rozmiaru. Zbudowany w IB. Wszystko, co może zmienić rozmiar pola tekstowego lub coś podobnego, na przykład zmiana długości linii, może prowadzić do tego błędu. W moim przypadku musiałem po prostu dostosować rozmiar pola tekstowego, aby objąć wszystkie możliwości, więc nie trzeba zmieniać rozmiaru pola i kolidować z czymś innym.

Terence K.
źródło