Полученный в результате анализ API слишком велик при загрузке приложения в магазин Mac

107

Я собираюсь загрузить свое первое приложение для Mac в Apple Store

И исправили все ошибки проверки значка, категории ...

Но после этого я прошел проверку с предупреждением:

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.

И мою загрузку отклонят по причине: "Недействительный бинарник".
Есть ли у кого-нибудь опыт такого рода?


ОБНОВЛЕНИЕ: это предупреждение не является причиной отказа, возможно, проблема с архивированием приложения. Я успешно выпустил приложение в магазин.

Так что мы можем игнорировать это.

араса
источник
1
Не могли бы вы решить эту проблему? У меня такая же проблема, и я не знаю, что делать!
nosmirck
1
Получил и это тоже. Я нигде не могу найти источник, чтобы точно объяснить, что это означает?
Эндрю Дэвис
5
Я только что обновил свое очень маленькое приложение для доставки с Swift 1.2 до Swift 2 и получил эту ошибку. Никакого дополнительного функционала. Это в значительной степени должно быть недостатком в их инструменте анализа. (Это для приложения iOS, в Xcode 7, а не в магазине Mac.)
Ray Fix
2
То же, что и Ray Fix, без использования какого-либо частного API, просто обновление кода с Objective-C до Swift
Джером Диаз
1
То же, что и выше, без частных API, просто использовал Xcode 7, и я получил.
DevC

Ответы:

65

Apple запрещает использовать частные или недокументированные API в приложениях iOS. Любые вызовы, которые вы делаете к методам, которые имеют то же имя, что и частные или недокументированные методы API, будут помечены как использование частного API, даже если вызываемый метод является тем, что вы определили сами.

Загрузчик приложений выполняет начальное сканирование, проверяя имена методов, доступ к переменной экземпляра и даже использование @selector с именами частных методов. Загрузчик приложений не всегда хорошо справляется со своей задачей, и чем больше у вас исходных файлов, тем больше вероятность того, что он выдаст предупреждение о том, что созданный им файл анализа API «слишком велик».

К счастью, вы все еще можете подать заявку, несмотря на предупреждение. Apple проверит это изнутри, и если что-то будет отклонено из-за дублирования имен, вам придется снова пройти через процесс проверки.

Эрика Садун попыталась создать приложение под названием API Kit, которое будет сканировать за вас, но, похоже, она отказалась от своей работы и удалила все следы приложения со своего веб-сайта.

Chimp Studios создали App Scanner, чтобы делать то же самое, но он не обновлялся с 2011 года. К сожалению, для крупных проектов - и это включает в себя проекты с большим количеством дополнительных модулей из CocoaPods - в настоящее время (2014 г.) нет хорошего способ решения этой проблемы, кроме упреждающего именования вещей, чтобы они не конфликтовали с частными методами API и именами экземпляров.

Вы можете заранее узнать о соглашениях Apple об именах какао и попытаться предугадать. Это уменьшит головные боли в будущем. Однако до тех пор, пока Apple не представит что-то вроде пространств имен, мы можем время от времени сталкиваться с этой проблемой.

Ошибка "недопустимый двоичный код" может быть вызвана рядом причин, но она полностью не связана с документом анализа API, созданным загрузчиком приложений.

Вы должны знать, что даже при сканировании есть способы обойти запрет на использование частных / недокументированных API. :)

lswank
источник
Вы хотите сказать, что эта "слишком большая" ошибка является ошибкой с неправильной маркировкой? Что это всегда указывает на некорректное использование API? Как вы установили эту связь?
Крис Принс
Я понимаю, что вопрос касался магазина приложений Mac, но для магазина приложений iOS этот ответ не совсем правильный. Я только что это предупреждение , когда я попытался проверить мое приложение с Xcode 7 GM, но когда я фактически загрузил его КВТ с Xcode 7 GM, не было ни одной проблемы.
Крис Принс
Какой намек ... что вы имеете в виду в своем последнем предложении?
goodguys_activate
Спасибо за очень полезный ответ. Вы знаете, где находится файл анализа API. Я бы хотел искоренить все предупреждения из моего приложения
user462990
Итак, если iTunes Connects показывает, что сборка загружена, это означает, что, несмотря на это сообщение об ошибке, она прошла? И все, что я сейчас делаю, это жду их одобрения?
Джей
10

После первого столкновения с этой проблемой в моем первом проекте Swift, похоже, что наиболее частый ответ на этот вопрос сейчас:

Если вы используете Swift 2.x и XCode 7, вы получите эту ошибку. Просто не обращай на это внимания.

[ОБНОВЛЕНИЕ: выпуск XCode 7.3 и iOS 9.3, похоже, устранил эту проблему!]

Ричард
источник
Я использую Swift 2.1 в Xcode 7.3, и, похоже, это так. Надеюсь, они скоро это исправят.
Дай,
jap, я также использую Swift 2.1.1 и xCode 7.2.1, получите эту информацию ... я дам вам знать, если она пройдет.
HitEmUp
1

Вот простой способ их обойти ... сохранить имя селектора в обратном порядке, например, «dlroWolleH», а затем перевернуть строку перед вызовом метода.

Если Apple поймет это, вы можете их зашифровать.

Майк Кроуфорд
источник
48
Или вы можете следовать рекомендациям по обзору и не использовать частный API.
Maciej Swic
Это ничего не остановит. Они смогут определить, вызывается ли метод из самого метода. Не по имени используемого селектора.
nicktones
2
@nicktones можно не вызывать частные методы до определенного момента в будущем, например, после утверждения вашего приложения
powerj1984