Подтвердить что ты не робот

Проверяйте личный API "использование" самостоятельно?

Итак, мы все знаем, что Apple запрещает использование частных или недокументированных API в приложениях iOS. У меня нет проблем с этим, так как есть здравые технические причины, почему это хорошая идея. Однако два раза сейчас у меня было отклонено приложение для использования частных API-интерфейсов, когда это было не так. Это не сложно - частные API-интерфейсы включают такие символы, как connectionState, setThumbnail, setOrder и так далее. Любые вызовы, которые вы делаете для методов, названных как таковые, будут помечены как использование частного API, даже если вызываемый метод является тем, что вы сами определили. Для программы, выполняющей что-то с соединениями, эскизами или порядком вещей, вышеупомянутые имена методов не так уж маловероятны. Отказаться от этого и переименовать метод и повторно отправить задерживает все, по крайней мере, на неделю, пока вы ждете нового обзора.

Итак, есть способ, используя nm, дампы классов iOS-фреймворков и т.д., чтобы узнать для себя, если ваши имена методов конфликтуют с чем-нибудь там? Если это так, у нас может быть возможность исправить это до выпуска и избежать ненужного отклонения.

4b9b3361

Ответ 1

Я бы предложил использовать App Scanner. Он анализирует ваш файл .app для использования частного API-метода. Текущая версия не поддерживает частные переменные экземпляра API, но может быть запущена в будущую версию.

Он будет ловить методы, которые были названы так же, как частный API-метод, даже если он имеет собственную реализацию. Кроме того, он поймает @selectors внутри методов (точно так же, как официальная автоматическая проверка iOS).

link → https://github.com/ChimpStudios/App-Scanner

Ответ 2

Это не совсем то, что вы ищете, но у Xcode есть два варианта проверки, которые, вероятно, стоит попробовать.

Во-первых, это настройка сборки. Это не совсем ясно, что он проверяет - документация не говорит, и даже переговоры по WWDC на самом деле не разработаны, но это потенциально полезно. Я предполагаю, что он не проверяет частные API.

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

Ответ 3

Вы пытались включить Validate Build Product в настройках? Предполагается выполнить все начальные проверки, выполненные в приложении во время процесса просмотра.

Ответ 4

В настоящее время Эрика Садун работает над тем, что она называет APIKit, которая является утилитой, которая сканирует ваш код и активно предупреждает вас об использовании частного API. http://ericasadun.com/2009/12/apikit-goes-beta/#c2

Единственная проблема в том, что я ничего не могу с ней поделать. Это, по-видимому, в бета-версии, но это было объявлено около 8 месяцев назад.

Я не знаю об этом текущем состоянии или действительно ли он доступен, но это то, что вы могли бы изучить. Может быть, даже попробуй связаться с ней самостоятельно? Эрика иногда висит в канале # iphone-dev на IRC на freenode, вы можете поймать ее там.

Ответ 5

Архивируйте свое приложение и подтвердите его. Это проходит через ваше приложение и говорит вам, что не так. Верная история, я просто испытал ее сам на libxslt/xml.
+ Не тратьте время на AppScanner (устарело) и все otool -L и т.д. (При запуске вы не знаете, какой селектор вы используете неправильно).