- Delphi XE 2. Приложения под Windows, Mac OS и iOS
- FireMonkey
- Тестовое приложение
- macOS Application Development
- Contents
- Setting Up Your Development Environment for macOS
- Developing Your Application
- Using Frameworks in Mac Apps
- FireMonkey
- VCL (not available for Mac)
- Mac Objective-C Frameworks (Macapi)
- Resolving Ambiguities: ‘Byte’ and ‘System::Byte’ on macOS
- Exception Handling
- Processing of Mach Exceptions
- CTRL+C and CTRL+BREAK
- Documentation for Mac Libraries
- Deploying Your Final macOS Application
- Delphi Mac 1
Delphi XE 2. Приложения под Windows, Mac OS и iOS
Да, вам не показалось — в одном заголовке рядом Delphi и Mac OS. Не смотря на то, что многие на хабре, да и вообще, уже давно «похоронили» Delphi, её разработчики каждый год обновляют свой продукт и на этот раз — удачно…
Здесь можно было бы рассказать какая у Delphi интересная история, как всё развивалось и «завивалось», но не буду, все и так знают какая это история… Поэтому, лучше процитирую часть комментария хабрапользователя:
Ребята просрали все полимеры, однозначно.
Это в точности отражает, что происходило последние годы с Delphi. И кто с этим не согласится? Но вот недавно, была выпущена новая версия. С весьма заметными изменениями:
- 64-битный компилятор для Windows;
- поддержка Mac OS и iOS;
- FireMonkey;
- LiveBindings;
- FastReport;
- Documentation Insight теперь часть IDE;
- полный список.
Собственно, самое интересное это первые три пункта. О них и поговорим, а также сделаем программу в Windows, скомпилируем и запустим в Mac OS.
В общем-то, в плане интерфейса IDE мало что изменилось с последних версий и, это наверно хорошо, нет необходимости искать старые команды в новых меню. Хотя для нашего тестирования особых знаний среды и не потребуется. Поэтому, не будем тянуть, и сделаем тестовое приложение. Процесс, нахождения дистрибутива и установки, думаю можно пропустить 🙂
Как видно на скриншоте, в окне создания проекта появились новые типы приложений. Помимо известного VCL Forms Application, появились приложения FireMonkey. Вот они то нам и нужны. Как говорится: «Не знаешь 2D – не лезь в 3D», поэтому выбираем FireMonkey HD Application и создаем проект.
FireMonkey
Небольшая справка, что такое FireMonkey.
Это новая платформа для создания приложений под Windows, Mac OS и iOS. Новая она для Embarcodero, потому что создателем являлась компания KSDev, а сама библиотека называлась VG-Scene. Потом Embarcodero купила её и сделала частью FireMonkey.
В отличии от обычных VCL компонентов, компоненты FireMonkey являются контейнерами. Это позволяет создавать свои компоненты на основе уже имеющихся, буквально движением мыши, а с помощью встроенного редактора стилей вы сможете дать своему приложению поддержку скинов. Я уже не говорю про кучу всяких эффектов в FireMonkey: затухание, размытие и т. д. Все уже сделано, можно пользоваться. Ну конечно же — возможность всё это скомпилировать и отладить в Mac OS. Интересно? Продолжим.
Тестовое приложение
Напишем небольшое приложение, которое получает HTML код указанной страницы, сохраним его и запустим в Windows. Тут ничего чудесного нет, разве что исполняемый файл, стал меньше по сравнению с XE. Да-да, обычно было наоборот, с каждой новой версией Delphi ехешник с пустой формой добавлял килобайтов. Это так, приятная мелочь, самое интересное впереди.
Для того чтобы проверить наше приложение в Mac OS, запустим её в виртуальной машине (VMware), т. к. рабочего мака под рукой нет. Кстати, при тестировании в виртуальной машине возникли некоторые проблемы с графикой, о них ниже.
Для отладки в Mac потребуется PAServer – Platform Assistant Server, установщик можно взять из директории Delphi. Копируете на Mac, устанавливаете и запускаете через paserver.command. Более подробно можете прочитать в документации. Этих действий достаточно чтобы приложение запустилось.
Теперь нужно добавить дополнительную платформу к нашему проекту. Возвращаемся в Windows и Delphi. Жмете правой кнопкой на «Target Platforms» в узле проекта и добавляете OS X. Там же есть и 64-битная версия под Windows.
После этого нужно создать профиль отладки. Жмете правой кнопкой по только что добавленой OS X и создаете новый профиль. В окне настройки профиля нужно указать адрес, порт и пароль (если задавали) к маку с PAServer’ом. После создания, делаем новый профиль активным.
Всё. Билдим проект и запускаем. Если вы запускаете через VMware, то очень может быть что приложение не запустится. Там есть какие-то траблы с графикой в VMware, поэтому нужно сделать несколько несложных манипуляций:
- Скопировать юнит FMX.Filter.pas в папку с проектом;
- Изменить в этом юните две функции;
- Установить в проекте переменную FMX.Types.GlobalUseHWEffects := False перед инициализацией.
function FilterByName(const AName: string): TFilter;
var
i: Integer;
begin
Result := nil;
if Filters = nil then
Exit;
if GlobalUseHWEffects then
begin
for i := 0 to Filters.Count — 1 do
if CompareText(TFilterClass(Filters.Objects[i]).FilterAttr.Name, AName) = 0
then
begin
Result := TFilterClass(Filters.Objects[i]).Create;
Exit;
end;
end;
end;
function FilterClassByName(const AName: string): TFilterClass;
var
i: Integer;
begin
Result := nil;
if Filters = nil then
Exit;
if GlobalUseHWEffects then
begin
for i := 0 to Filters.Count — 1 do
if CompareText(TFilterClass(Filters.Objects[i]).FilterAttr.Name, AName) = 0
then
begin
Result := TFilterClass(Filters.Objects[i]);
Exit;
end;
end;
end;
Пробуем ещё раз.
Собственно, «вот до чего техника дошла» (с). Сделали программу в Delphi на Windows и работаем в Mac OS – не изменив ни строчки кода. Для компиляции под iPhone и iPad, необходимо уже экспортировать проект и xCode, но это я думаю в другой статье.
Теперь вы можете достать из архивов свои старые игры на Delphi и попробовать переделать их на iOS. Удачи в экспериментах!
Источник
macOS Application Development
Contents
You can use RAD Studio to create macOS applications, and you can use your Mac as the required intermediate platform for iOS apps.
From the hardware point of view, in addition to the development PC, you need a Mac connected with the development computer (where RAD Studio is installed); for example, using a local area network (LAN). See FireMonkey Platform Prerequisites for a list of system requirements, both for your development PC and for the Mac. See also Working with a Mac and a PC.
The Delphi compiler for macOS 64-bit is DCCOSX64.
Setting Up Your Development Environment for macOS
- Physical Connection: Ensure that RAD Studio can connect with the target Mac:
- Click Test Connection in the Connection Profile Manager panel.
However, if the macOS app does not have an assigned connection profile, and you attempt to perform an operation that requires a connection profile, the IDE displays the following message: A connection profile is required for this operation but has not been assigned.
Would you like to assign or create a profile now? Then the IDE guides you through the necessary steps in creating a connection profile. On the Platform Properties dialog, you can assign an existing profile to the target platform, or select Add New to create a new connection profile to assign to the target platform instead. - Platform Assistant: On the Mac, install the Platform Assistant and run it.
- Target Platform: In the IDE, set the target platform. When you create a Delphi or C++Builder multi-device application, RAD Studio sets Win32 as the default target platform. To change the target platform to macOS:
- Right-click the Target Platforms node in the Project Manager.
- Click Add PlatformmacOS 64-bit.
The macOS option is unavailable if the application uses VCL (VCL does not support macOS).
- Connection Profile: In the IDE, create and assign a connection profile (a group of settings that characterize the connection to your target machine; see Creating and Testing a Connection Profile on the Development PC).
Developing Your Application
Using Frameworks in Mac Apps
This section describes some aspects of multi-device application development that are specific to the macOS target platform. For general multi-device development documentation, see Developing Multi-Device Applications.
Some RTL units that provide basic functionality are common for Mac and Windows, such as System.pas or System.SysUtils.pas.
A number of RTL units are Mac-only (see Mac Objective-C Frameworks). These units are prefixed with the Macapi or Posix unit scope.
FireMonkey
The FireMonkey framework is ideal for the macOS target platform, and it also supports both Win32 and Win64. See FireMonkey Platform Prerequisites.
VCL (not available for Mac)
The VCL is available only on Windows (32-bit or 64-bit).
Mac Objective-C Frameworks (Macapi)
The RTL contains a number of units that provide Delphi interfaces to Mac frameworks written in Objective-C. These units are scoped with Macapi (from Mac API) and typically located in the /source directory of your product installation:
- Macapi.AppKit
- Macapi.AVFoundation
- Macapi.CocoaTypes
- Macapi.Consts
- Macapi.CoreFoundation
- Macapi.CoreGraphics
- Macapi.CoreServices
- Macapi.CoreText
- Macapi.Foundation
- Macapi.ImageIO
- Macapi.Mach
- Macapi.ObjCRuntime
- Macapi.ObjectiveC
- Macapi.OCMarshal
- Macapi.OpenGL
- Macapi.QuartzCore
- Macapi.Security
- Macapi.SystemConfiguration
The FireMonkey framework relies on some of these units.
For help on these API, see the Apple documentation at Mac Developer Library.
Resolving Ambiguities: ‘Byte’ and ‘System::Byte’ on macOS
Both Delphi and the OSX SDK headers define the Byte type. Thus, you might run into ambiguity errors when using plain Byte.
For example, the following code:
To resolve the issue, you should explicitly specify the definition of Byte that you want to use, that is, either of the following:
Delphi | macOS SDK |
---|
For example, the following code should compile with no errors:
Exception Handling
System.SysUtils contains a number of exception classes that represent non-language/hardware exceptions. These exception classes derive from EExternal. The following exception categories are covered:
- Floating-point exceptions
- Integer divide exceptions
- CTRL+C, CTRL+BREAK
- Privileged instruction violations
- Memory access violations
On the Mac, most of the EExternal exceptions originate as Mach exceptions. The only ones that do not originate as Mach exceptions are CTRL+C (EControlC) and CTRL+BREAK (EQuit).
Processing of Mach Exceptions
For Mach exceptions, the RTL from System.SysUtils creates a thread that listens for exception notifications from the operating system. You just have to include in your code the System.SysUtils unit. When the listening thread receives a Mach exception notification, it transforms the Mach exception into the corresponding Pascal language exception derived from EExternal, as appropriate, and raises/throws the Pascal exception to the user thread that caused the original Mach exception.
If you want to directly work with Mach exceptions, then be aware that, by including System.SysUtils, a dedicated thread is started for listening Mach exceptions. You can investigate the System.Internal.MachExceptions.pas source to make sure you do not interfere with the RTL.
CTRL+C and CTRL+BREAK
For CTRL+C and CTRL+BREAK, the application installs signal handlers. (macOS does not create Mach exceptions for CTRL+C and CTRL+BREAK.)
The SIGINT and SIGQUIT handlers are in conformity with the standards that define the way shell applications must treat CTRL+C and CTRL+BREAK.
We strongly recommend that you do not override the SIGINT and SIGQUIT handlers. However, if you do this, you do not receive EControlC and EQuit exceptions.
Documentation for Mac Libraries
You can obtain the macOS documentation at the macOS Developer Library. RAD Studio does not provide help for the libraries you might need to use on the Mac.
You can also register as a Mac developer (free of charge) at the Mac Dev Center. Being a registered member of the Apple Developer Program enables you to distribute apps in the App Store (this is along with other requirements, such as a developer certificate and a provisioning profile). For more information, see http://developer.apple.com/programs/mac/gettingstarted/
Deploying Your Final macOS Application
Before each release of your macOS application, you should check that every setting is properly configured. See Preparing a macOS Application for Deployment.
To self-distribute your macOS application you can simply build your application and distribute the resulting binaries to your clients. See Distributing Applications Outside the Mac App Store in the Apple documentation for more information.
If you want to publish your application on the Mac App Store, however, you must follow some additional steps. See Submit your application to the Mac App Store for detailed steps.
Источник
Delphi Mac 1
Как в первый раз
Предыдущие публикации (Открыл крышку, Открыл окошко, Салют — кстати, там видео с программы, написанной на Delphi XE2 и FireMonkey) были, если выражаться языком волновой динамики, «упругими предвестниками» настоящей ударной волны. Но теперь можно (после официального объявления), резво гнать сжатый поток информации. Вопросы позиционирования приложений, созданных на Delphi для платформы Mac, целесообразность реализации кроссплатформенных проектов и прочие существенно взрослые вопросы мы отложим на потом (но на вебинарах как раз этой теме мы и уделяем максимум внимания). Сейчас перенесёмся в то время, когда любая написанная нами, пусть и простая программа вызывала бурный восторг. И если фраза «Hello, World!» не обязательно приветствовала рождение нового программиста, то сообщение «Hello from Delphi to Mac World!» точно откроет для вас новый мир технических реалий креативного приложения инженерных мыслей.
Hard & Soft
Что потребовалось для изготовления приложения: Dell Latitude E6400 с Windows XP и MacBook Pro c Mac OS X «Snow Leopard». Delphi XE2 является приложением Win32, поэтому была использована одна «виндовая» машина. Запуск готовых приложений потребовал, соответственно, компьютер под Mac OS X.
Реализация кроссплатформенной разработки в Delphi XE2 такова. Сначала изготавливается приложение под Windows, затем отлаживается, а после всего его можно запустить под Mac OS. Это — базовый вариант. Варианты постоянного запуска «сырого» приложения на Mac смысла не имеет из-за потерь времени. Время теряется на а) deployment б) на отладку/тестирование в новой операционной системе — чисто человеческий фактор. Естественно, темп взаимодействия с элементами управления под Mac требует на порядок большего времени и концентрации, если данная ОС для вас не родная.
а) Идея поставить виртуальную машину на Windows, в качестве гостевой ОС установить Mac OS X, и запускать «виртуализированные» приложения мне не понравилась. Когда на такой удлиненном технологическом стенде возникнут проблемы, локализация ошибки — нетривиальная задача. Грубо говоря, не работает на уровне дефицита функциональности. Только не понятно: делаю ли неправильно, баг ли в фреймворке, проблема ли виртуализированного исполнения и т.д.. Не хочется расширять себе поле поиска.
б) Идея поставить виртуальную машину на Mac-е, в ней поставить Delphi XE2, затем изготавливать «виртуально», а запускать тут-же реально — более продвинутая. Сам видел работающие прототипы (например, для того, чтобы евангелисты Embarcadero носили не два, а один компьютер). Однако это означало бы для меня перенос большого фронта работы на Mac в качестве единственного и основного компьютера. Но по соображениям эргономики я на это не пойду.
в) Еще одним вариантом является следующее. Разработчики (в команде) имеют по 2 машины с Windows. Одна — базовая с Delphi XE2, другая — чисто для удаленного управления Mac-овским компьютером. Такой компьютер — один на команду.
Задача-то очевидна — именно вначале нагрузка на Mac-овский компьютер будет большая, т.к. любые первые шаги в кроссплатформенном проекте будут требовать верификации. Как этот элемент (привычный в Windows) будет смотреться на Mac-е? Да и просто «любопытство». А потом, со временем, Мас будет работать только на более-менее значимых сборках. Не надо сразу впадать в панику, что каждому разработчику нужно покупать отдельный дополнительный компьютер Mac.
PAServer — это специальный «агент», он должен быть запущен на Mac-овской машине. Из Delphi XE2 IDE устанавливается с ним связь, а запуск проекта на исполнение вызывает его запуск на машине с Mac OS X. Не надо «разшаривать» папки и/или как-либо в ручную запускать модуль. Всё делается по кнопке «Run (F9)» из IDE.
Теперь, когда deployment проекта поддерживает несколько платформ (для Delphi XE2 это Win32, Win64, OSX32), папка проекта содержит ряд вложенных в зависимости от выбранных вариантов. По-умолочанию платформа проекта — Win32, поэтому эта папка уже есть.
Добавили в Project Manager дополнительную платформу OSX32 (Mac OS X 32 бита), создалась отдельная папка. Выбрали, перестроили проект, можно запускать на Mac-е. Но сначала систематизируем информацию.
По шагам
- Установили Delphi XE2.
- В папке «C:\Program Files\Embarcadero\RAD Studio\9.0\PAServer» нашли «setup_paserver.zip».
- Перекинули его на Mac. Открыли, установили PAServer — Platform Assistant Server. Подробно — к документации.
- Запустили PAServer на Mac-е.
- Запустили Delphi XE2.
- Сделали новый проект (FireMonkey HD). VCL-проект не исполняется на Mac OS X. Кроссплатформенность только в рамках FireMonkey-проектов.
- Прогнали проект под Win32.
- Добавили новую платформу (OSX32). Правой кнопкой на «Target Platform» в узле проекта.
- Создали и настроили профиль отладки (нужен для связи Delphi XE2 с PAServer-ом на Mac-е). Протестировали его в окне создания профиля.
- В Project Manager выбрали платформу (стала жирной).
- Сделали Build.
- Сделали Run.
Установка Platform Assist Server на Mac
Запуск PAServer-а
На Mac сначала запускаем Terminal. Потом заходим в папку с установленным PAServer и запускаем «агента» командой ./paserver. Пароль — по желанию. Такой же пароль потом нужно ввести при настройки профиля из Delphi XE2.
Да, так, если следовать документации. Но в папке с установленном PAServer-ом на Mac-е есть «пускальщик» paserver.command. Лучше пускаться с него.
Настройка профиля
Запуск приложения под Mac
Также, как и не под Mac. Одним пальцем.
Пока смотрел, лет 20 назад скрутил.
Поздравляю всех поклонников Delphi в канун дня программиста. Освоение нового космического пространства началось. Салюты закончились, начались запуски.
Источник