Wynik analizy interfejsu API jest zbyt duży podczas przesyłania aplikacji do sklepu Mac


107

Mam zamiar przesłać moją pierwszą aplikację na Maca do Apple Store

Naprawiono wszystkie błędy walidacji ikony, kategorii ...

Ale potem przeszedłem walidację z ostrzeżeniem:

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.

Moje przesłane pliki zostały odrzucone z powodu: „Nieprawidłowy plik binarny”
Czy ktoś ma doświadczenie w tej sprawie?


UPDATE: to ostrzeżenie nie jest powodem odrzucenia, może to być problem z archiwizacją aplikacji. Udało mi się udostępnić moją aplikację do sklepu.

Więc możemy to spokojnie zignorować.


1
Czy mógłbyś rozwiązać ten problem? Mam ten sam problem i nie wiem, co robić!
nosmirck

1
Otrzymałem to też. Nie mogę nigdzie znaleźć źródła, aby dokładnie wyjaśnić, co to znaczy?
Andrew Davis,

5
Właśnie zaktualizowałem moją bardzo małą aplikację wysyłkową z Swift 1.2 do Swift 2 i otrzymałem ten błąd. Brak dodatkowych funkcji. To właściwie musi być wadą ich narzędzia analitycznego. (Dotyczy to aplikacji na iOS, w Xcode 7, a nie w sklepie Mac.)
Ray Fix

2
To samo co Ray Fix, bez prywatnego API, po prostu uaktualniam kod z Objective-C do Swift
Jerome Diaz

1
Tak samo jak powyżej, bez prywatnych interfejsów API, właśnie użyłem Xcode 7 i otrzymałem.
DevC

Odpowiedzi:


65

Apple zabrania używania prywatnych lub nieudokumentowanych interfejsów API w aplikacjach na iOS. Wszelkie wywołania metod, które mają taką samą nazwę jak prywatne lub nieudokumentowane metody API, będą oznaczone jako prywatne użycie interfejsu API, nawet jeśli wywoływana metoda jest czymś, co sam zdefiniowałeś.

App Loader wykonuje wstępne skanowanie, sprawdzając nazwy metod, dostęp do zmiennych instancji, a nawet użycie @selectora z prywatnymi nazwami metod. Narzędzie ładujące aplikacje nie zawsze wykonuje dobrą robotę, a im więcej masz plików źródłowych, tym większe prawdopodobieństwo, że wyświetli ostrzeżenie, że wygenerowany przez niego plik analizy interfejsu API jest „za duży”.

Na szczęście mimo ostrzeżenia nadal możesz złożyć wniosek. Apple sprawdzi to wewnętrznie, a jeśli coś zostanie odrzucone z powodu nakładających się nazw, będziesz musiał ponownie przejść przez proces przeglądu.

Erika Sadun próbowała stworzyć aplikację o nazwie API Kit, która przeprowadziłaby skanowanie za Ciebie, ale wydaje się, że porzuciła swoją pracę i usunęła wszelkie ślady aplikacji ze swojej strony internetowej.

Chimp Studios stworzyło App Scanner, aby zrobić to samo, ale nie był aktualizowany od 2011 roku. Niestety, w przypadku dużych projektów - w tym projektów z dużą ilością dodatkowych strąków z CocoaPods - nie ma obecnie (2014) dobrego sposób rozwiązania tego problemu inny niż proaktywne nazywanie rzeczy w taki sposób, aby nie kolidowały z prywatnymi metodami API i nazwami instancji.

Możesz aktywnie poznawać konwencje nazewnictwa kakao firmy Apple i próbować przewidywać. To zmniejszy przyszłe bóle głowy. Dopóki Apple nie wprowadzi czegoś w rodzaju przestrzeni nazw, od czasu do czasu możemy napotykać ten problem.

Błąd „nieprawidłowy plik binarny” może mieć wiele przyczyn, ale jest całkowicie niezwiązany z dokumentem analizy interfejsu API utworzonym przez narzędzie do ładowania aplikacji.

Powinieneś wiedzieć, że nawet przy skanowaniu nadal istnieją sposoby obejścia zakazu używania prywatnych / nieudokumentowanych interfejsów API. :)


Czy chcesz powiedzieć, że ten „zbyt duży” błąd jest błędnie oznaczony jako błąd? Że zawsze wskazuje na jakiś rodzaj nieprawidłowego użycia API? Jak nawiązałeś to połączenie?
Chris Prince

Zdaję sobie sprawę, że pytanie dotyczyło sklepu z aplikacjami Mac, ale w przypadku sklepu z aplikacjami na iOS ta odpowiedź nie jest w pełni poprawna. Właśnie otrzymałem to ostrzeżenie, kiedy próbowałem zweryfikować moją aplikację za pomocą Xcode 7 GM, ale kiedy faktycznie załadowałem ją do ITC z Xcode 7 GM, nie było żadnych problemów.
Chris Prince,

Jaka jest wskazówka ... którą sugerujesz w swoim ostatnim zdaniu?
goodguys_activate

Dziękuję za bardzo pomocną odpowiedź. Czy wiesz, gdzie znajduje się plik analizy API. Chciałbym usunąć każde ostrzeżenie z mojej aplikacji
user462990

Więc jeśli iTunes Connects pokazuje, że kompilacja została przesłana, oznacza to, że pomimo tego komunikatu o błędzie, udało się? A co teraz robię, to czekam na ich akceptację?
Jay

10

Po pierwszym pojawieniu się tego problemu w moim pierwszym projekcie Swift wygląda na to, że najczęstszą odpowiedzią na to pytanie jest teraz:

Jeśli używasz Swift 2.xi XCode 7, pojawi się ten błąd. Po prostu to zignoruj.

[AKTUALIZACJA: Wydaje się, że wdrożenie XCode 7.3 i iOS 9.3 rozwiązało ten problem!]


Używam Swift 2.1 w Xcode 7.3 i wydaje się, że tak jest. Miejmy nadzieję, że wkrótce to naprawią.
Dai

jap, używam również Swift 2.1.1 i xCode 7.2.1. Zdobądź te informacje ... dam ci znać, jeśli przejdzie.
HitEmUp

1

Oto prosty sposób na obejście ich ... zapisz nazwę selektora w odwrotnej kolejności, na przykład "dlroWolleH", a następnie odwróć łańcuch przed wywołaniem metody.

Jeśli Apple zrozumie, możesz je zaszyfrować.


48
Możesz też postępować zgodnie ze wskazówkami dotyczącymi recenzji i nie używać prywatnego interfejsu API.
Maciej Swic

To niczego nie powstrzyma. Będą w stanie wykryć, czy metoda jest wywoływana z samej metody. Nie z nazwy selektora, której używasz.
nicktones

2
@nicktones można nie wywoływać metod prywatnych do pewnego momentu w przyszłości, na przykład po zatwierdzeniu aplikacji
powerj1984
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.