Saturday 16 December 2017

Waitforexpectationswithtimeout objective c compilation


Instalando a Configuração do Compilador Objetivo-C, o Compilador Objetivo-C é um superconjunto estrito de C, a funcionalidade adicional é obtida ligando-se à biblioteca Objective-C ao construir usando o compilador GNU GCC padrão. Isso torna a configuração de um novo compilador muito simples, pois podemos fazer uma cópia do compilador padrão e alterar as configurações do vinculador. Cuidado: Certifique-se de que o GNU GCC Compiler esteja configurado corretamente antes de tentar configurar o Objective-C 1) Vá para Configurações-gtCompiler e depurador. 2) Selecione GNU GCC Compiler e faça uma cópia, ele nomeia o que você quiser, mas GNU GCC Obj-C Compiler seria o mais descritivo. 3) Em Configurações do Linker. Adicione - lobjc a outras opções de vinculador que você não precisa adicionar explicitamente a biblioteca libobjc. a, pois a bandeira informa a gcc para incluí-la para nós. Adicionando suporte a Filetype 1) Vá para Configurações-gtEnvironment. 2) Selecione o gerenciamento de extensão de arquivos e adicione. m 3) Vá para o projeto-gtProject tree-gtEdit tipos de arquivos categorias de amplificador. 4) Sob fontes. Adicione. m à lista de tipos de arquivo. Destaque de sintaxe adequado 1) Vá para Configurações-gtEditor. 2) Selecione o destaque da sintaxe e vá para as máscaras de arquivo. . Adicione. m à lista de tipos de arquivo. 3) Vá para Palavras-chave. (Ao lado de Filemasks.) E crie um novo conjunto (seta para cima). Adicione isso às Palavras-chave: caixa: Alterações opcionais 1) Vá para Configurações-gtCompiler e dubugger. 2) Em Outras Configurações. Altere o registro do compilador para a linha de comando completa. Se o ObjC ainda se recusar a construir corretamente para você, você pode usar isso para comparar os argumentos da linha de comando C :: B usa contra os comandos que você usaria se você estivesse construindo o programa manualmente na linha de comando. 3) Em Outras Configurações. Vá para Opções avançadas. Para arquivos de objeto Link para arquivos executáveis ​​e Link para o executável do console. Move - o exeoutput até o final das macros. Por razões além do meu entendimento, o GCC às vezes (embora raramente) se queixa durante compilações complexas se este não for o último argumento na linha. Notas importantes 1) Por padrão, C :: B selecionará CPP como a variável de compilação padrão para um novo arquivo de origem e o arquivo não será compilado ou vinculado a um alvo. Sempre que você adiciona ou crie uma nova fonte ObjC (.m) no seu projeto, você deve clicar com o botão direito do mouse sobre ele e ir para Propriedades. . Sob avançado. Altere a variável do compilador para CC. Under Build. Selecione o arquivo Compile e o arquivo Link. Antes de fechar a caixa de diálogo, vá para Geral e desmarque Arquivo é somente leitura. Isso será automaticamente selecionado quando você alterar as outras opções e se você fechar a caixa de diálogo antes de desmarcá-la, você deve voltar e alterá-la, então feche e reabra o arquivo no visualizador antes de editá-lo. 2) Quando você adiciona um arquivo de cabeçalho (.h), você também precisa abrir sua janela de propriedades e alterar a variável do compilador para CC. Você não precisa fazer mais nada para isso. Solução de problemas Há um pequeno punhado de armadilhas em que você pode cair ao tentar compilar aplicativos do Objectivo-C usando o TDM-GCC ou o MinGW e, infelizmente, essas armadilhas não estão bem documentadas. Esta seção tenta identificar e resolver a nota de problemas atualmente identificada, que são questões do atual ramo GCC 4.5.x, a menos que seja indicado de outra forma. Atualmente, não existe uma porta 4.6.x do GCC para TDM-GCCMinGW disponível. O ramo GCC 4.6.x introduz uma biblioteca Objective-C inteiramente nova que traz a implementação do ObjC em linha com a própria implementação da própria biblioteca. Muitas dessas questões provavelmente serão resolvidas nesta versão mais recente. Problemas na biblioteca compartilhada Houve algum problema com a bandeira - lobjc tentando se conectar a libobjc. dll. a. Que tem sido uma biblioteca compartilhada não funcional por algum tempo. Se essa biblioteca compartilhada não for removida antes da compilação, o gcc lançará uma referência indefinida. Erros em cada método ObjC ou chamada de biblioteca durante o estágio de ligação. Esta biblioteca compartilhada deve ser removida e, no caso do TDM-GCC, está localizado em: mingw install directorylibgcctdm install typeversionlibobjc. dll. a. Se você instalou TDM-GCC x64, você também deve remover a cópia de 32 bits da biblioteca compartilhada, localizada em:. Version32libobjc. dll. a. BOOL Redefinido Eu não experimentei este erro a partir do TDM-GCC 4.5.2, mas no TDM-GCC 4.5.1 e anterior, tenta construir um aplicativo ObjC de 32 bits que também importa lt windows. h gt produziria um erro BOOL redefinido . Este é o resultado das cabeçalhos de janelas que definem sua própria versão do BOOL. Os cabeçalhos fazem verificações para ver se o ObjC está sendo usado (verificando se o OBJC está definido) e altera vários tipos e declarações para se tornarem compatíveis, mas a biblioteca ObjC não Defina OBJC porque também muda suas declarações se isso já estiver definido. Você não pode simplesmente definir OBJC no início de um programa, pois isso causará uma falha na compilação com libobjc. a. A maneira correta de corrigir a compatibilidade é modificar o final do objc. h (localizado em:.inclusivecludeobjcobjc. h) e importá-lo no seu programa antes de importar os cabeçalhos do Windows. Patch to objc. h Test Build Heres um projeto bare-bones que você pode jogar juntos para testar se suas configurações C :: B compilarão ObjC corretamente. Você não pode realmente testar com apenas C rigoroso, pois qualquer problema com o compilador Objective-C só se manifestará ao usar a funcionalidade ObjC. TestObject. h TestObject. m Licenciamento da biblioteca Objective-C Ao contrário de outras bibliotecas incluídas no GCC, a biblioteca Objective-C pode estar vinculada de forma estática em um projeto sem estender a GNU GPL a esse projeto. Embora a biblioteca esteja coberta pela própria GNU GPL, ela possui uma isenção especial em sua licença porque é uma biblioteca necessária para compilar um idioma. Isenção de licença Eu tive o mesmo problema. A correção para mim pareceu estar aumentando o intervalo de tempo limite. Eu originalmente tinha um intervalo de tempo limite de 1 e aumentou para 5 apenas para estar no lado seguro. Parece estar funcionando bem agora. Não tenho certeza de quanto tempo leva sua chamada assíncrona, ou se você pode pagar um intervalo de tempo limite maior que 1, mas vale a pena disparar. Respondeu 24 de novembro às 20:14 Eu tentei isso, em 50 casos isso ajudou. Você pode ver no código que eu postei que o async é apenas dispatchafter que espera 0.5s. No final, estou nildo a expectativa após o bloqueio de espera e fazer tudo afirma também após o bloco de espera. Então, nada acontece enquanto espera, mas cumpre. Ndash Micha Hernas 25 de novembro às 11h18 Swift tem um problema especial para mostrar o ponto de ruptura de exceção correto quando os fechamentos estão presentes no mesmo escopo. Eu vi o mesmo problema em um XCTestCase que usou dispatchafter e mesmo através do ponto de interrupção de exceção foi a mesma linha que waitForExpectationsWithTimeout, o caso de teste estava falhando devido a um downcast em um objeto nulo. Eu sei que este não é o seu caso, mas sempre que isso acontece, sugiro remover declarações uma linha por vez e executar o teste após cada remoção. Se o teste não falhar, você identificou o culpado. Esta é, infelizmente, a melhor opção no momento desta escrita sempre que Swift mostra um ponto de interrupção de exceção em uma linha que não faz sentido, especialmente a infame linha 0 de uma classe que você pode ver em ferramentas de relatório de falhas. Deixe-nos saber se você descobriu seu acidente.

No comments:

Post a Comment