FireMonkey
FireMonkey (FMX) is a GPU-accelerated, cross-platform graphical user interface (GUI) framework developed by Embarcadero Technologies as part of RAD Studio, enabling the creation of high-performance, visually engaging native applications using Delphi or C++Builder.[1] It provides a unified codebase for targeting multiple platforms, including Windows, macOS, iOS, Android, and Linux, without requiring separate projects for each.[2] Introduced in 2011, FireMonkey serves as an alternative to the VCL (Visual Component Library) for non-Windows development, focusing on modern, device-optimized apps that leverage hardware acceleration for graphics, animations, and styling.[3] At its core, FireMonkey employs a cross-platform abstraction layer to handle operating system features such as windows, menus, timers, and dialog boxes, while utilizing a vector-based engine for 2D and 3D rendering.[1] Key components include a WYSIWYG designer for visual layout, support for image formats like JPEG, PNG, TIFF, and GIF, and built-in primitives such as shapes, brushes, pens, geometries, transforms, and bitmap effects (e.g., drop shadows and blurring).[1] The framework's advanced GUI and skinning engines allow for customizable, responsive interfaces, with animations processed in a background thread to ensure smooth performance across devices.[1] Additionally, it supports Unicode for multi-language applications and integrates seamlessly with databases, web services, cloud platforms, and mobile peripherals, enhancing connectivity and security through native code compilation.[2] FireMonkey's design emphasizes script-free development with full access to device capabilities, making it suitable for business, mobile, and desktop applications that require high responsiveness and visual fidelity.[2] Unlike traditional frameworks, it uses CPU and GPU resources efficiently to deliver true native performance, reducing vulnerabilities associated with interpreted languages or third-party dependencies.[2] Over time, it has evolved to support emerging platforms like Linux via FMXLinux, extending its reach for server and embedded use cases.[4] This framework powers a wide range of applications, from offline-capable mobile clients to cross-platform business tools, underscoring its role in modern multi-device development.[5]Overview
Purpose and Capabilities
FireMonkey (FMX) is a GPU-accelerated, vector-based graphical user interface (GUI) framework developed by Embarcadero Technologies for creating high-performance, visually rich applications across multiple platforms.[1] It enables developers to build true native applications that leverage hardware capabilities for responsive and engaging user experiences on desktops, tablets, and mobile devices.[2] The framework's core capabilities include support for advanced 2D and 3D graphics, smooth animations, and multi-resolution assets, all rendered through hardware acceleration to ensure scalability and high-definition (HD) DPI compatibility.[1] Its vector engine provides resolution-independent, anti-aliased visuals with features like alpha blending, gradients, and transforms, allowing for real-time rendering with minimal CPU overhead.[1] Animations run on background threads with automatic frame rate adjustments, optimizing performance without compromising visual quality.[1] As of RAD Studio 13 Florence (released September 2025), FireMonkey includes enhancements such as a new Display Link Service for more stable animations and improved performance in bitmap operations.[6] FireMonkey emphasizes a single codebase approach to reduce development time while delivering native performance on supported platforms, including Windows, macOS, iOS, Android, and Linux.[2] [1] A key innovation is its use of hybrid controls, which automatically adapt appearance and behavior to platform-specific conventions without requiring code modifications, enabling seamless cross-platform deployment.[2] This design facilitates script-free development that fully exposes device hardware, outperforming alternatives reliant on virtual machines or dynamic languages in terms of speed and resource efficiency.[2]Supported Languages and Tools
FireMonkey applications are primarily developed using Object Pascal via the Delphi environment and C++ through C++Builder, both of which provide object-oriented, component-based programming paradigms optimized for rapid application development.[7] Since 2021, Python integration has been available through the open-source Python4Delphi library and the dedicated DelphiFMX module, allowing Python scripts to leverage FireMonkey's cross-platform GUI capabilities for building native applications on Windows, macOS, Linux, and Android.[8][9] This Python support facilitates scripting, prototyping, and extension of FireMonkey apps without necessitating expertise in Delphi or C++, thereby broadening accessibility for developers from diverse language backgrounds.[10] Delphi and C++Builder FireMonkey applications are developed within Embarcadero's RAD Studio integrated development environment (IDE), which integrates these tools into a unified workspace, while Python applications use Python development environments with the DelphiFMX module.[2] RAD Studio features visual designers for creating and editing forms, dragging and dropping components onto scenes, and customizing styles, enabling a what-you-see-is-what-you-get (WYSIWYG) approach to UI construction.[11][12] The IDE also includes the Bitmap Style Designer for editing FireMonkey style files (.style), which define visual appearances across platforms.[13] The FireMonkey tool ecosystem encompasses a suite of platform-agnostic libraries, including FMX.StdCtrls for standard user interface controls such as buttons, labels, and edit boxes, and FMX.Graphics for handling bitmap operations, text rendering, and vector drawing. These libraries form the foundation for building interactive applications, with additional units like FMX.Types for core types and FMX.Controls for base control behaviors.[14] FireMonkey further supports integration with third-party extensions and component libraries, such as FMXUI for advanced responsive UI elements and Kastri for Android-specific enhancements, allowing developers to extend functionality beyond the core framework.[15][16]History
Origins and Acquisition
FireMonkey traces its origins to VGScene, a 3D graphics library developed by Eugene Kryukov of KSDev for the Delphi environment starting in the late 2000s.[17][18] VGScene was designed as a vector-based framework leveraging GPU acceleration through OpenGL and DirectX, enabling rich visual effects and hardware-accelerated rendering that surpassed the capabilities of Delphi's existing Visual Component Library (VCL).[19] The VCL, while effective for traditional Windows applications, relied on pixel-based GDI rendering, which limited its support for high-resolution displays, smooth animations, and modern GPU-driven user interfaces.[18][20] In early 2011, Embarcadero Technologies acquired KSDev's intellectual property, including VGScene and related libraries like DXScene, with the goal of integrating and expanding it into a comprehensive cross-platform GUI framework.[18][21] Following the acquisition, Kryukov joined Embarcadero to lead the rebranding and development, transforming VGScene into FireMonkey and enhancing it for multi-platform support beyond Windows. This acquisition addressed the growing demand for Delphi developers to build visually advanced applications compatible with emerging operating systems like macOS and mobile platforms.[22] FireMonkey was subsequently introduced in RAD Studio XE2 later that year.[18] Eugene Kryukov, recognized as the "Father of FireMonkey," made foundational contributions to vector graphics and scene management in Delphi ecosystems before his passing in 2024.[22] His work on VGScene laid the groundwork for FireMonkey's emphasis on scalable, hardware-accelerated visuals, influencing cross-platform development tools long after the acquisition.[22]Key Releases and Evolutions
FireMonkey debuted in September 2011 as part of RAD Studio XE2, introducing a cross-platform GUI framework initially supporting Windows (32-bit and 64-bit), macOS, and iOS for native application development.[23][24] Android support was added in RAD Studio XE5 in 2013.[25] Subsequent releases from 2012 to 2015 focused on enhancing usability and mobile capabilities. RAD Studio XE3, released in 2012, introduced actions and action lists to FireMonkey, enabling reusable event-handling logic similar to VCL, along with anchors for dynamic control positioning and layouts like FlowLayout and GridLayout to improve form responsiveness.[26][27] In RAD Studio XE6 (2014), mobile development saw advancements in gesture recognition, including interactive multi-touch support for pan, zoom, rotate, tap, and double-tap, integrated via the TGestureManager component to facilitate natural user interactions on touch-enabled devices.[28] RAD Studio XE8 (2015) built on this with multi-view applications, leveraging the TMultiView component—first previewed in XE7—for responsive master-detail interfaces that adapt to different screen sizes and orientations across platforms.[29] A significant milestone occurred in 2021 with the integration of Python4Delphi, allowing Python scripting directly within FireMonkey applications through the delphifmx module, which provides native access to FMX components for cross-platform GUI development on Windows, macOS, Linux, and Android.[30] Recent developments through 2025 have emphasized performance and platform expansion. In 2023, RAD Studio 12 Athens incorporated the Skia graphics library as the default 2D rendering engine for FireMonkey, delivering improved rendering speed, cross-platform consistency, and support for advanced features like Vulkan on compatible hardware, which enhances graphical performance and reduces energy consumption on mobile devices.[31][32] Linux support has evolved progressively, with third-party FMXLinux providing GUI capabilities since earlier versions, but RAD Studio 12 introduced increasing native integration, culminating in the FMX Linux library's availability via GetIt Package Manager for RAD Studio 12.3 in May 2025, enabling seamless client application development on Linux 64-bit.[33] Further updates in 2025 included the full release of RAD Studio 12.3 in March 2025, enhancing cross-platform tools, and RAD Studio 13 Florence in September 2025, which improved FMXLinux integration for easier Linux UI development in Enterprise editions, along with a new 64-bit IDE, AI coding assistance, and a Clang-based C++ compiler.[34][35]Architecture
Core Framework Components
FireMonkey's core framework is built upon a hierarchical object model that facilitates the creation of cross-platform user interfaces. At its foundation, the TFmxObject class serves as the root for all FireMonkey components, extending the standard TComponent to provide essential low-level functionality such as object creation, destruction, cloning, and management of child objects. This base class enables both visual and non-visual components to integrate seamlessly within the framework, supporting features like free notifications and compatibility with FireMonkey styles and animations.[36] Visual UI elements derive from the TControl class, which inherits from TFmxObject and acts as the primary ancestor for on-screen components. TControl handles fundamental aspects of visual representation, including positioning, sizing, visibility, opacity, scaling, rotation, and interaction with mouse and keyboard events, while also implementing interfaces for alignment, effects, gestures, and animations. Subclasses of TControl encompass primitive shapes for basic graphics and styleable controls that leverage the framework's styling system for customizable appearances. Application windows, in turn, are represented by the TForm class, a descendant of TCustomForm that provides the container for hosting other components and managing the overall form lifecycle, including design-time creation via the IDE's Form designer.[37][38] Components in FireMonkey are categorized based on their primary roles to streamline development. Visual components, such as TButton for interactive buttons and TListBox for displaying selectable lists, focus on user interface elements that render directly on screen and respond to user input. Layout components, including TPanel for grouping controls and TScrollBox for scrollable content areas, manage the spatial organization and alignment of child elements to ensure responsive designs across devices. Data-aware components, like TGrid for tabular data presentation, integrate with data sources to display and edit information, often in conjunction with binding mechanisms for dynamic updates. These categories allow developers to assemble complex interfaces modularly, with visual and layout elements forming the structural backbone.[39] The framework employs a scene graph model to efficiently manage the hierarchical arrangement of 2D and 3D elements. This structure is anchored by the TScene interface, which defines a container for 2D objects and is implemented by classes such as TForm for standard forms and TCustomLayer3D for layered 3D compositions. Layers, represented by TLayer, enable the organization of elements into stacked or nested hierarchies, optimizing rendering by grouping related objects for efficient traversal and updates. This model supports the dynamic composition of scenes, where parent-child relationships dictate visibility, transformations, and event propagation among components. The rendering pipeline processes this graph to draw elements, leveraging hardware acceleration where available.[39] A distinctive feature of FireMonkey is LiveBindings, a declarative mechanism for connecting UI components to business logic and data sources without extensive procedural code. LiveBindings uses expression-based bindings to link properties—such as a TEdit's Text property to a dataset field—enabling automatic, bidirectional synchronization of changes across objects. This approach, supported by visual tools like the LiveBindings Designer and components such as TBindSourceDB and TPrototypeBindSource, accelerates prototyping by allowing developers to visualize and test data flows at design time, even with mock data. Unique to the framework's rapid development paradigm, LiveBindings reduces boilerplate code for data-aware scenarios, making it ideal for cross-platform applications requiring real-time updates.[40][41]Rendering Pipeline
FireMonkey's rendering pipeline processes graphics through a series of stages that transform the application's scene graph into a displayed image, leveraging hardware acceleration where possible. The process begins with scene traversal, during which the framework updates object properties such as transforms, animations, and visibility states within the hierarchical structure of TFmxObject descendants. This stage ensures that all visual elements, from simple 2D controls to complex 3D models, are prepared for rendering by applying changes from user interactions or timers.[42] Following traversal, the pipeline advances to primitive resolution and drawing, where components override methods like TControl.Paint to render directly onto a canvas abstraction. For styled controls, this involves resolving style trees into layered primitives that are composited efficiently. The drawing commands are then rasterized using platform-specific graphics APIs, culminating in presentation to the display via the GPU for smooth, real-time output. This GPU-centric approach enables high-frame-rate rendering, particularly for animations and effects.[42][43] Backend selection in the pipeline is determined by the target platform to optimize performance and compatibility. On Windows, FireMonkey employs Direct2D for 2D vector graphics and Direct3D for 3D rendering, providing hardware-accelerated drawing with support for anti-aliasing and gradients. For macOS and iOS, the Metal API serves as the primary backend, introduced in RAD Studio 10.4 for improved efficiency over legacy OpenGL and Quartz. Android utilizes OpenGL ES for both 2D and 3D operations, ensuring broad device support, while Linux relies on OpenGL for cross-desktop rendering. These backends are abstracted to allow seamless code portability without platform-specific modifications.[43][44] Key optimizations in the pipeline revolve around the TCanvas class, which offers a unified interface for device-agnostic drawing operations such as filling shapes, stroking paths, and applying text. TCanvas supports custom shaders via GLSL or HLSL for advanced effects and integrates multi-threading for parallel processing of non-dependent tasks, like off-screen bitmap rendering, to reduce main-thread bottlenecks. In 2024, FireMonkey adopted Skia as its core 2D rendering engine across all platforms, unifying vector graphics handling and delivering superior anti-aliasing, subpixel rendering, and performance gains—up to 2x faster in complex UI scenarios compared to prior implementations—while maintaining backward compatibility. The pipeline draws from core framework components, such as the scene manager, to feed these optimized stages.[45] In RAD Studio 13.0 (2025), FireMonkey introduced the Display Link Service as a central engine for all application animations, replacing the legacy timer-based system. This service uses platform-native APIs, such as CADisplayLink for iOS and Choreographer for Android, to synchronize UI updates and animations with the display's refresh rate (e.g., 60 Hz, 90 Hz, or 120 Hz) and VSync events. It ensures frame-accurate rendering, improved stability, and smoother visuals across platforms. The TAniCalculations.Interval property was removed, with animations now automatically matching the display refresh rate.[46]Features
Graphics and Visual Effects
FireMonkey provides robust tools for 2D graphics rendering, enabling developers to manipulate bitmaps, draw paths, and apply gradients through the TCanvas class in the FMX.Graphics unit, powered by the Skia graphics library since RAD Studio 12 (2023) for cross-platform consistency and improved performance, with updates in RAD Studio 13 Florence (2025).[47][48] Bitmap manipulation is facilitated by methods for loading, drawing, and altering image data directly on the canvas, supporting operations like scaling and compositing for efficient 2D scene construction, with enhanced GPU-accelerated bitmap copying in RAD Studio 13.[47][6] Paths are created and rendered using geometric primitives, allowing for complex shapes defined by points and curves, while fills and outlines are controlled via TBrush and TStroke objects.[49] TBrush handles interior fills with support for solid colors, gradients (linear, radial, or bitmap-based), and patterns, whereas TStroke manages line styles, thickness, dashes, and joins for precise contour drawing.[49] Additionally, FireMonkey supports SVG imports through TPathData, which parses vector paths from SVG files for scalable 2D rendering without loss of quality.[50] For 3D capabilities, FireMonkey utilizes the TMesh class to represent 3D models, allowing the creation or import of polygonal meshes in formats such as OBJ, DAE, and ASE via the TModel3D component.[51] Lighting and shading are achieved through TLight objects, which include directional, point, and spot types, combined with GLSL shaders applied via material sources to define surface properties like emissive, ambient, diffuse, and specular responses.[51] Camera controls are managed by the TCamera component, enabling developers to set position, rotation, and projection modes for immersive user interfaces, often enhanced by TDummy objects for dynamic camera booms.[51] These elements support real-time 3D rendering integrated into cross-platform applications. Animations in FireMonkey are powered by the TAnimator class, which orchestrates property changes over time, including automatic starting, delaying, and options for stopping, restarting, or reversing sequences, with the new Display Link Service in RAD Studio 13 Florence (2025) providing more stable and smooth performance.[52][6] Keyframe timelines are implemented through subclasses like TFloatAnimation for smooth transitions in properties such as position or opacity, TColorAnimation for hue shifts, and TBitmapListAnimation for sequenced image playback.[52] Easing functions control interpolation, with linear providing constant velocity and bounce simulating elastic rebounds at animation endpoints.[52] Visual effects leverage GPU-accelerated shaders for transformations like blurs and distortions, applied via the TEffect base class and subclasses such as TBlurEffect for Gaussian blurring of object textures.[53] Developers attach effects to components like TImage, animating parameters (e.g., blur intensity or ripple phase) for dynamic visuals, and combine multiple effects in TLayout containers for layered processing.[54] Distortions, such as ripples or magnifications, are handled by specialized filters like TRippleEffect, which modify pixel coordinates using shader-based algorithms.[54] Multi-resolution bitmaps address DPI scaling by storing images at various scales (e.g., 1x, 2x), allowing FireMonkey to select the appropriate resolution automatically for high-DPI displays without manual stretching.[55] A distinctive feature of FireMonkey is its hybrid 2D/3D mixing, where 3D objects can be seamlessly embedded into 2D forms using TViewport3D or TLayer3D components, enabling 2D controls like buttons to interact with 3D scenes while preserving projection integrity.[56] This integration occurs through the rendering pipeline's support for layered 3D viewports within standard 2D layouts.[56]Styling and Theming
FireMonkey employs a flexible style system to customize the visual appearance of user interface controls without requiring subclassing. The core of this system is the TStyleBook component, which loads and manages style definitions stored in .style files. These files encapsulate metrics such as sizes and positions, colors for fills and strokes, and bitmaps used as assets for controls like buttons and labels.[57][58] The theming process in FireMonkey allows developers to apply either platform-specific themes or custom styles to achieve consistent aesthetics across applications. Platform themes adhere to native design guidelines, such as Apple's Human Interface Guidelines for iOS (e.g., iOSBlack.fsf and iOSTransparent.fsf styles) and Google's Material Design for Android (e.g., AndroidDark.fsf and AndroidLight.fsf styles), ensuring apps blend seamlessly with system-native looks. Custom styles can be created or modified using the Bitmap Style Designer, saved as .style files, and loaded into a TStyleBook for targeted use. Runtime switching of themes is facilitated by the ApplyStyleLookup method on styled controls, which retrieves and applies the appropriate style object based on the control's StyleLookup property; alternatively, TStyleManager.SetStyle can apply a style globally before application initialization.[59][57][60] Customization options within FireMonkey styles enable precise control over visual elements. Bitmap styles support scalable assets through multi-resolution bitmaps (e.g., 1x, 1.5x, 2x, and 3x variants), allowing images to adapt to different screen density without distortion; these are edited in the Bitmap Style Designer by importing PNG files and linking them to control states like normal, pressed, or disabled. Font fallbacks, similar to CSS mechanisms, ensure text rendering uses alternative families if the primary one is unavailable on a platform, configurable via the TText components in styles. Property overrides, such as adjusting Opacity for transparency effects or Stroke properties for line thickness and color in shapes, can be applied directly in the style editor to tailor individual control appearances.[61][57] A key concept in FireMonkey's styling is the inheritance hierarchy, which promotes consistency by propagating base styles to child controls. When applying a style, the system first searches the TStyleBook using the control's explicit StyleLookup or its default class name; if not found, it falls back to hard-coded defaults based on the class name or its parent classes in the inheritance chain, ensuring derived controls inherit visual traits unless overridden. This hierarchical approach minimizes redundancy and maintains uniform theming across complex UI layouts.[57]Platform Abstraction Services
FireMonkey's platform abstraction services provide a unified interface for accessing operating system-specific functionalities, enabling developers to write cross-platform code without platform-dependent implementations. These services are implemented as interfaces in the FMX.Platform unit, prefixed with IFMX, and are dynamically registered and retrieved via the TPlatformServices class at runtime. This architecture allows FireMonkey applications to adapt seamlessly to the underlying platform, such as Windows, macOS, iOS, or Android, by delegating calls to platform-native APIs through service implementations. For instance, the IFMXWindowService interface handles multi-window operations, including creation, activation, and minimization, ensuring consistent window management across desktop environments.[62] Key abstractions cover essential OS interactions, including clipboard operations via the IFMXClipboardService, which supports setting and retrieving text or data uniformly, and dialog presentations through the IFMXDialogService for alerts, confirmations, and file open/save prompts. Notifications and application events are managed by the IFMXApplicationService, which provides cross-platform hooks for system-level notifications like low-memory warnings or orientation changes, with a new ApplicationEvents component in RAD Studio 13. File access is abstracted through dialog services that invoke native file pickers, while properties such as TabOrder are automatically adapted by the framework to follow platform conventions—logical traversal on Windows versus reading order on RTL languages in mobile platforms. These services ensure that applications behave intuitively without manual reconfiguration, including the new IFMXSpellCheckerServiceEx for advanced text checking in RAD Studio 13 Florence (2025).[62][63][6] Input and gesture handling are unified across devices using services like IFMXTextService for keyboard and text input, and IFMXGestureRecognizersService for touch and mouse events, with built-in support for platform defaults such as multi-touch swipes on mobile or hover effects on desktop. This allows a single codebase to respond to diverse input methods, mapping gestures like pinch-to-zoom or drag-and-drop to equivalent behaviors regardless of the OS. The framework's extensibility permits custom services to be implemented and registered using TPlatformServices.AddPlatformService, facilitating third-party plugins for specialized features like device sensors or cloud integrations without altering core code.[62]Platforms and Deployment
Supported Operating Systems
FireMonkey provides native support for several desktop and mobile operating systems, enabling developers to build and deploy applications across diverse hardware architectures. On desktop platforms, it targets Windows in both 32-bit and 64-bit configurations, utilizing Direct2D or DirectX for hardware-accelerated rendering on versions including Windows 11, Windows 10, Windows Server 2025, and Windows Server 2022.[64][65] For macOS, FireMonkey integrates with Cocoa frameworks and supports Intel 64-bit and ARM 64-bit (Apple Silicon) architectures on macOS 26 Tahoe, 15 Sequoia, and 14 Sonoma, leveraging Metal for GPU-accelerated graphics rendering.[64][65] Linux support is available for 64-bit Intel architectures on distributions such as Ubuntu 24, Ubuntu 22, Red Hat Enterprise Linux 10, and Windows Subsystem for Linux 2 (WSL2), with rendering handled via OpenGL and GTK integration for native widget support.[64][66] For mobile platforms, FireMonkey enables deployment to iOS devices using 64-bit ARM architecture on iOS 18, facilitating submission to the Apple App Store through native integration and Metal-based GPU rendering.[64][65] On Android, it supports both 32-bit and 64-bit ARM architectures (with NEON extensions required) across Android 16, 15, 14, and 13, using JNI bridging for native API access and OpenGL ES for graphics acceleration, allowing applications to be distributed via Google Play.[64][65] Regarding architecture specifics, FireMonkey ensures bit-width compatibility across targets, with 64-bit as the primary focus for modern devices; it accommodates ARM-to-x86 emulation where necessary, such as via Rosetta 2 on Apple Silicon for legacy Intel binaries, though native ARM support is preferred for performance.[64] There is no official support for web or browser-based deployment, limiting FireMonkey to native OS environments.[65] Recent enhancements in RAD Studio 13 Florence (released in 2025) have improved Linux stability and feature parity, building on prior integrations with better OpenGL rendering and dependency management via the GetIt Package Manager.[66][64]Cross-Platform Development Process
The cross-platform development process in FireMonkey, integrated within RAD Studio, enables developers to create a single codebase that compiles to native applications for multiple operating systems, including Windows, macOS, iOS, and Android.[67][68] The build process relies on conditional compilation directives, such as$IFDEF and $UNDEF, to include or exclude platform-specific code segments during compilation, allowing tweaks like API calls or UI adjustments without separate projects.[69] For targets requiring remote compilation, such as iOS or Linux, the Platform Assistant (PA) Server facilitates building and deploying to connected devices from a host machine, streamlining the workflow by handling cross-compilation over a network connection.[66]
Testing FireMonkey applications involves RAD Studio's built-in device emulators, which simulate hardware environments for platforms like iOS and Android, allowing verification of functionality without physical devices.[67][68] The Multi-Device Previewer tool provides real-time visualization of the user interface across various screen sizes, resolutions, and DPI settings, enabling developers to assess layout adaptability during design.[70]
Deployment packages FireMonkey applications as native executables tailored to each platform, such as .ipa files for iOS and .apk files for Android, using RAD Studio's Deployment Manager to bundle resources and configurations.[71][72] Signing is essential for distribution; for Android, a keystore file secures the .apk, while iOS requires Apple Developer Program certificates and provisioning profiles to ensure compliance.[73][72] Store submission follows platform guidelines, with RAD Studio supporting uploads to Google Play, the Apple App Store, and others via signed binaries and metadata.[67][74]
Best practices emphasize using multi-view containers in multi-device projects to create responsive layouts that adapt to different form factors, such as adding platform-specific views via the Project Manager for optimized UI per target.[75] Developers should handle platform-specific permissions explicitly, for example, enabling camera access through Android's Uses Permissions in the project options or iOS provisioning entitlements, to avoid runtime denials while minimizing unnecessary grants.[76]