Невозможно настроить фоновое изображение для установки 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, которая, вероятно, должна быть исправлена.