El análisis de API resultante es demasiado grande cuando se carga la aplicación en mac store

107

Voy a subir mi primera aplicación mac a Apple Store

Y se corrigieron todos los errores de validación del ícono, la categoría ...

Pero después de eso pasé la validación con advertencia:

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.

Y mi carga será rechazada con el motivo: "Binario no válido"
¿Alguien tiene experiencia en este caso?


ACTUALIZACIÓN: esta advertencia no es la razón del rechazo, tal vez sea el problema de archivo de la aplicación. Lancé con éxito mi aplicación a la tienda.

Entonces, podemos ignorar eso con seguridad.

arasa
fuente
1
¿Podrías resolver este problema? ¡Tengo el mismo problema y no sé qué hacer!
nosmirck
1
Recibí esto también. ¿No puedo encontrar una fuente en ningún lugar para explicar con precisión lo que significa?
Andrew Davis
5
Acabo de actualizar mi aplicación de envío muy pequeña de Swift 1.2 a Swift 2 y aparece este error. Sin funcionalidad adicional. Esto tiene que ser en realidad una deficiencia en su herramienta de análisis. (Esto es para una aplicación iOS, en Xcode 7, no en la tienda Mac.)
Ray Fix
2
Igual que Ray Fix, sin usar ninguna API privada, solo actualizando el código de Objective-C a Swift
Jerome Diaz
1
Igual que el anterior, sin API privadas, solo usé Xcode 7 y obtuve.
DevC

Respuestas:

65

Apple prohíbe el uso de API privadas o no documentadas en aplicaciones de iOS. Cualquier llamada que realice a métodos que tengan el mismo nombre que los métodos de API privados o no documentados se marcará como un uso de API privado, incluso si el método al que se llama es algo que usted mismo haya definido.

App Loader realiza un escaneo inicial, verifica los nombres de los métodos, el acceso a las variables de instancia e incluso el uso de @selector con nombres de métodos privados. App Loader no siempre hace un gran trabajo, y cuantos más archivos fuente tenga, más probable será que le advierta que el archivo de análisis de API que ha generado es "demasiado grande".

Afortunadamente, aún puede enviar su solicitud, a pesar de la advertencia. Apple lo verificará internamente, y si algo se rechaza debido a nombres superpuestos, tendrá que repasar el proceso de revisión nuevamente.

Erika Sadun intentó crear una aplicación llamada API Kit que haría el escaneo por usted, pero parece que abandonó su trabajo y eliminó cualquier rastro de la aplicación de su sitio web.

Creación de Chimp Studios App Scanner para hacer lo mismo, pero no se ha actualizado desde 2011. Desafortunadamente, para proyectos grandes, y esto incluye proyectos con muchas vainas adicionales de CocoaPods, no hay una buena actualización (2014) forma de resolver este problema que no sea nombrar las cosas de manera proactiva para que no entren en conflicto con el método de API privado y los nombres de instancia.

Puede aprender de manera proactiva sobre las convenciones de nomenclatura de cacao de Apple e intentar anticiparse. Eso reducirá futuros dolores de cabeza. Sin embargo, hasta que Apple introduzca algo como espacios de nombres, es posible que sigamos encontrando este problema de vez en cuando.

El error "binario no válido" puede provenir de varias causas, pero no tiene ninguna relación con el documento de análisis de API creado por App Loader.

Debe saber que incluso con el escaneo, todavía hay formas de eludir la prohibición de usar API privadas / no documentadas. :)

lswank
fuente
¿Está diciendo que este error "demasiado grande" es un error puramente mal etiquetado? ¿Que siempre indica algún tipo de uso de API no válido? ¿Cómo ha hecho esta conexión?
Chris Prince
Me doy cuenta de que la pregunta era sobre la tienda de aplicaciones de Mac, pero para la tienda de aplicaciones de iOS, esta respuesta no es completamente correcta. Acabo de recibir esta advertencia cuando intenté validar mi aplicación con Xcode 7 GM, pero cuando realmente la cargué en ITC con Xcode 7 GM, no hubo problemas.
Chris Prince
¿Cuál es la pista ... que estás insinuando en tu última oración?
goodguys_activate
Gracias por una respuesta muy útil. ¿Sabe dónde se encuentra el archivo de análisis de API? Me gustaría eliminar todas las advertencias de mi aplicación
user462990
Entonces, si iTunes Connects muestra que la compilación está cargada, eso significa que a pesar de este mensaje de error, ¿se procesó? ¿Y todo lo que hago ahora es esperar su aprobación?
Jay
10

Después de abordar este problema por primera vez en mi primer proyecto Swift, parece que la respuesta más común a esta pregunta es ahora:

Si usa Swift 2.xy XCode 7, obtendrá este error. Simplemente ignóralo.

[ACTUALIZACIÓN: El lanzamiento de XCode 7.3 y iOS 9.3 parece haber solucionado este problema]

Ricardo
fuente
Estoy usando Swift 2.1 en Xcode 7.3 y este parece ser el caso. Ojalá lo solucionen pronto.
Dai
jap, también estoy usando Swift 2.1.1 y xCode 7.2.1 obtén esta información ... te avisaré si pasa.
HitEmUp
1

Aquí hay una manera fácil de evitarlos ... almacene el nombre del selector al revés, como "dlroWolleH", luego invierta la cadena antes de llamar al método.

Si Apple se da cuenta de eso, entonces puede cifrarlos.

Mike Crawford
fuente
48
O puede seguir las pautas de revisión y no utilizar una API privada.
Maciej Swic
Esto no va a detener nada. Podrán detectar si el método se llama desde el propio método. No del nombre del selector que usa.
nicktones
2
@nicktones es posible no llamar a los métodos privados hasta un momento en el futuro, como después de que se apruebe su aplicación
powerj1984