Если вам вдруг захотелось достать из приложения iOS понравившуюся картинку, то это хоть и не элементарно, но вполне возможно. Почему не элементарно? Потому что по крайней мере часть png-файлов невозможно просмотреть из-за особенностей адаптации их под видеопамять iPhone и iPad.

С какой целью – неважно, но понадобилось мне посмотреть на файлы изображений png в одной программе для iOS. Пусть это будет… Да, Remote.

Добраться до файлов просто. Заходим в iTunes, находим программу, Secondary Click на ней и “Show in Finder”:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Копирую найденный ipa-файл в удобное место для дальнейших разборок:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Изменяю расширение .ipa на .zip:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

И открываю архив, что приводит к извлечению файлов:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Захожу в Payload, выбираю файл приложения, Secondary Click, “Show Package Content”:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Вижу все файлы, входящие в программу:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Но вот незадача – содержимое части png-файлов не отображается:

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Причины описаны в статьях “iPhone PNG images” и “iPhone “Optimized” PNGs“. Если коротко, то XCode при упаковке приложения под iOS адаптирует png под особенности организации видеопамяти iPhone и iPad, а именно меняет местами октеты красного и синего цветов и модифицирует альфа-канал, чтобы при загрузке не производить дополнительные вычисления.

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

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Говорю спасибо Axel E. Brzostowski за программу iPhone PNG Images Normalizer, написанную на Python. Я пробовал две другие программы, но они часть файлов не могли раскодировать.

Списываю архив и раскручиваю программу в ~/bin:

$ curl "http://www.axelbrz.com.ar/ipin1.0.zip" -o ~/Downloads/ipin1.0.zip
$ mkdir -p ~/bin
$ unzip ~/Downloads/ipin1.0.zip -d ~/bin/

Я копировал ранее файлы в ~/Downloads/Rev/images. Смотрю, что не так с файлами. Посмотрите на нереальный размер и битность:

$ cd ~/Downloads/Rev/images/
$ file Bar-itunes.audiobooks.png
Bar-itunes.audiobooks.png: PNG image, 805314562 x 284378236, 0-bit grayscale,

Натравливаю на файлы скрипт:

$ cd ~/Downloads/Rev/images/
$ python ~/bin/ipin.py
-----------------------------------
 iPhone PNG Images Normalizer v1.0
-----------------------------------

[+] Searching PNG files... ok

 -  12 PNG files were found at this folder (and subfolders).

[?] Do you want to normalize all images (Y/N)? Y
0.00% ./Bar-itunes.audiobooks.png
8.33% ./Bar-itunes.audiobooks@2x.png
16.67% ./Bar-itunes.computers.png
25.00% ./Bar-itunes.computers@2x.png
33.33% ./Bar-itunes.genres.png
41.67% ./Bar-itunes.genres@2x.png
50.00% ./Bar-itunes.iTunesU.png
58.33% ./Bar-itunes.iTunesU@2x.png
66.67% ./Bar-itunes.movies.png
75.00% ./Bar-itunes.movies@2x.png
83.33% ./Bar-itunes.music.albums.png
91.67% ./Bar-itunes.music.albums@2x.png

[+] 12 PNG files were normalized.

Файлы починились? Да, всё в порядке:

$ file Bar-itunes.audiobooks.png
Bar-itunes.audiobooks.png: PNG image, 22 x 26, 8-bit/color RGBA, non-interlaced

Извлечение файлов ресурсов из приложений iOS и декодирование изображений png

Наслаждаюсь очередной решённой задачей.

P.S. А иконку для статьи я взял из файла iTunesArtwork, добавив к нему расширение .png.