Mensagem de erro '_BSMachError: (os / kern) capacidade inválida (20)'

173

Observe que essa mensagem de erro é de nível bastante baixo e, por isso, surge por diferentes motivos em diferentes cenários. Se você tiver um cenário que não é mencionado em uma das respostas abaixo, considere adicionar sua situação também. Talvez essa seja uma resposta central para várias situações que geram essa mensagem de erro.

Editar Nov 10, 2015 Observe também que marquei minha própria resposta como a resposta, mas isso foi antes de qualquer outra pessoa ter postado. Eu acho que nenhum deve realmente ser marcado como a resposta, porque, como vimos agora abaixo ... esse erro não tem apenas uma resposta porque é um nível muito baixo.

Estou correndo

  • Simulador para iOS 9.0
  • XCode 7.0

Tudo estava funcionando bem ontem.

Hoje, depois de muito trabalho em assuntos relacionados à rotação, comecei a receber esse erro na saída do console ao executar o aplicativo no Simulador e girá-lo.

_BSMachError: capacidade inválida (os / kern) (20)

_BSMachError: nome inválido (os / kern) (15)

Captura de tela para este problema - Limpei minha pasta de construção, - Limpei a pasta de dados derivados, - Redefinii o simulador.

Eu estava trabalhando com

  • UIViewController viewWillLayoutSubviews
  • UIViewController viewWillTransitionToSize:...

Eu também estava verificando várias configurações de 'Desenho' no Inspetor de atributos no IB.

Também criei uma categoria de utilitário no UIView, onde criei vários métodos que criam CGRecte me ajudam a atribuir quadros a visualizações.

Root View Controller

Configurações do controlador de exibição raiz

Logicsaurus Rex
fonte
Estou recebendo esse erro enquanto trabalhava no BLE
Nex Mishra 23/11
1
Ainda não consigo encontrar uma solução e também a estou conseguindo enquanto gira. Às vezes, também recebo um aviso de memória, embora o Xcode relate que apenas uma pequena quantidade de memória está sendo usada. Frustrante.
Narco
79
Bom acho que você editou MyFoodTracker: P
Sam Soffes 16/02
8
Por que o MyFoodTracker é riscado com uma linha vermelha na captura de tela?
Marián Černý
2
@LogicsaurusRex "O que isso significa?" na verdade, não é uma pergunta útil, mas "Precisa ser consertada?" talvez seja uma pergunta melhor (para a qual eu gostaria de responder). Meu aplicativo parece funcionar bem, mas está mostrando esse erro. Eu adoraria fixá-lo e corrigi-lo, mas esse não é um aplicativo pequeno, e encontrá-lo me custaria um tempo precioso.
vrwim

Respostas:

144

Com base no https://forums.developer.apple.com/thread/15683 :

Altere " Região de desenvolvimento nativo da localização " info.plistpara Estados Unidos em vez de en.

Atualizado: em seguida, você pode reverter essas alterações novamente.

blacharnia
fonte
3
Também funcionou para mim. Em seguida, reverti a configuração para "en" e o erro parece não voltar.
Skoua
Funcionou para mim como uma NOVA instância desse erro. Postei a postagem original aqui e estava recebendo esse erro devido a uma das caixas de seleção de desenho. Ele se foi por um longo tempo, e agora começou a surgir novamente por algum outro motivo desconhecido, e mudar isso realmente o consertou ... HOLY COW, que é incrível.
Logicsaurus Rex
O meu está definido como ja, não en. O que devo fazer? Defina como Japan?
Nicolas Miari
1
Isso funcionou. No entanto revertido para en novamente e nenhum erro 😒
Neo Ighodaro
30
Eu realmente não gosto de respostas como essa. Porque isso não explica nada. É um bug no XCode? O posicionamento do nosso código está errado? Ou o que?
GeneCode
66

Também encontrei _BSMachErrorerros no console enquanto fazia uma ligação direta no aplicativo Configurações no iOS 9 UIAlertController. A dispatch_asyncresolveu meu problema:

[aAlertVC addAction:[UIAlertAction actionWithTitle:@"Settings" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    });
}]];
19Craig
fonte
2
Isso removeu o erro do console para mim, mas o principal erro de bloqueio que eu estava tentando corrigir que ocorre ao mesmo tempo não foi ajudado
Jason
provavelmente pode generalizar essa resposta, recebi a minha enquanto executa segue em um controlador uialert (quase o mesmo código). Provavelmente tem a ver com a maneira como o alertcontroller sai de cena. Resolvi meu problema com dispatch_async também.
user3802077
mesmo problema aqui - especificamente, isso ocorre no simulador 9.2 ao acessar as configurações do sistema no meu aplicativo por meio do manipulador do UIAlertAction no UIAlertController. Quando reescrevi o código para UIAlertController, em vez do antigo UIAlertView, o sim lançou os mesmos erros _BSMach (15,20). Não ocorreu no dispositivo real (ipad). Dispatch_async deixou o simulador feliz. Está definitivamente relacionado ao UIAlertController.
Mike Kogan 04/02
mesmo problema levantou sua cabeça novamente, desta vez não no sim, mas em um ipad e NÃO no sim. dessa vez, foi um código que transformou uma visualização em um contexto pdf que causou os macherrors. novamente dispatch_async corrigiu. Também verifiquei que, quando esse código é executado sem ser chamado do manipulador de conclusão de um UIAlertAction em um UIAlertController, esse erro não ocorre. nos dois casos, o erro só era visível no console de depuração do XCode e o aplicativo continuava sendo executado corretamente. Nenhuma das idéias de localização sugeridas neste encadeamento teve qualquer impacto em qualquer cenário.
5136 Mike Kogan
@ Jason Eu tive o mesmo problema, ele removeu a mensagem de erro do console, mas ainda trava. Você conseguiu resolvê-lo de alguma forma?
BP14
32

Ok, eu ainda não o localizei completamente, mas isso fará você 99% do caminho até lá. Estou usando um controle de mapa de terceiros da ESRI, e algo sobre isso não gosta de nenhuma dessas configurações de desenho no Inspetor de atributos. Eu não tentei cada configuração individualmente para ver qual é, mas quando desliguei todas (na caixa vermelha) tudo funcionou como um encanto e parei de receber a mensagem de erro acima no console. Se e quando tiver tempo para definir exatamente a configuração ou combinação de configurações, atualizarei a resposta.

insira a descrição da imagem aqui

Logicsaurus Rex
fonte
Eu acho que sua resposta é muito boa. No entanto, eu removeria o texto em negrito na parte superior. Ultimamente, tem havido muitas votações anônimas nas respostas, duvido que seja algo pessoal.
Jason D
e se eu tiver que usar um desses?
Zaraki
15

É uma loucura, mas para mim a solução foi apenas remover todos os pontos de interrupção no arquivo em que ocorreu o erro.

Quanto à causa? Acho que pressionei acidentalmente uma tecla de atalho para criar um ponto de interrupção na linha atual. Como isso não foi intencional, pressionei a mesma tecla de atalho novamente para excluí-la.

Oh meu querido XCode ...

agro1986
fonte
Isso funcionou para mim. Uma pista de que esse era o problema era que o Xcode quebrava em linhas que não tinham ponto de interrupção. Então, em uma linha diferente, obtive os _BSMachErrors acima.
didge
12

Eu estava recebendo os mesmos erros ...

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

Eu estava chamando openURL () de um UIAlertAction

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

Adiando a execução do bloco até o próximo ciclo de execução corrigi-lo ...

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

Eu estava recebendo o seguinte ao fornecer novos dados:

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

O erro ocorreu quando um botão foi usado para fornecer novos dados. Um NSTimerfoi usado para atualizar e atualizar dados ao retornar de uma performSegueWithIdentifieração. O cronômetro estava sendo ativado e depois invalidado imediatamente após o uso no horário de retorno. O MSMachErrorparado quando o temporizador foi removido e - (void)viewWillAppear:(BOOL)animatede (void)viewDidAppear:(BOOL)animatedforam utilizados para realizar a mesma função. Este erro começou com a atualização para o Xcode 7.

Patt
fonte
6

Eu resolvi esse problema alterando o valor da Localization native development regionchave para United Kingdom [ou qualquer região específica] do valor padrão enpresente no info.plistseu projeto.

  1. Selecione Project Navigator
  2. Localize o info.plistarquivo presente na pasta ProjectNameTests.
  3. Altere o valor de Localization native development region keypara qualquer região específica, por exemplo. Reino Unido

Etapa 1 e 2

etapa 3

Jayprakash Dubey
fonte
Sim, essa correção parece loucura, mas funciona. Para mim, o aplicativo funcionou quando o Xcode 7.3.1 foi implantado em um iPod touch 5ª geração conectado. Mas, quando implantado pela primeira vez do Xcode em um iPad Air conectado, eu encontrei isso BSMachError. Mudar de região para United Stateso erro desapareceu. Mais um mistério inexplicável do Xcode.
Basil Bourque
4

Também encontrei o mesmo problema em uma NSOperation em execução em um thread em segundo plano e ainda estava recebendo esse erro porque um UIAlertController ainda estava se removendo enquanto outra transação da interface do usuário estava tentando ocorrer. A modificação do meu código para isso corrigiu o problema.

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

Muitas pessoas não sabem sobre adiar - Permite que o escopo atual seja concluído e depois seja executado. Meio arrumado.

Kellen Styler
fonte
4

Eu enfrentei o mesmo erro de capacidade inválida (20) e nome inválido (15). Tentei as soluções mencionadas por outros, como:

  • Chave da região de desenvolvimento nativo da localização em info.plist
  • Alteração das configurações de desenho no Inspetor de atributos
  • Mesmo dicionário de exceção ATS alterado em info.plist

Mas nenhuma dessas soluções resolveu meu problema. Na verdade, eu estava tentando compartilhar algum documento, mas a geração do documento levaria algum tempo e queria exibir um UIActivityIndicatorView para o usuário até que o documento fosse carregado.

A solução para o meu erro foi:

//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
fonte
Excelente, funcionou para mim! Importante saber que atualizar a interface do usuário deve ser feito no dispatch_get_main_queue ()
MkaysWork
3

Alterar a sequência de localização de en para Estados Unidos corrigiu isso para mim. No entanto, certifique-se de limpar depois de alterar o Info.plist. Percebi que as atualizações não funcionam quando você apenas cria depois de fazer alterações significativas.insira a descrição da imagem aqui

AlphaCodaSeven
fonte
2

No meu caso, era Little Snitch, estava bloqueando URLs automaticamente.

Vaibhav Mishra
fonte
2

Eu poderia reproduzir o erro para mim: Se eu fizer alterações em uma das Visualizações em uma Visualização que já estou fechando (popViewControllerAnimated), recebo o erro.

Estou tendo uma ação UINavigationButton que cria uma tarefa assíncrona (POSTRequest). Antes de executar esta solicitação, defino o customView desse botão como um indicador de progresso. Ao voltar da chamada assíncrona, despacho para o encadeamento principal e redefino o customView desse botão. Depois disso, estou fechando a exibição (popViewControllerAnimated).

Este é o código CORRETO no qual o erro não aparece:

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

O que causou o erro foi alternar linhas: fechando a visualização e, em seguida, configurando o customView como nulo:

/* 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
fonte
2

Este erro começou a aparecer depois que adicionei alguns observadores:

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

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

O problema desapareceu quando especifiquei o nome da classe em vez 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
fonte
2

Eu tive o mesmo erro e nenhuma das opções acima se aplica ao meu problema. O problema apareceu quando registrei meu controlador de vista como observador de uma alteração na orientação do dispositivo, para que as vistas pudessem ser redimensionadas e os desenhos na vista pudessem ser feitos de acordo com o novo tamanho da vista.

Eu tenho uma saída de um viewGraph que era uma subclasse do UIView na qual desenhei alguns gráficos. No modo paisagem, o tamanho do viewGraph é maior do que no modo retrato. Portanto, quando o dispositivo altera sua orientação, o speedGraph precisa ser redesenhado.

O problema foi que adicionei várias subvisões à visualização speedGraph, que continham gráficos. Essas subvisões precisavam ser dispostas novamente na visualização speedGraph e depois redesenhadas. Depois que o dispositivo mudou sua orientação, chamei viewDidAppear novamente para tornar a visualização speedGraph e todas as suas subvisões criadas de novo e redesenhar. Chamar setNeedsDisplay para speedGraph não funciona com alterações de orientação e subvisões em uma exibição.

O que fiz de errado que causou o erro? Em viewDidAppear, chamo um método que faz alguns cálculos e adiciona as subvisões à visualização speedGraph. O problema era que essas subvisões foram criadas no método e adicionadas à visualização speedGraph nesse método. Depois de sair do método, as referências a essas sub-visões são, obviamente, excluídas, mas as sub-visões na visualização speedGraph permanecem, pois foram adicionadas. Quando o dispositivo muda, as subvisões são criadas novamente e adicionadas à visualização speedGraph, que já possui essas subvisões, mas não consegue mais encontrar as referências a essas subvisões. A matriz de subviews da visualização speedGraph fica mais e mais com (eu acho) subviews pendentes.

Resolvi o problema definindo as subvisões que serão adicionadas à visualização speedGraph como uma propriedade de classe e, em seguida, fiz o que precisava ser feito com as visualizações dentro deste método. Com essa mudança, o problema se foi.

MacUserT
fonte
2

Como podemos postar todas as situações retornando o mesmo erro aqui, senti-me à vontade para postar o meu :). Recebi o erro quando alterei as configurações de privacidade em segundo plano. Meu aplicativo abriu o aplicativo de configurações para que o usuário possa conceder permissão à sua biblioteca de fotos. Quando a opção de permissão é definida, o aplicativo trava com o erro mencionado:

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

Parece ser uma reinicialização forçada do seu aplicativo pelo sistema operacional, porque o usuário alterou o que o seu aplicativo pode acessar. Então, no meu caso, é uma ação do sistema operacional que causou o erro.

MQoder
fonte
Eu também peguei esse. Portanto, isso não é realmente um bug. Quando o aplicativo não estiver conectado ao Xcode, nada de terrível acontecerá. Obrigado mano, você pode economizar horas do meu tempo de depuração.
Yuji
1

Recebi a mesma mensagem de erro, porque eu sou assignuma objectpropriedade @property (assign, nonatomic) NSNumber *aVariable;, corrigida pela alteração para strong.

Allen
fonte
1

Pelo que vale a pena - parece que muitas situações geram esse erro. No meu caso, eu havia postado um alerta quando o usuário estava descartando um formulário de entrada de dados e os dados estavam no formulário. Consegui eliminar o erro renunciando programaticamente o primeiro respondedor de todos os campos aplicáveis ​​antes de desenrolar o controlador de exibição.

user2698617
fonte
Este é o problema que estou tendo também, mas como o controlador de exibição é dispensado pelo botão Voltar da barra de navegação do controlador de navegação, prepareForSegue()ele não é chamado e não sei onde renunciar ao primeiro respondedor.
TimSim
1

Vi isso ao pressionar o Homebotão enquanto um UIAlertControllerera exibido, que foi descartado quando o aplicativo foi reiniciado. Eu adicionei código para descartar o UIAlertControllerem appDelegate:

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

e a mensagem de erro desapareceu.

emrys57
fonte
1

Eu tive esse erro ao descartar uma popover via delegate. No delegateMethod, eu acionei algumas coisas da GUI. Colocando o GUI-Stuff na conclusãoO bloco de unlockViewControllerAnimated corrigiu.

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

Eu sou um novato nisso, então leve isso para o que vale a pena.

O que corrigi isso para mim foi alterar as Métricas simuladas> Tamanho> para Tela cheia do iPad. Todos os meus pontos de vista, EXCETO o que gerou esse erro, foram configurados para iPad em tela cheia. Quando mudei, o erro desapareceu ...

user1045302
fonte
1

A razão pela qual alguns desenvolvedores não obtiveram o erro retornou depois de mudar de "Estados Unidos" para "en" (ou) outra região, é que há discrepância entre as visualizações "Lista de propriedades" e "Código-fonte". Provavelmente é um bug do Xcode. Sempre que houver incompatibilidade entre essas duas visualizações, esse erro será gerado, seja ele "en" ou "inglês". Se você alterou para "en" ou "Estados Unidos" para que ambos os modos de exibição sejam iguais, o problema será corrigido.

Não
fonte
1

Eu recebi esse erro 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:

criando um novo prompt de dicionário e:

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

e então usei o prompt nas minhas chamadas de alerta. Isso resolveu o problema.

Portanto, parece que é uma questão de tempo.

Jeremy
fonte
Receio que tenha funcionado apenas por um tempo e depois reapareceu - assim, comentar o caso 1 e depois chamar esse alerta mais tarde parece ter resolvido o problema.
Jeremy
0

com o Xcode 8.1 e iOs 10 eu também enfrentei

_BSMachError: capacidade inválida (os / kern) (20)

_BSMachError: nome inválido (os / kern) (15)

tentando substituir UiTraiCollection var para alterar em tempo de execução as classes de tamanho do iPad para ter dois layouts de interface diferentes em Portraid e Landscape. Funcionou sem travamentos, mas gerou nossos erros.

Este era o código "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
}

Os erros foram usados override func viewWillTransitioncomo alternativa para detectar a rotação da interface.

Espero que isso seja útil para alguém

Swalsz
fonte
0

No meu caso, a causa do erro ocorreu devido ao redimensionamento. Construído em IB. Qualquer coisa que possa alterar o tamanho de um campo de texto ou similar, por exemplo, alterar o comprimento da linha, pode levar a esse erro. No meu caso, eu simplesmente precisei ajustar o tamanho do campo de texto para cobrir todas as possibilidades, para que não fosse necessário redimensionar a caixa e entrar em conflito com outra coisa.

Terence K
fonte