Сообщение об ошибке '_BSMachError: (os/kern) недопустимая возможность (20)'

Обратите внимание, что это сообщение об ошибке довольно низкое, поэтому оно появляется по разным причинам в разных сценариях. Если у вас есть сценарий, который не упоминается в одном из приведенных ниже ответов, пожалуйста, подумайте над добавлением вашей ситуации, так что, возможно, это может быть центральный ответ для различных ситуаций, которые поднимают это сообщение об ошибке.

Редактировать 10 ноября 2015 г. Также обратите внимание: в качестве ответа я пометил свой собственный ответ, но это было прежде, чем кто-либо еще разместил сообщение. Я думаю, что ни один из них не должен быть помечен как ответ, потому что, как мы теперь видели ниже, эта ошибка имеет не один ответ, а низкий уровень.

Я запускаю

  • iOS 9.0 Simulator
  • XCode 7.0

Вчера все отлично работало.

Сегодня, после кучи работы с материалами, связанными с ротацией, я начал получать эту ошибку в моем выпуске консоли, когда запускаю приложение в Simulator, и я его вращаю.

_BSMachError: (os/kern) недопустимая возможность (20)

_BSMachError: (os/kern) неверное имя (15)

Снимок экрана для этой проблемы  - Я очистил папку с файлами,  - Я очистил папку с производными данными,  - У меня есть reset симулятор.

Я работал с

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Я также проверял различные настройки "Рисование" в Инспекторе атрибутов в IB.

Я также сделал категорию утилиты на UIView, где я создал кучу методов, которые создают CGRect, и помогает мне назначать кадры для просмотров.

Root View Controller

Настройки контроллера корневого каталога

Ответ 1

Хорошо, я не полностью его уколол, но это даст вам 99% пути. Я использую сторонний элемент управления картой от ESRI, и что-то об этом не нравится в одном из этих параметров чертежа в Инспекторе атрибутов. Я не пробовал каждую настройку индивидуально, чтобы увидеть, какой настройкой она является, но когда я выключил все (в красном поле), все работало как шарм, и я прекратил получать сообщение об ошибке выше в консоли. Если и когда я получу время, чтобы прибить его до точной настройки или комбинации настроек, я обновлю ответ.

введите описание изображения здесь

Ответ 2

На основе https://forums.developer.apple.com/thread/15683:

Измените " локальная область локализации локализации" в info.plist на Соединенные Штаты вместо en.

Обновлено: Затем вы можете вернуть эти изменения обратно.

Ответ 3

Я также столкнулся с ошибками консоли _BSMachError при глубокой привязке в приложении "Настройки" на iOS 9 от действия UIAlertController. A dispatch_async решил мою проблему:

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

Ответ 4

Это безумие, но для меня решение было просто удалить все точки останова в файле, где произошла ошибка.

Что касается причины? Я думаю, что случайно ударил ярлык, чтобы создать точку останова в текущей строке. Поскольку это было непреднамеренно, я снова удаляю ту же самую клавишу быстрого вызова, чтобы удалить ее.

О мой дорогой XCode...

Ответ 5

Я получал те же ошибки...

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

Я звонил openURL() из UIAlertAction

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

Отсрочка выполнения блока до следующего цикла выполнения исправила его...

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

Ответ 6

При поставке новых данных я получал следующее:

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

Ошибка возникла, когда для подачи новых данных использовалась кнопка. Для обновления и обновления данных при возврате из действия performSegueWithIdentifier использовался NSTimer. Таймер активировался, а затем был отменен сразу после использования в обратном времени. MSMachError остановился, когда таймер был удален, и - (void)viewWillAppear:(BOOL)animated и (void)viewDidAppear:(BOOL)animated были использованы для выполнения той же функции. Эта ошибка началась с обновления до Xcode 7.

Ответ 7

У меня эта проблема исправлена, изменив значение Localization native development region на United Kingdom [или любую конкретную область] из значения по умолчанию en, присутствующего в info.plist вашего проекта.

  • Выберите Project Navigator
  • Найдите info.plist файл, присутствующий в папке ProjectNameTests.
  • Измените значение Localization native development region key на любой конкретный регион, например. Великобритания

Шаг 1 и 2

Шаг 3

Ответ 8

Я также столкнулся с той же проблемой в NSOperation, запущенной в фоновом потоке, и я все еще получал эту ошибку, потому что UIAlertController все еще удалял себя, когда пыталась выполнить другую транзакцию пользовательского интерфейса. Модификация моего кода для этого устранила проблему.

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

Многие люди не знают об отсрочке - он позволяет текущей области заполняться, а затем запускается после. Спрятано.

Ответ 9

Я столкнулся с той же ошибкой недопустимой возможности (20) и недопустимым именем (15). Я попробовал решения, упомянутые другими, например:

  • Ключ области локализации локализации в info.plist
  • Изменение настроек чертежа в инспекторе атрибутов
  • Даже измененный словарь исключений ATS в info.plist

Но ни одно из этих решений не решило мою проблему. На самом деле, я пытался поделиться каким-то документом, но генерировать документ займет некоторое время и захочет отобразить пользователю UIActivityIndicatorView до момента загрузки документа.

Решение для моей ошибки:

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

Ответ 10

Эта ошибка начала появляться после добавления некоторых наблюдателей:

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

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

Проблема исчезла, когда я указал имя класса вместо 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)

Ответ 11

Изменение строки локализации из en в Соединенные Штаты исправило это для меня. Однако убедитесь, что вы очистили после изменения Info.plist. Я заметил, что обновления не работают, когда вы просто создаете после внесения изменений plist. введите описание изображения здесь

Ответ 12

В моем случае это был Little Snitch, он автоматически блокировал URL-адреса.

Ответ 13

Я мог бы воспроизвести ошибку для меня: Если make изменяет одно из представлений в представлении, которое я фактически закрываю уже (popViewControllerAnimated), я получаю сообщение об ошибке.

У меня есть действие UINavigationButton, которое делает асинхронную задачу (POSTRequest). Перед выполнением этого запроса я установил customView этой кнопки на индикатор прогресса. Возвращаясь из асинхронного вызова, я отправляю в основной поток и reset пользовательский вид этой кнопки. После этого я закрываю представление (popViewControllerAnimated).

Это код CORRECT, где ошибка не появляется:

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

В результате возникла ошибка переключения строк: закрытие представления, а затем настройка customView на 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
      })
    })
}

Ответ 14

У меня была такая же ошибка, и ни одна из вышеперечисленных проблем не применима к моей проблеме. Проблема возникла, когда я зарегистрировал контроллер вида в качестве наблюдателя для изменения ориентации устройства, поэтому размеры могут быть изменены, а чертежи в представлении могут быть сделаны в соответствии с новым размером представления.

У меня был выход viewGraph, который был подклассом UIView, в котором я рисовал графику. В ландшафтном режиме размер viewGraph больше, чем в портретном режиме. Поэтому, когда устройство меняет свою ориентацию, необходимо перерисовать speedGraph.

Проблема заключалась в том, что я добавил несколько представлений в представление speedGraph, содержащее графику. Эти подсмотры необходимо было заново разложить в виде speedGraph, а затем перерисовать. После того, как устройство изменило свою ориентацию, я снова вызвал viewDidAppear, чтобы сделать представление speedGraph и все его подпрограммы заново выстроены и перерисовываться. Вызов setNeedsDisplay для speedGraph не работает с изменениями ориентации и subviews в представлении.

Что я сделал неправильно, что вызвало ошибку. В viewDidAppear я вызываю метод, который выполняет некоторые вычисления и добавляет subviews в представление speedGraph. Проблема заключалась в том, что эти подпрограммы были созданы в методе и были добавлены в представление speedGraph в этом методе. После выхода из метода ссылки на эти подпункты, конечно же, удаляются, но подпрограммы в представлении speedGraph остаются, так как они добавляются. Когда устройство изменяется, подпрограммы создаются снова и добавляются в представление speedGraph, которое уже имеет эти подзадачи, но больше не может найти ссылки на эти подпункты. Массив subviews вида speedGraph становится длиннее и длиннее с (я думаю) висящими subviews.

Я решил проблему, определив подвид, которые будут добавлены в представление speedGraph как свойство класса, а затем сделайте то, что нужно сделать с представлениями внутри этого метода. С этим изменением проблема исчезла.

Ответ 15

Поскольку мы можем опубликовать все ситуации, возвращающие ту же ошибку здесь, я мог свободно опубликовать мой:). Я получил сообщение об ошибке, когда изменил настройки конфиденциальности в фоновом режиме. Мое приложение открыло приложение настроек, чтобы пользователь мог предоставить ему разрешение на свою фотобиблиотеку, когда установлен переключатель разрешений, приложение выходит из строя с наложенной ошибкой:

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

Это, по-видимому, принудительный перезапуск вашего приложения операционной системой, поскольку пользователь изменил то, что может получить ваше приложение. Поэтому в моем случае это действие ОС, вызвавшее ошибку.

Ответ 16

Я получил то же сообщение об ошибке, потому что свойство assign a object, подобное @property (assign, nonatomic) NSNumber *aVariable;, исправлено с помощью изменения на strong.

Ответ 17

Для чего это стоит - кажется, что много ситуаций бросает эту ошибку. В моем случае я отправил предупреждение, когда пользователь отклонил форму ввода данных, и данные были в форме. Я смог устранить ошибку, программно уволив первого ответчика из всех применимых полей, прежде чем разворачивать контроллер вида.

Ответ 18

Я видел это, когда я нажал кнопку Home, пока был отображен UIAlertController, который был отклонен, когда я перезапустил приложение. Я добавил код, чтобы отклонить UIAlertController в appDelegate:

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

и сообщение об ошибке исчезло.

Ответ 19

Причина, по которой некоторые разработчики не получают ошибку, вернулась после изменения из "Объединение государств" в "en" (или) другого региона, заключается в том, что существует расхождение между представлениями "Список свойств" и "Исходный код". Вероятно, это ошибка Xcode. Всякий раз, когда существует несоответствие между этими двумя представлениями, эта ошибка возникает, независимо от того, что это "en" или "английский". Если вы изменили на "en" или "United States", чтобы оба представления совпали, устраните проблему.

Ответ 20

У меня была эта ошибка, когда я отклонил popover через делегат. В делетететом я вызвал некоторый GUI-Stuff. Поместив GUI-Stuff в завершение, закройте lockCheckControllerAnimated.

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

Ответ 21

Я новичок в этом, поэтому возьмите это за то, что он стоит.

Что исправлено для меня, я изменил Simulated Metrics > Size > to iPad Full Screen. Все мои взгляды ЗА ИСКЛЮЧЕНИЕМ для того, кто выбросил эту ошибку, мы установили iPad на весь экран. Когда я изменил его, ошибка исчезла...

Ответ 22

Я получил эту ошибку:

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

и т.д.

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:

создание нового словарного предложения и:

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

а затем в запросах оповещения используется запрос. Это устранило проблему.

Итак, похоже, что это проблема синхронизации.

Ответ 23

с Xcode 8.1 и iOs 10 Я также столкнулся с

_BSMachError: (os/kern) недопустимая возможность (20)

_BSMachError: (os/kern) неверное имя (15)

пытается переопределить UiTraiCollection var для изменения во время выполнения классов iPadsize, чтобы иметь два разных интерфейса в Portraid и Landscape. Он работал без какого-либо сбоя, но генерировал наши ошибки.

Это был код 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
}

Пропущенные ошибки с использованием override func viewWillTransition в качестве альтернативы для обнаружения вращения интерфейса.

Я надеюсь, что это будет полезно кому-то

Ответ 24

В моем случае причина ошибки была в изменении размера. Построен в ИБ. Все, что может изменить размер текстового поля или подобное, например, изменение длины строки, может привести к этой ошибке, я считаю. В моем случае мне просто пришлось отрегулировать размер текстового поля, чтобы охватить все возможности, чтобы не нужно было изменять размер поля и конфликтовать с чем-то другим.