Отказ магазина приложений Apple; Как узнать, какая библиотека имеет строку, ссылающуюся на переход: didComplete:

Мы получили отказ от Apple. Происходит все время, верно? Но на этот раз мы немного в тупике. Старые способы выяснить это не дают ключа к решению.

От Apple:

  1. 5 ПРОИЗВОДИТЕЛЬНОСТЬ: ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ

Производительность - 2.5.1

Ваше приложение использует или ссылается на следующие закрытые API:

transition:didComplete:

Использование непубличных API не разрешено в App Store, потому что это может привести к ухудшению пользовательского опыта в случае изменения этих API.

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

Мы знаем, что это не символ, otool и nm ничего не находят. strings действительно находит совпадение (1 раз в сборке отладки и 2 раза в нашей окончательной сборке выпуска, если это является подсказкой или имеет значение). Похоже, что это вызов UIKit, поэтому я предполагаю, что это не так.

Кто-нибудь может предложить дальнейшие действия?

Мы просматриваем все архивы/библиотеки/двоичные файлы, на которые мы можем найти ссылки в проекте, и выполняем поиск строк. Если это не удастся, мы собираемся вырвать все SDK и выполнить деструктивный бинарный поиск, чтобы найти виновную сторону... Если есть горячая подсказка о том, как решить эту проблему, я весь слушаю!

Вот вывод командной строки (строки, otool и nm):

Dev-MBP:helloworld.app codemonkey$ otool -ov helloworld | grep -C 10 "transition:didComplete"
Dev-MBP:helloworld.app codemonkey$ nm helloworld | grep -C 10 "transition:didComplete"
Dev-MBP:helloworld.app codemonkey$ strings helloworld | grep -C 3 "transition:didComplete"
destinationLayout
prepareTransition:
performTransition:
transition:didComplete:
destinationViewController
sourceViewController
isViewTransition
--
--
destinationLayout
prepareTransition:
performTransition:
transition:didComplete:
destinationViewController
sourceViewController
isViewTransition
Dev-MBP:helloworld.app codemonkey$ strings helloworld | grep "transition:didComplete"
transition:didComplete:
transition:didComplete:
Dev-MBP:helloworld.app codemonkey$ 

person Hunter-Orionnoir    schedule 29.09.2016    source источник
comment
попробуйте grep -R 'transition:didComplete’ *, -r ИЛИ -R вместо -C   -  person TonyMkenu    schedule 29.09.2016
comment
Если вы создадите свое приложение с картой ссылок, это должно показать вам, что разрешает символ.   -  person Phillip Mills    schedule 30.09.2016


Ответы (1)


Библиотека, содержащая строку «transition: didComplete:», исходила из 4.x библиотек Google Play Games для С++. Мы также нашли его в последней версии 5.1.1.

Команда/скрипт, который я выполнил, чтобы найти эту строку внутри файла, вероятно, является наиболее полезной частью этого ответа:

Dev-MBP:helloworldproj codemonkey$ find . -type f | while read i; do grep 'transition:didComplete' "$i" >/dev/null; [ $? == 0 ] && echo $i; done

Запустите это из корня вашего проекта iOS (при условии, что все добавленные вами фреймворки находятся в этом каталоге)

Теперь мы можем обсудить наиболее эффективный способ написания этой команды. У меня уже было одно предложение:

От друга:

Естественно, его можно было бы улучшить. Опция -l для grep делает то же самое, так что...

find . -type f |
    while read i
    do
        grep -l 'transition:didComplete' "$i"
    done
person Hunter-Orionnoir    schedule 07.10.2016