Невозможно настроить фоновое изображение для установки DMG с помощью CMake

Я работаю с CMake 2.8.10.2 на Mac OS X 10.7.5.

Я настроил CMake для создания простого приложения с Xcode, который создает пустое окно. Затем я попытался настроить CMake для создания DMG-установки программы, задающей фоновое изображение, используя:

set (CPACK_DMG_BACKGROUND_IMAGE/путь/в/изображение)

и custom.DS_Store, чтобы установить размер окна и размещение значков с помощью:

установить (файл CPACK_DMG_DS_STORE/путь/в/DS_Store)

Xcode успешно создаст приложение и создаст образ диска. Когда я монтирую изображение, он подходит к правильному размеру и размещению значков, однако фон всегда устанавливается на белый вместо указанного фонового изображения.

Что необходимо для правильного отображения фона на изображении диска?

Ответ 1

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

Чтобы фон работал на установочном изображении, в основном должны произойти две вещи: фоновый файл должен существовать в установочном образе, а файл .DS_Store в корне образа должен быть настроен для использования этого фона.

Файл .DS_Store можно настроить, установив установочный образ в состоянии записи, а затем выбрав Показать параметры просмотра в меню "Поиск". Оттуда кто-то выберет параметр "Изображение" для фона и перетащите фоновый файл в местозаполнитель в панели Показать параметры просмотра.

При работе с CPack трюк заключается в возможности перетаскивания изображения. Когда кто-то устанавливает фон для установки, строит и монтирует изображение, он не будет выглядеть, как будто какой-либо фон перетаскивается на панель Показать параметры просмотра. Если кто-то заходит в Терминал и делает

ls -a

в корне установленной установки, эта команда будет, среди прочего, содержать файл с именем background.png. Этот файл не отображается в Finder.

Причина, по которой этот файл отображается в терминале, а не в Finder, заключается в том, что он имеет расширенные атрибуты, которые делают его скрытым для Finder. Поскольку файл скрыт от Finder, невозможно перетащить файл на панель Показать параметры просмотра. Выполнение

ls [email protected]

покажет, какие расширенные атрибуты применяются к файлу. Должен быть только один вызов com.apple.FinderInfo. Удаление этого атрибута должно сделать файл видимым в Finder. Атрибут можно удалить с помощью этой команды из терминала

xattr -d com.apple.FinderInfo background.png

После удаления атрибута фоновый файл по-прежнему не будет отображаться в Finder сразу. Кому-то придется выгружать и монтировать установочный образ. Как только это произойдет, фоновый файл должен появиться в Finder, и кто-то может перетащить его на панель Показать параметры просмотра, что приведет к отображению фонового изображения в окне Finder для установочного образа. После этого кто-то может скопировать файл .DS_Store из корня установочного образа и применить его к атрибуту CPACK_DMG_DS_STORE, а фоновое изображение должно появляться всякий раз, когда создается установочный образ.

Ответ 2

@Ответ TronThomas очень помог мне. Чтобы не вытеснить его ответ, здесь появилась дополнительная информация о процессе, который я только что проработал. Для справки, это с MacOS Sierra и CMake 3.6.2.

  • Установите фоновое изображение с помощью set(CPACK_DMG_BACKGROUND_IMAGE /path/to/image)
  • Создайте файл DMG с помощью генератора CPack DragNDrop
  • Смонтируйте изображение в режиме чтения/записи с помощью теневого файла hdiutil attach mypackage.dmg -shadow junk.dmg
  • В этот момент мы не видим фоновое изображение, но оно существует в папке .background в DMG файле. Наша стратегия будет заключаться в том, чтобы использовать Finder для создания окна точно, как мы хотим, а затем скопируем файл .DS_Store.
  • В меню Finder нажмите View->Show View Options
  • В разделе Background: нажмите кнопку Picture. Затем щелкните изображение над текстом Drag Image Here. Обратите внимание: текущее представление должно быть as Icons, иначе этого диалога не будет.
  • В диалоговом окне файла вернитесь к установленному образцу DMG. Затем нажмите cmd-shift-. Это должно показать скрытые папки. Отсюда перейдите в папку .background и выберите фоновое изображение.
  • Если все работает правильно, фоновое изображение теперь должно быть видимым.
  • Отрегулируйте размер окон и просмотрите или скройте панели инструментов по желанию в меню View. Точные настройки будут реплицированы установщиком.
  • Скопируйте скрытый файл .DS_Store в корневой каталог тома в другое место. Трюк cmd-shift-. можно использовать для просмотра файла или просто использовать терминал в этот момент, чтобы скопировать все. Обратите внимание: мы можем изменить имя этого файла на DS_Store, чтобы он не скрывался при его сохранении.
  • Извлеките DMG файл из Finder. Удалите junk.dmg или оставшиеся теневые файлы.
  • Вернемся в CMakeLists.txt, установите переменную set(CPACK_DMG_DS_STORE /path/to/DS_Store) Это файл, который мы только что создали, и отошел от него.
  • Восстановите файл DMG с помощью CPack. Все должно быть как прежде.

В качестве предупреждения существует много информации, которая хранится в файле .DS_Store, таком как расположение файлов, имена пользователей и т.п. На данный момент я не знаю, как управлять этой информацией, поэтому будьте осторожны при распространении финального файла DMG. Если вам интересно, что там, используйте hex-редактор, например xxd.

В качестве краткого комментария этот процесс очень тупой. Тем не менее, я не думаю, что это ошибка Kitware. Хотя, они могли документировать процесс лучше. Из того, что я могу сказать, формат файла .DS_Store не был хорошо документирован или раскрыт, поэтому мы в основном вынуждены использовать Finder для его создания. Это проблема MacOS, которая, вероятно, должна быть исправлена.