Хотя я всегда стараюсь проходить собеседования честно, иногда полезно иметь в рукаве несколько тузов.
Если вы знаете секретные языки ipa-нский и bundle-инди, вы можете удивить и порадовать интервьюера неожиданным отзывом — если потратите 10 минут на проверку и анализ его пакета приложений заранее.
Получение файла приложения
Первый шаг к проверке пакета приложений — это, естественно, получение пакета, который вы хотите проверить. Поэтому отправляйтесь в App Store и загружайте его прямо на свое устройство.
Apple намеренно затрудняет доступ к настоящему файлу приложения в хранилище устройства (по определенным причинам).
Поэтому нам нужно быть немного умнее.
На компьютере Mac необходимо загрузить программу Apple Configurator. Это программа от Apple, разработанная для управления парком iOS-устройств на предприятии или в школе.
У нее есть и удобная вторичная функция: она позволяет напрямую получать доступ к файлам приложений на iPhone с компьютера Mac.
Подключите iPhone с помощью кабеля и убедитесь, что он появился в Apple Configurator.
Нажмите на свое устройство, нажмите «Добавить», затем «Приложения».
Вы увидите список всех приложений, загруженных на ваше устройство (некоторые приложения, например банковские, не отображаются в этом списке, скорее всего, они защищаются от взлома таким способом). Теперь просто найдите нужное приложение.
Найдите в Finder (или, что еще лучше, в Терминале) папку /Users/[имя пользователя]/Library/Group\ Containers/K36BKF7T3D.group.com.apple.configurator
.
Теперь найдите и откройте папку Library/Caches/Assets/TemporaryItems
контейнера приложений Configurator.
В Apple Configurator, выбрав приложение, вы можете нажать кнопку «Добавить», чтобы загрузить его на свой Mac.
Файл .ipa появится в папке TemporaryItems/MobileApps
(ненадолго!) — скопируйте его в основную файловую систему, чтобы мы могли начать с ним работать.
Проверка файла .ipa
Несмотря на то, что у нас есть файл .ipa, доступ к нему не очевиден.
Есть специальный трюк, который мы можем проделать, чтобы заглянуть внутрь. Нам просто нужно понять, что такое .ipa: это сжатая форма приложения, которая передается нам через магазин приложений, когда мы скачиваем его.
После загрузки ваше iУстройство распаковывает его в файл .app.
Как это сделать? Просто добавьте расширение .zip в конец файла .ipa, и файл станет .ipa.zip.
Иконка поменяется, и мы сможем просто дважды щелкнуть по ней, чтобы заставить файл .ipa распаковаться как обычную папку файловой системы.
Теперь мы можем заглянуть внутрь приложения.
Файл .ipa содержит некоторые метаданные вместе с пакетом .app в подпапке Payload/.
Это немного проще просмотреть: мы можем щелкнуть правой кнопкой мыши и выбрать Show Package Contents.
Наконец, мы можем увидеть файлы, из которых состоит рассматриваемое нами приложение.
Заглянуть внутрь пакета ассетов (файл .car) сложнее. Другое приложение, AssetCatalogTinkerer, использует частный CoreImage API именно для этого.
Emerge Tools
Если вы хотите заглянуть немного глубже, обратите внимание на моих друзей из Emerge Tools.
Имея бесплатную пробную учетную запись, вы можете загрузить .ipa-файл прямо в их систему и увидеть полный “рентгеновский снимок” пакета, разбитый на фреймворки, модули, вплоть до файлов.
Секреты iBeer раскрыты: у нас…
Крошечные пенные пузырьки .png. Много крошечных пенных пузырьков .png.
Чтобы научиться читать эти “рентгеновские снимки”, требуется некоторое время, но, изучив их, можно многое узнать о приложении.
Например, вы можете определить:
- Есть ли большие файлы ресурсов (например, изображения размером более 10 МБ).
- Где модуль дублируется в нескольких целях.
- Не являются ли бинарные символы или другие метаданные причиной увеличения размера приложения.
- Вы даже можете смотреть на приложение в перспективе, сравнивая несколько версий чтобы определить, где происходит значительное изменение архитектуры.
Более того, когда вы станете экспертом, на собеседовании отлично прозвучит фраза: «Я посмотрел на пакет вашего приложения и заметил, что модуль NetworkCore дублируется — вы импортировали статическую библиотеку и в основное приложение, и в расширение для уведомлений. Вы могли бы перепаковать модуль в динамический фреймворк и сэкономить 14 МБ места».
Но учтите, что никто не любит умников.
Заключение
Если вам понравился этот пост, пожалуйста, расскажите мне, потому что я мог бы написать целую серию статей об анализе пакетов приложений и их последующей оптимизации.
Если вам не терпится, ознакомьтесь с моей недавней совместной статьей с Emerge Tools, Make Your iOS App Smaller with Dynamic Frameworks, где я объясняю, как можно создавать динамические фреймворки с помощью Swift Package Manager, и демонстрирую новую технику работы с общими каталогами активов.
Отдельное спасибо Алексею Альтер-Песоцкому, куратору рассылки «Мобильная автоматизация», который написал оригинальную статью о том, как скачивать файлы .ipa, из которой эта статья черпала вдохновение.