Pergunta

Agora que a Apple está executando algum tipo de análise estática para verificar automaticamente para uso API privada, um número de pessoas foram capturados por causa da biblioteca Three20. Eu uso uma outra biblioteca de terceiros (que eu me compilar a partir do código) e eu gostaria de auditar automaticamente para uso API privado antes de enviar para a Apple, para que eu possa eliminar / re-escrever as partes.

Se eu executar nm no meu executável do aplicativo, recebo uma lista de símbolos, e eu estou vendo símbolos lá dentro que eu não uso. Por exemplo, eu ver _AudioServicesPlaySystemSound, e se eu procurar "AudioServicesPlaySystemSound" em XCode Eu não obter nenhum resultado. Existe alguma maneira de chamadas automaticamente discriminar a APIs privadas, por aviso exemplo I que a Apple tem o hábito de nomeá-los com um sublinhado inicial.

No entanto: se eu deliberadamente incluir uma chamada a uma API privada não aparecer na saída do nm, mas mostra-se se eu executar strings no binário. Com base nisso, uma ideia que tive foi para compilar uma lista enorme de todas as chamadas de API privadas em uma enorme mesa, e procurar automaticamente-los na saída cordas. Eu não fiz isso ainda.

Alguém tem alguma dica sobre como travar automaticamente essas coisas, então eu só estou passando o processo de revisão uma vez?

Foi útil?

Solução

Você poderia tentar executar nm nos arquivos objeto em vez do ligada executável:

nm -g -j *.o  | sort | uniq

Os objetos devem estar no sub-diretório build/<app>.build/*/<app>.build/Objects-normal.

Você está vendo uma referência a AudioServicesPlaySystemSound porque uma das funções que você ligou por sua vez chama AudioServicesPlaySystemSound.

chamadas Objective C irá geralmente não aparecem em lixeiras nm, você vai precisar usar otool para isso:

otool -ov <object file>

Outras dicas

Use esta ferramenta dev, App Scanner . Faz a varredura de seu arquivo .app para métodos de API privadas. Uma versão futura também vai verificar se há variáveis ??de instância API privadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top