L'analisi API risultante è troppo grande quando si carica l'app sul Mac Store


107

Caricherò la mia prima app per Mac su Apple Store

E risolti tutti i bug di convalida di icona, categoria ...

Ma dopo ho superato la convalida con l'avvertenza:

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 il mio caricamento viene rifiutato con il motivo: "Binario non valido"
C'è qualcuno che ha esperienza di questo caso?


AGGIORNAMENTO: questo avviso non è il motivo del rifiuto, forse è il problema di archiviazione dell'app. Ho rilasciato con successo la mia app per lo store.

Quindi, possiamo tranquillamente ignorarlo.


1
Potresti risolvere questo problema? Ho lo stesso problema e non so cosa fare!
nosmirck

1
Ricevuto anche questo. Non riesco a trovare una fonte da nessuna parte per spiegare con precisione cosa significa?
Andrew Davis

5
Ho appena aggiornato la mia piccola app di spedizione da Swift 1.2 a Swift 2 e ricevo questo errore. Nessuna funzionalità aggiuntiva. Questo deve essere effettivamente un difetto nel loro strumento di analisi. (Questo è per un'app iOS, in Xcode 7, non in un negozio Mac.)
Ray Fix

2
Come Ray Fix, non utilizza alcuna API privata, aggiorna solo il codice da Objective-C a swift
Jerome Diaz,

1
Come sopra, nessuna API privata, ho solo usato Xcode 7 e ho ottenuto.
DevC

Risposte:


65

Apple vieta l'utilizzo di API private o non documentate nelle app iOS. Qualsiasi chiamata effettuata a metodi che hanno lo stesso nome di metodi API privati ​​o non documentati verrà contrassegnata come utilizzo API privato, anche se il metodo chiamato è qualcosa che hai definito tu stesso.

App Loader esegue una scansione iniziale, verificando i nomi dei metodi, l'accesso alle variabili di istanza e persino l'utilizzo di @selector con nomi di metodi privati. App Loader non fa sempre un ottimo lavoro, e più file sorgente hai, più è probabile che ti dica l'avvertimento che il file di analisi API che ha generato è "troppo grande".

Fortunatamente, puoi ancora inviare la tua domanda, nonostante l'avviso. Apple lo controllerà internamente e se qualcosa viene respinto a causa di nomi sovrapposti, dovrai attraversare nuovamente il processo di revisione.

Erika Sadun ha provato a creare un'app chiamata API Kit che eseguisse la scansione per te, ma sembra che abbia abbandonato il suo lavoro e abbia rimosso qualsiasi traccia dell'applicazione dal suo sito web.

Chimp Studios ha creato App Scanner per fare la stessa cosa, ma non è stato aggiornato dal 2011. Sfortunatamente, per progetti di grandi dimensioni - e questo include progetti con molti pod extra da CocoaPods - non c'è nulla di buono corrente (2014) modo per risolvere questo problema diverso dal nominare in modo proattivo le cose in modo che non entrino in conflitto con il metodo API privato e i nomi delle istanze.

Puoi conoscere in modo proattivo le convenzioni di denominazione Cocoa di Apple e cercare di anticipare. Ciò ridurrà i futuri mal di testa. Fino a quando Apple non introdurrà qualcosa come gli spazi dei nomi, tuttavia, potremmo continuare a riscontrare questo problema di tanto in tanto.

L'errore "binario non valido" può derivare da una serie di cause, ma è completamente estraneo al documento di analisi dell'API creato da App Loader.

Dovresti sapere che anche con la scansione, ci sono ancora modi per aggirare il divieto di utilizzare API private / non documentate. :)


Stai dicendo che questo errore "troppo grande" è un errore puramente errato? Quello è indica sempre un qualche tipo di utilizzo dell'API non valido? Come hai stabilito questa connessione?
Chris Prince

Mi rendo conto che la domanda riguardava il Mac App store, ma per l'app iOS questa risposta non è del tutto corretta. Ho ricevuto questo avviso quando ho provato a convalidare la mia app con Xcode 7 GM, ma quando l'ho effettivamente caricata su ITC con Xcode 7 GM, c'erano nessun problema.
Chris Prince

Qual è il suggerimento ... che stai insinuando nella tua ultima frase?
goodguys_activate

Grazie per una risposta molto utile. Sai dove si trova il file di analisi API. Vorrei eliminare ogni avvertimento dalla mia app
user462990

Quindi se iTunes Connects mostra che la build è stata caricata, significa che nonostante questo messaggio di errore, è andata a buon fine? E tutto quello che faccio ora è aspettare la loro approvazione?
Jay

10

Dopo aver riscontrato questo problema per la prima volta nel mio primo progetto Swift, sembra che la risposta più comune a questa domanda sia ora:

Se utilizzi Swift 2.xe XCode 7, riceverai questo errore. Ignoralo.

[AGGIORNAMENTO: l'implementazione di XCode 7.3 e iOS 9.3 sembra aver risolto questo problema!]


Sto usando Swift 2.1 in Xcode 7.3 e questo sembra essere il caso. Spero che lo risolveranno presto.
Dai

jap, sto anche usando Swift 2.1.1 e xCode 7.2.1 ottieni queste informazioni ... ti farò sapere se passa.
HitEmUp

1

Ecco un modo semplice per aggirarli ... memorizzare il nome del selettore al contrario, come "dlroWolleH", quindi invertire la stringa prima di chiamare il metodo.

Se Apple diventa saggia, puoi crittografarli.


48
Oppure puoi seguire le linee guida per la revisione e non utilizzare l'API privata.
Maciej Swic

Questo non fermerà nulla. Saranno in grado di rilevare se il metodo viene chiamato dal metodo stesso. Non dal nome del selettore che usi.
nickton

2
@nicktones è possibile non chiamare i metodi privati ​​fino a un certo punto in futuro, ad esempio dopo l'approvazione della tua app
powerj1984
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.