Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Melhores Práticas e Prevenção de Crashs

Olá pessoal tudo bem?

Tem uma coisa que me intriga no Swift / Xcode. A todo momento o sistema fica verificando sintaxe, apontando erros, tem toda a questão de tratamento de opcionais verificação de conteúdo de variáveis utilizando métodos condicionais, de forma a previnir que o App dê um crash no usuário. O que é ótimo, pois isso ajuda muito a agilizar o desenvolvimento. Mas me parece totalmente incongruente com isso, a questão do sistema utilizar-se de identificadores que são lidos como Strings dentro de expressões, como ao chamar uma View por exemplo, colocamos entre aspas seu identificador: "MinhaNovaView"

Eu posso escrever qualquer coisa aí dentro e só irá apontar um erro, se ao chamar essa View, o App não encontrar nenhuma View com esse identificador.

Portanto, em um reaproveitamento de código ou mesmo de telas, é possível que o programador deixe uma chamada falha no código que só será encontrada em execução. Correto?

Com uma linguagem tão nova, porque o próprio nome do objeto não é tratado como uma variável?

Existe algum procedimento de verificação que eu possa chamar, algo do tipo para buscar possíveis falhas no projeto?

Desde já agradeço!

Abaixo, segue exemplo de código extraído da Aula 3 do curso IOS Layout parte 2:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "Detalhes")
    self.present(controller, animated: true, completion: nil)
}
2 respostas
solução!

Oi Thiago, tudo bem?

Concordo com você, quando trabalhamos com o identificador de células temos que ter muito cuidado para não dar crash no app.

Porém, há alguns cuidados que podemos ter para que isso não aconteça:

  • Utilizar o mesmo nome da classe que controla a célula no identificador:
NSStringFromClass(ViewController.self)

O problema é que mesmo assim você terá que garantir (manualmente) que o desenvolvedor colocou o nome da célula igual ao nome da classe.

  • Escrever testes unitários no projeto. Isso ajuda muito a testar a camada de negócio do seu app e também você pode criar testes para o ViewController. Um deles seria garantir que a TableView ou CollectionView será renderizada corretamente (com o identificador correto). Caso ocorra algum problema o teste irá falhar.

Se quiser ir mais além, você pode utilizar algum serviço de integração continua (ci) no seu projeto, e toda vez que alguém fizer um push ou um pull request esse serviço de integração só permitirá que o código seja mergiado para a master se todos os testes passarem.

Dessa forma você evita que esse tipo de problema chegue em produção e ao usuário final.

Abs.

Obrigado Ândriu! Vou testar as dicas! Abs.