A análise de API resultante é muito grande ao fazer upload do aplicativo para a loja mac

107

Vou carregar meu primeiro aplicativo mac para a Apple Store

E corrigiu todos os bugs de validação de ícone, categoria ...

Mas, depois disso, passei na validação com aviso:

The resulting API analysis file is too large. We were unable to validate your API usage prior to delivery. This is just an informational message.

E meu upload será rejeitado com o motivo: "Binário inválido"
Alguém tem experiência desse caso?


ATUALIZAÇÃO: este aviso não é o motivo da rejeição, talvez seja o problema de arquivamento do aplicativo. Lancei com sucesso meu aplicativo para armazenar.

Portanto, podemos ignorar isso com segurança.

arasa
fonte
1
Você poderia resolver este problema? Tenho o mesmo problema e não sei o que fazer!
nosmirck
1
Recebeu isso também. Não consigo encontrar uma fonte em qualquer lugar para explicar com precisão o que isso significa?
Andrew Davis
5
Acabei de atualizar meu pequeno aplicativo de remessa do Swift 1.2 para o Swift 2 e recebo este erro. Nenhuma funcionalidade adicional. Isso deve ser na verdade uma deficiência em sua ferramenta de análise. (Isso é para um aplicativo iOS, no Xcode 7, não na loja do Mac.)
Ray Fix de
2
O mesmo que Ray Fix, sem usar nenhuma API privada, apenas atualizando o código de Objective-C para swift
Jerome Diaz,
1
O mesmo que acima, sem APIs privadas, apenas usei o Xcode 7 e consegui.
DevC

Respostas:

65

A Apple proíbe o uso de APIs privadas ou não documentadas em aplicativos iOS. Todas as chamadas que você fizer para métodos que têm o mesmo nome de métodos de API privados ou não documentados serão sinalizadas como um uso de API privado, mesmo se o método que está sendo chamado for algo que você mesmo definiu.

O App Loader faz uma varredura inicial, verificando nomes de métodos, acesso a variáveis ​​de instância e até mesmo o uso de @selector com nomes de métodos privados. O App Loader nem sempre faz um ótimo trabalho, e quanto mais arquivos de origem você tem, mais provável é que ele avise que o arquivo de análise de API gerado por ele é "muito grande".

Felizmente, você ainda pode enviar sua inscrição, apesar do aviso. A Apple verificará internamente e, se algo for interrompido por causa da sobreposição de nomes, você terá que passar pelo processo de revisão novamente.

Erika Sadun tentou fazer um aplicativo chamado API Kit que faria a digitalização para você, mas ela parece ter abandonado o trabalho e removido qualquer vestígio do aplicativo de seu site.

A Chimp Studios criou o App Scanner para fazer a mesma coisa, mas não foi atualizado desde 2011. Infelizmente, para grandes projetos - e isso inclui projetos com muitos pods extras de CocoaPods - não há nenhum (2014) bom atual Uma maneira de resolver esse problema diferente de nomear as coisas de forma proativa de forma que não entrem em conflito com o método privado da API e os nomes das instâncias.

Você pode aprender proativamente sobre as convenções de nomenclatura de cacau da Apple e tentar se antecipar. Isso reduzirá as dores de cabeça futuras. Até que a Apple introduza algo como namespaces, no entanto, podemos continuar enfrentando esse problema de vez em quando.

O erro "binário inválido" pode ter várias causas, mas não está totalmente relacionado ao documento de análise da API criado pelo App Loader.

Você deve saber que, mesmo com a varredura, ainda há maneiras de contornar a proibição de uso de APIs privadas / não documentadas. :)

lswank
fonte
Você está dizendo que este erro "muito grande" é um erro puramente incorreto? Isso sempre indica algum tipo de uso inválido da API? Como você fez essa conexão?
Chris Prince
Sei que a pergunta era sobre a loja de aplicativos Mac, mas para a loja de aplicativos iOS, essa resposta não está totalmente correta. Acabei de receber este aviso quando tentei validar meu aplicativo com o Xcode 7 GM, mas quando realmente o carreguei no ITC com o Xcode 7 GM, não houve problemas.
Chris Prince
Qual é a dica ... que você está insinuando em sua última frase?
goodguys_activate
Obrigado por uma resposta muito útil. Você sabe onde o arquivo API Analysis pode ser encontrado? Eu gostaria de eliminar todos os avisos do meu aplicativo
user462990
Portanto, se o iTunes Connects mostrar que a compilação foi carregada, isso significa que, apesar dessa mensagem de erro, ela foi enviada? E tudo o que faço agora é esperar a aprovação deles?
Jay
10

Depois de encontrar esse problema pela primeira vez no meu primeiro projeto Swift, parece que a resposta mais comum para essa pergunta é agora:

Se você usar o Swift 2.xe XCode 7, receberá este erro. Ignore isso.

[ATUALIZAÇÃO: o lançamento do XCode 7.3 e iOS 9.3 parece ter corrigido esse problema!]

Richard
fonte
Estou usando o Swift 2.1 no Xcode 7.3 e parece ser o caso. Esperançosamente, eles consertarão logo.
Dia
jap, também estou usando Swift 2.1.1 e xCode 7.2.1 obter essas informações ... vou deixar você saber se isso passar.
HitEmUp
1

Aqui está uma maneira fácil de contorná-los ... armazene o nome do seletor ao contrário, como "dlroWolleH" e, em seguida, inverta a string antes de chamar o método.

Se a Apple souber disso, você poderá criptografá-los.

Mike Crawford
fonte
48
Ou você pode seguir as diretrizes de revisão e não usar API privada.
Maciej Swic
Isso não vai impedir nada. Eles serão capazes de detectar se o método é chamado a partir do próprio método. Não do nome do seletor que você usa.
nicktones
2
@nicktones, é possível não chamar os métodos privados até um ponto no futuro, como depois que seu aplicativo for aprovado
powerj1984