Портирование приложений на Mac OS X

JagdCrab
OSX Support Macintosh
[HR="1"][/HR]Многие люди считают что Mac это неудобно и не функционально, что на него нету софта, и кроме стандартных функций от него ничего не добьешся... Многие не хотят покупать Mac т.к. любят играть, и так же думают что игры на Mac не выходят вообще, да и о возможностях современных программ портироваться (переноситься) на другие платформы, мало кто знает. А многие кто знают - считают что это очень сложно и редко. Это заблуждение, хотя надо признать что портирование некоторых приложений это искуство которое могут осилить лишь программисты и "системщики", однако это лишь случаи. Они единичны, и большенство программ и игр можно портировать на обычном компьютере не распологая какими либо специфическими познаниями в программировании. Как примерно это выглядит, я попробую вам объяснить.

Итак для начала разберемся что такое порт, портирование, форк, движки, враперы (Wrapper), интерпретация и эмуляция. Разберемся что вы хотите сделать, что можете, и какими средствами.

Портирование - перенос програмного обеспечения из одной системы в другую, результат этого действия называется порт. При портировании не обязательно использовать открытые исходные коды т.к. при портировании обычно используется враппер
Враппер (Wrapper) - программа которая преобразует машинный код для вызова функций API одной системы в другую.
Форк - создание новой программы базирующийся на старой для другой платформы.
Эмуляция - создание средств исполнения программы одной операционной системы в другой.
Интерпретация - исполнение команд средствами не входящими саму в программу.

Мы же будем говорить только о портировании, почему? Ну во первых форк - только для програмистов, хороших программистов. Эмуляция - это в основном Parallels Desktop  и VirtualBox, т.е. виртуальные машины c которыми работают правила обычного компьютера. Интерпретация - Bourne Again Shell и в какой то мере CrossOver, для которых критерий работы - лишь умение кодеров которые написали данные программы.
Если раньше портирование обозначало изменение исходных кодов (переписывались библиотеки, API или целые языки программирования для работы на другой платформе), сейчас благодаря развитию как техники так и ПО портирование может осуществляться из уже готовой программы, для этого есть довольно большое количество разнообразных способов начиная от создания "слепка" оперативной памяти для исполнения его на других системах, до использования дополнительных промежуточных этапов в выполнении программы - враперов. По сути Врапер это то что обеспечивает взаимодействие программы с ОС или железом для которого оно не предназначется. Можно сравнить его с переводчиком. По методам работы мы можем разделить их на три вида - те которые занимаются перекомпиляцией исходного кода под другую платформу (например wxWigets), те которые занимаются переводом "полуоткомпилированого" кода (например API графических оболочек), или же те которые обрабатывают уже готовую программу.
И еще, прежде чем начнем, насколько легально портирование игр? Относительно, есть одно условие - что вы купили - с тем вольны делать что хотите, пока вы ее не распространяете пиратским путем или не продаете. Но так же многие правообладатели вписывают дополнительные условия в лицензионные соглашения (например Apple вписала в Лицензионное соглашение пунк которым разрешает ставить Mac OS X только на компьютеры от Apple чем поставила "Хакинтош" (читай порт Mac OS X) вне закона), так что в конечном итоге чем меньше правообладатель знает о вас - тем лучше.

Так что необходимо при портировании?
Исходный материал. Т.е. сама программа или игра в работоспособном виде, т.е. на стоящем рядом PC, интерпритируемая в CrossOver или работающая на Виртуальной машине.
Враппер. Или то чем мы будем обрабатывать код. В мануале я буду использовать CiderX (скачать его можно в конце поста), так же есть еще CXZ, CXS, WineSkin, Grim's Ripper, и порядка четырех тысяч разных версий простого Cider'а.  
X11. X11 это кросплатформенный диспетчер окна (именно на Mac OS X он называется XQuzrtz). Т.е. в чем порт сможет рабоать на конечной платформе. Он есть в Mac OS X по умолчанию, и вы можете найти его в "Служебных Утилитах" или установить с диска Mac OS X отдельно.

[HR="1"][/HR]
Портируем!
[HR="1"][/HR]

Как я уже говорил, для первого раза мы будем использовать CiderX.
CiderX это гибрид двух других врапперов - Cider и CXZ. Он впитал в себя лучшее что есть в той и в другой системе, и обладает скоростью работы Cider'а (который портирует напрямую, без использования дополнительных кросс-библиотек), а так же плюсами CXZ невозможными при "прямом портировании" (например использование инсталяторов, оконого режима, или некоторых трюков позволяющих подключать отдельные программы, такие как например .NET Framework).

Рассмотрим весь набор инструментов идущих в составе CiderX:


XInstaller
Дает возможность ставить exe файлы без оригинальной среды программы.
Сразу замечу что он не подходит для установки дисков или же дополнительных библиотек (DirectX например)
Инструмент удобный, но использовать его лучше только для программ. Небольших программ. Игры и более сложный софт лучше ставить именно в оригинальную среду, в идеале - на другой компьютер. Это вызвано тем что после установки и перед непосредственно портированием настоятельно рекомендуется запустить программу хотябы один раз.

XRegistry
Редактор реестра для портируемых приложений.
В основном используется для исправления или предотвращения проблем при портировании.

XConfig
Редактор настроек самого врапера.
Состоит из редактора Cider и редактора CXZ.
О самих настройках мы поговорим уть позже.

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

CustomEXEMaker
Утилита для создания исполняемых файлов.
Полностью аналогична той что используется в CXZ но с поддержкой Cider.

EngineConfig
Позволяет менять отдельные движки Cider или CXZ, без пересоздания основного врапаера.
О всех настройках лучше почитать отдельно прежде чем менять.

WrapperConfig.plist
Непосредственно plist файл который указывает что и из какой директории надо враппить.

Ну и набор папок среди которых C:// "понарошку" и папка с Логами.

Теперь шаг за шагом:[HR="1"][/HR]

Для начала устанавливаем программу (в инструкции я буду издеваться над Total Overdose) на компьютер с  Windows или на виртуальную машину (CrossOver тоже сойдет). Запускаем ее, и выходим. Если на игре есть проверка диска или сама игра работает только с диском - необходимо установить NoCD. Все патчи или изменения в игре так же надо совершать сейчас.
Теперь нам необходимо выудить настройки из реестра, для этого запустим "Редактор рееста" введя в "Выполнить" команду regedit.
Искать нужные значения будем встроеным поиском (Правка - Найти), как только нужные значения получены экспортируем всю папку в организованый *.reg файл чтобы их можно было перенести нажатием на "Экспорт". Эту операцию возможно придеться повторить пару раз пока вы не найдете все ключи реестра (их может быть от одного до десятка, главное смотрите за тем что он вам находит ибо так же в куче поиска могут оказаться значения от рабочего стола с новыми иконками и.т.п.)

Как только все будет готово - копируйте папку с файлами игры и файлы *.reg на Мак:

Теперь запускаем The CiderX Porter из папки Applications и выбираем движек враппера на котором будет баироваться наш порт, сначала вам предложат выбрать сам движк а потом его версию:

Что выбрать?
Cider - более быстрый, с помощью него портируются комерчиские проэкты (такие как EVE Online, Sims 3, и.т.п.), но вот только достать его в чистом виде - невозможно. Его раздают только разработчикам. А нам, остается лишь использовать Cider который разработчики вставили в свое приложение, а другие его из этого же приложения выковорили. Отсюда все версии Cider идут с двумя обозначениями: номер и имя. Имя - это всегда игра из которой эта версия выделена. Номер задает тот кто выделил, он не обязательно последователен, но чем позже произведена игра - тем выше номер. Чтобы нам было проще выбрать из списка номеров CiderX предложит нам описание каждого.
CXZ - более универсален т.к. поставляется к нам в открытом виде, "девственно чистым". Однако он не может работать без CXZ Engines, которые необходимо ставить отдельно. Последний на сегодняшний день CXZ Ebony для игр и CXZ Ivony для приложений.

После того как вы выберете движек The CiderX Porter закроется, а на рабочем столе появиться CiderX - это и есть врапер в который мы сейчас засунем обьект портирования.
Правый клик на CiderX - "Показать содержимое пакета". Видим следующую картину:

Открываем C_Drive (тот самый виртуальный диск C://) и создам в нем папку для игры/программы (лично я создал папку Total Overdose в Program Files) после этого запускаем XRegistry и импортируем в фреестр врапера *.reg файлы (Реестр - Импорт).

Теперь открываем WrapperConfig.plist и вводим значения:
GameDir - путь к папке с приложением/игрой
GameEXE - исполняемый *.exe файл с которого программа запускаеться.
GameFlags - флаги запуска
GameName - Имя приложения/игры
EngineUsed ("Cider" or "CXZ") - тип движка который используется (Cider или CXZ)

В итоге получиться как то так:

После этого шага можно считать что порт вы создали. Теперь можете его попробовать запустить просто включив CiderX как обычное приложение. Работает? Замечательно, удаляем из него рабочие инструмнты оставляя только три папки и WrapperConfig.plist файл, это неплохо повляет на производительность приожения и особенно скорость запуска.
Если не получиться включить в первую очередь меняйте движек. Совет от себя: сначала пробуйте Cider а потом и CXZ. Если не помогает - логи из папки Logs вам в помощь, и вперед читать более детальную документацию по конкретно вашей проблеме.

[HR="1"][/HR]
Наводим красоту
[HR="1"][/HR]

Итак, ваше приложение уже портированно, однако выглядит оно как синий круг и черный крест... в прямом смысле слова... Давайте с этим бороться.
Для начала изменим иконку для приложения чтобы его было не страшно людям показывать, и в люди же выкидывать. Вы можете создать иконку сами (файл должен быть размером 512*512 пикселей), или же просто найти нужную среди готовых. Формат иконки в Mac OS X - .*icns. Если вы не смогли найти такую, то сойдет и PNG которую можно превратить в INCS через iConvertIcons. После того как заветный файл у нас на руках заменим им тот самый унылый крест дефолтного CiderX - он лежит в CiderX.app/Contents/Resources. Как и в iPhone на Mac OS X лучше записать новую иконку поверх старой заранее переименовав ее.
Теперь заменим всплывающее окно на чтонибудь более патреотичное. И это будет конечно же нашь фирменый лого :) Photoshop мне в помощь... Единственное важное условие - маштабирование может привести к непредсказуемым последствиям.
Осталось лишь изменить имя для приложения. Для этого в папке Cider.app/Contents найдем Info.plist и исправим Bundle name на нужное нам значение. После этого можно переименовать и сам пакет *.app как обычный файл.
Вот и все, теперь у нас есть такой уже красивый, и весьма презентабельный файл:

И непохож на настоящую программу он только одним: у него нет инсталятора. Ну или по крайней мере файла которым его можно будет распространять... А в чем у нас путешествуют программы Mac OS X по сети? Правильно. В DMG образах.
Сначала создадим пустой образ, для этого нам понадобиться Дисковая Утилита из набора Служебных Утилит в папке "Программы". Выставляем настройки как на скриншоте (имя и название вы вольны выбрать сами, размер создаваемого образа должен быть не меньше *.app с портом, о том что будет лишнее - не беспокойтесь, ужмем).

Как только дисковая утилита создаст образ она автомотически подключить его как любой другой DMG к рабочему столу. Записываем в него нужную программу, вновь открываем дисковую утилиту и выбираем уже "Конвертировать" образ. В настройках ставим "Сжатый", и в итоге получаем образ с программой красивых размеров.
Хотя возможно вы видели DMG образы у которых вместо иконки что-то более оригинальное чем стандартное изображение? Это делается просто. Открывайте файл с иконкой в любом редакторе - нажимайте cmd+A чтобы выбрать все и cmd+C чтобы копировать, теперь открываем "Свойства" образа (парвый клик - Свойства), нажимаем на правый верхний угол (там где стандартная иконка) так, чтобы она подсвечивалась синим. После этого нажимаем cmd+V и радуемся новой иконке.
Чтобы упростить установку вы можете просто создать псевдоним папки Applications и поместить его внутрь образа, он будет работать на любом компьютере. Но делать это надо до сжатия образа, т.к. сжатый образ доступен только для чтения.
По похожему принципу можно сделать задний фон в DMG, но для этого уже необходим xCode который ставиться отдельно. Если он у вас имеется то введя в терминал команду
/Developer/Tools/SetFile -a V /Volumes/your_DMG/background

Где your_DMG - имя вашего образа, а  background - имя графического файла с задним фоном.
[HR="1"][/HR]

Отдельные темы по другим враперам: CXZ и WineSkin
[HR="1"][/HR]
Раздел: OSX Support Автор: JagdCrab
28 ноября 2010, 21:21

Ответы