Хотя я всегда стараюсь проходить собеседования, используя свои профессиональные качества, всегда полезно иметь несколько тузов в рукаве.
Если вы знаете секретные языки .ipa-ese и bundleglyphics, можете удивить и порадовать интервьюера неожиданным структурным ходом — если заранее потратите 10 минут на инспектирование и анализ App Bundle.
Получение файла приложения
Первый шаг к инспектированию App Bundle — это получение самого бандла, который вам нужно проинспектировать. Поэтому перейдите в App Store и загрузите его прямо на свое устройство.

Apple намеренно затрудняет просмотр фактического файла в хранилище устройства (по определенным причинам).
Поэтому нужно проявить немного хитрости.

На Mac нужно загрузить программу Apple Configurator. Это ПО от Apple, предназначенное для управления парком iOS-устройств на предприятии или в школе.
Программа обладает удобной вторичной функцией: она позволяет напрямую получать доступ к файлам приложений на iPhone с Mac.
Подключите iPhone с помощью кабеля и убедитесь в том, что Apple Configurator его «увидел».

Кликните на свое устройство, нажмите «Add» («Добавить»), затем «Apps» («Приложения»).
Вы увидите список всех приложений, загруженных на ваше устройство*. Теперь просто найдите нужное приложение.
* Некоторые приложения, например банковские, не отображаются в этом списке. Скорее всего, в них установлена защита от загрузки таким способом.

Найдите в Finder (или, что еще лучше, в Terminal) следующее: /Users/[имя пользователя]/Library/Group\Containers/K36BKF7T3D.group.com.apple.configurator.
Теперь найдите и откройте папку Library/Caches/Assets/TemporaryItems для контейнера приложения Configurator.

В Apple Configurator, выбрав приложение, нажмите кнопку «Add», чтобы загрузить его на свой Mac.
В папке TemporaryItems/MobileApps появится файл .ipa (ненадолго!). Скопируйте его в основную файловую систему, чтобы можно было начать с ним работать.

Инспектирование файла .ipa
Итак, у нас есть файл .ipa. Но не совсем понятно, как получить к нему доступ.

Чтобы заглянуть внутрь, проделаем особый трюк. Нам просто нужно понять, что такое .ipa: это сжатый формат приложения, который передается через App Store, когда мы скачиваем его.
После загрузки устройство на базе iOS распаковывает его в файл .app.
В чем же состоит трюк? Просто добавьте расширение .zip в конец файла .ipa, и файл примет вид .ipa.zip.

Иконка изменится, и мы просто дважды щелкаем по ней, чтобы файл .ipa распаковался как обычная папка файловой системы.

Теперь можно заглянуть внутрь приложения.
Файл .ipa содержит некоторые метаданные, а также бандл .app в подпапке Payload/.
Тут все просто: щелкаем правой кнопкой мыши и выбираем «Show Package Contents» («Показать содержимое пакета»).

Наконец, мы можем увидеть файлы, из которых состоит приложение.

Заглянуть внутрь бандла активов (файл .car) сложнее. Но есть приложение AssetCatalogTinkerer, которое использует частный API CoreImage именно для этой цели.
Emerge Tools
Если хотите пойти еще дальше, обратитесь к моим друзьям из Emerge Tools.
Работая под пробной бесплатной учетной записью, вы можете загрузить файл .ipa прямо в их систему и увидеть полный рентгеновский снимок бандла, с разбитием на фреймворки и модули, вплоть до файлов.

Секрет iBeer раскрыт: он заключается… в крошечных пенных пузырьках в формате .png. Много крошечных пенных пузырьков .png.

Чтобы научиться читать эти рентгеновские снимки, требуется некоторое время, но, изучив их, вы многое узнаете о приложении.
Например, можно определить следующее:
- Попали ли туда случайно массивные файлы активов (например, изображения размером более 10 МБ).
- Дублируется ли модуль в нескольких целевых объектах.
- Не являются ли бинарные символы или другие метаданные причиной раздутости.
Вы даже можете посмотреть на приложение с точки зрения временной протяженности, чтобы определить, в каком месте может произойти значительная миграция архитектуры.
Более того, когда вы станете экспертом, на собеседовании мало что прозвучит эффектнее, чем следующая фраза: «Я посмотрел на бандл вашего приложения и обнаружил, что модуль NetworkCore дублируется — вы импортировали статическую библиотеку и в основное приложение, и в расширение ресурса уведомлений. Вы могли бы перепаковать модуль в динамический фреймворк и сэкономить 14 МБ места».
Но, опять же, никто не любит умников.
Читайте также:
- Миграция UI-ориентированной библиотеки Android на Compose Multiplatform (Android/iOS)
- Дорожная карта iOS для разработчиков Android: основы
- Как создать собственную библиотеку на Kotlin Multiplatform
Читайте нас в Telegram, VK и Дзен
Перевод статьи Jacob Bartlett: Impress at Job Interviews by Inspecting their App Bundle





