L'analyse d'API qui en résulte est trop volumineuse lors du téléchargement de l'application dans le Mac Store


107

Je vais télécharger ma première application Mac sur l'Apple Store

Et corrigé tous les bugs de validation d'icône, de catégorie ...

Mais après, j'ai passé la validation avec avertissement:

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.

Et mon téléchargement soit rejeté avec la raison: "Binaire invalide"
Y a-t-il quelqu'un qui a l'expérience de ce cas?


MISE À JOUR: cet avertissement n'est pas la raison du rejet, c'est peut-être le problème d'archivage de l'application. J'ai publié avec succès mon application pour la stocker.

Donc, nous pouvons ignorer cela en toute sécurité.


1
Pouvez-vous résoudre ce problème? J'ai le même problème et je ne sais pas quoi faire!
nosmirck

1
Reçu cela aussi. Je ne trouve nulle part une source pour expliquer précisément ce que cela signifie?
Andrew Davis

5
Je viens de mettre à niveau ma toute petite application d'expédition de Swift 1.2 à Swift 2 et j'obtiens cette erreur. Aucune fonctionnalité supplémentaire. Cela doit en fait être une lacune dans leur outil d'analyse. (Ceci est pour une application iOS, dans Xcode 7, pas dans le magasin Mac.)
Ray Fix

2
Identique à Ray Fix, n'utilise aucune API privée, il suffit de mettre à niveau le code d'Objective-C vers Swift
Jerome Diaz

1
Idem que ci-dessus, pas d'API privées, juste utilisé Xcode 7 et j'ai obtenu.
DevC

Réponses:


65

Apple interdit l'utilisation d'API privées ou non documentées dans les applications iOS. Tous les appels que vous effectuez à des méthodes qui portent le même nom que les méthodes d'API privées ou non documentées seront marqués comme une utilisation d'API privée, même si la méthode appelée est quelque chose que vous avez défini vous-même.

App Loader effectue une analyse initiale, vérifiant les noms de méthode, l'accès aux variables d'instance et même l'utilisation de @selector avec des noms de méthode privés. App Loader ne fait pas toujours un excellent travail, et plus vous avez de fichiers source, plus il est susceptible de vous avertir que le fichier d'analyse d'API qu'il a généré est "trop ​​volumineux".

Heureusement, vous pouvez toujours soumettre votre candidature, malgré l'avertissement. Apple le vérifiera en interne, et si quelque chose est renvoyé en raison de noms qui se chevauchent, vous devrez à nouveau parcourir le processus de révision.

Erika Sadun a essayé de créer une application appelée API Kit qui effectuerait l'analyse pour vous, mais elle semble avoir abandonné son travail et supprimé toute trace de l'application de son site Web.

Chimp Studios a créé App Scanner pour faire la même chose, mais il n'a pas été mis à jour depuis 2011. Malheureusement, pour les grands projets - et cela inclut les projets avec beaucoup de pods supplémentaires de CocoaPods - il n'y a pas de bon courant (2014) moyen de résoudre ce problème autre que de nommer les éléments de manière proactive afin qu'ils ne soient pas en conflit avec les noms de méthodes et d'instances d'API privées.

Vous pouvez en savoir plus sur les conventions de dénomination du cacao d'Apple et essayer d'anticiper. Cela réduira les futurs maux de tête. Jusqu'à ce qu'Apple introduise quelque chose comme des espaces de noms, cependant, nous pouvons continuer à rencontrer ce problème de temps en temps.

L'erreur "binaire invalide" peut provenir d'un certain nombre de causes, mais elle n'a aucun rapport avec le document d'analyse d'API créé par App Loader.

Vous devez savoir que même avec l'analyse, il existe encore des moyens de contourner l'interdiction d'utiliser des API privées / non documentées. :)


Êtes-vous en train de dire que cette erreur «trop grande» est une erreur purement mal étiquetée? Que cela indique toujours une sorte d'utilisation d'API invalide? Comment avez-vous établi ce lien?
Chris Prince

Je me rends compte que la question concernait le Mac App Store, mais pour l'App Store iOS, cette réponse n'est pas tout à fait correcte. Je viens de recevoir cet avertissement lorsque j'ai essayé de valider mon application avec Xcode 7 GM, mais lorsque je l'ai effectivement téléchargée sur ITC avec Xcode 7 GM, il n'y a eu aucun problème.
Chris Prince

Quelle est l'indice ... que vous laissez entendre dans votre dernière phrase?
goodguys_activate

Merci pour une réponse très utile. Savez-vous où se trouve le fichier d'analyse API. Je voudrais supprimer tous les avertissements de mon application
user462990

Donc, si iTunes Connects montre que la version est téléchargée, cela signifie que malgré ce message d'erreur, elle a réussi? Et tout ce que je fais maintenant, c'est attendre leur approbation?
Jay

10

Après avoir rencontré ce problème pour la première fois lors de mon premier projet Swift, il semble que la réponse la plus courante à cette question soit maintenant:

Si vous utilisez Swift 2.x et XCode 7, vous obtiendrez cette erreur. N'y faites pas attention.

[MISE À JOUR: le déploiement de XCode 7.3 et iOS 9.3 semble avoir résolu ce problème!]


J'utilise Swift 2.1 dans Xcode 7.3 et cela semble être le cas. J'espère qu'ils le répareront bientôt.
Dai

jap, j'utilise également Swift 2.1.1 et xCode 7.2.1 obtenir cette information ... je vous ferai savoir si cela passe.
HitEmUp

1

Voici un moyen simple de les contourner ... stockez le nom du sélecteur à l'envers, comme "dlroWolleH", puis inversez la chaîne avant d'appeler la méthode.

Si Apple y parvient, vous pouvez les chiffrer.


48
Ou vous pouvez suivre les instructions de révision et ne pas utiliser l'API privée.
Maciej Swic

Cela ne va rien arrêter. Ils pourront détecter si la méthode est appelée à partir de la méthode elle-même. Pas à partir du nom du sélecteur que vous utilisez.
nicktones

2
@nicktones, il est possible de ne pas appeler les méthodes privées jusqu'à un moment donné dans le futur, par exemple après l'approbation de votre application
powerj1984
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.