Create native cross-platform desktop, web, mobile & Raspberry Pi apps

Xojo

Xojo

  -  Demo
  • Latest Version

    Xojo 2024 Release 2.1 LATEST

  • Review by

    Daniel Leblanc

  • Operating System

    Windows 8 (64-bit) / Windows 10 (64-bit) / Windows 11

  • User Rating

    Click to vote
  • Author / Product

    Xojo, Inc. / External Link

Xojo for Windows is an application development environment that provides developers a marked increase in productivity over other multi-platform development tools. Xojo includes the drag-and-drop capability to enable you to quickly create a user interface design, then incorporate the code behind it to add power and functionality. The program is highly compatible with Visual Basic, so Visual Basic developers are productive very quickly with the tool.

Xojo Desktop version also comes with a utility to help convert Visual Basic projects to the app where they can be compiled for macOS, Windows, Linux, the web, and iOS -- with the click of a checkbox. It runs on and creates software for macOS, Windows, Linux, iOS, and the web all from a single set of source code. The program incorporates platform-specific intelligence, like user interface widgets, so applications created with the tool look and feel native, regardless of the development platform you created it on. Build powerful database apps with The app's built-in database, based on the SQLite public domain database engine. It supports standard image formats for vector graphics.



Features and Highlights

Create Anything
With built-in support for graphics, database servers, internet protocols, and more, you can build just about anything you can imagine with the software. Using It, you can make commercial software products, utilities to help make your life easier, or even learn to program. In fact, the tool itself is the app!

Build Apps 10x Faster
You can use one set of source code to support multiple platforms and there are over 40 user interface controls built-in, allowing your app to look and behave how you'd want it to on any platform. On the web you can use one powerful language to create your web app instead of HTML, CSS, PHP, JavaScript, or AJAX, saving you tons of development time!

Modern Development
The software is a modern, object-oriented language. It supports inheritance, interfaces, polymorphism, and is strongly-typed as well. There are thousands of differences in OS API calls and the program abstracts you from these details, dramatically reducing development time and allowing you to focus on what makes your application unique.

Native, Cross-Platform
The apps don't have an interpreter or virtual machine - they're compiled to machine code for fast execution and the protection of your intellectual property. The tool uses native controls so your app looks and feels right on each platform. Development is cross-platform as well. Create your project on your favorite OS and then build it for any platform the app supports.

Note: Limited functionality in the demo version.

Also Available: Download Xojo for Mac

  • Xojo 2024 Release 2.1 Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    Xojo 2024 Release 2.1 Screenshot 1
  • Xojo 2024 Release 2.1 Screenshot 2
  • Xojo 2024 Release 2.1 Screenshot 3
  • Xojo 2024 Release 2.1 Screenshot 4

What's new in this version:

Xojo 2024 Release 2.1
Highlights:
- DatabaseConnection project item now available for Desktop, Web and Console projects
- Web projects now support Control Sets
- You can now add and remove panels from WebPagePanel and WebTabPanel at runtime
- Better performance when using WebListBox with large data sources
- iOS MobileDateTimePicker now supports Compact and Inline styles for better use within tables
- Apple's iOS privacy requirements can now be met with the new Privacy Manifest Editor
- String.CharacterCount returns the actual number of characters in a String, which can be useful when dealing with multi-byte characters such as emoji
- Database.AddRow has a new overload that returns the unique ID of the added row
- Barcode is now supported on Linux
- TCPSocket is now supported on Android
- Added Graphics.LineCap, LineDash, LineDashOffset, LineJoin, MiterLimit, Outline and ShadowBrush for Android

IDE:
Fixed:
- Loading Example projects, that contain SQLite Database Connection items, can now correctly connect to the SQLite database file that is assigned to the connection item
- When connecting to the SQLite Database Connection item, we now look for the SQLite Database file next to the project if the absolute path to the database file is not found
- Linux: We now correctly bundle the Remote Debugger Console Linux ARM 64-bit version instead of an incorrect 32-bit version

Framework:
Fixed:
- No longer raising an assertion if a control has been detected to be destructed twice. Instead we just ignore the secondary destructor
- ODBCDatabase.IsConnected now works as expected, especially when checking against MSSQL servers
- Clicking on a Separator no longer raises a failed assertion
- Fixed a regression when calculating the DesktopChart scale, AutoCalculateYAxis is set to True, and all the values in the dataset are the same
- Fixed regression when setting the fonts widths for the PDF Font Descriptor the second time a PDFDocument is instantiated
- macOS: Fixed macOS deployment target for Barcode from the wrong macOS 12.3 to macOS 10.14
- Web: Fixed a WebCombobox issue, when setting the Text property to a different value it wasn't possible to display the menu again
- Web: Fixed a WebButton issue that was preventing the user to change the Indicator property programatically
- Web: Fixed a WebListBox issue that was causing an exception being thrown, when setting DefaultRowHeight to a negative value
- Web: Fixed a WebButton issue causing font size and border corner radius to flicker, in some situations
- Web: Fixed a WebChart issue causing the control to throw JavaScript errors when there was more than one dataset
- Windows: DesktopXAMLContainer: setting the SelectedIndex of a winui:NavigationView now works correctly
- Windows: Setting a top-level menu item visibility to false no longer shifts the menu to the beginning of the menubar


Xojo 2024 Release 2
Highlights:
- DatabaseConnection project item now available for Desktop, Web and Console projects
- Web projects now support Control Sets
- You can now add and remove panels from WebPagePanel and WebTabPanel at runtime
- Better performance when using WebListBox with large data sources
- iOS MobileDateTimePicker now supports Compact and Inline styles for better use within tables
- Apple's iOS privacy requirements can now be met with the new Privacy Manifest Editor
- String.CharacterCount returns the actual number of characters in a String, which can be useful when dealing with multi-byte characters such as emoji
- Database.AddRow has a new overload that returns the unique ID of the added row
- Barcode is now supported on Linux
- TCPSocket is now supported on Android
- Added Graphics.LineCap, LineDash, LineDashOffset, LineJoin, MiterLimit, Outline and ShadowBrush for Android

Statistics:
- Bugs fixed: 136
- Features added: 42
- Documentation changes: 1
- Examples changed: 2

IDE:
New Features:
- Fixed the minimum height of the Choose a Project dialog, so all items are displayed at first glance
- Debugger: the Picture content viewer now live scrolls when using the scrollbars
- For SQLite Database Connection items, the SQLite database file is now bundled in the Resources folder of the built app
- Desktop: New Database Connection project items can now be added to your project. These connection settings can be modified with the ability to select which connection to use and whether or not to auto-connect
- iOS: Added the AllowPopover property from MobileChart to the Inspector Panel on iOS projects
- iOS: Added a Privacy Manifest Editor in the IDE for iOS Projects
- macOS: Added DTSDKBuild key to macOS plist file
- Resolved Issues:
- Now it is possible to display the Add Event Handler panel when double-clicking a Window in the Layout Editor after deleting a Menu Handler, Property or Note from such Window in the Navigator
- Fixed an issue when exporting a previously added class via drag & drop with Command-Option keys pressed, that could lead to deleting the selected target folder if the project was not previously saved
- Script Editor no longer loses changes when quickly trying to do menu action after typing some code
- Double-clicking an empty area of the Listbox in the Add Event Handler dialog doesn't closes the window
- Now the Inspector Behavior displays previously disabled properties for intrinsic classes
- Avoid an OutOfBoundsException that could occur when using code folding in the code editor
- The Title property for a Screen object on iOS only displays the first available line of the text assigned
- Fixed a regression so {U+03BC} character can be used again as part of any of the enum values names
- The deprecated Variant.TypeInteger no longer shows up in the Autocmplete list
- Fixed a display issue with code folding when collapsing sequential Case statements within a Select Case block
- Fixed showing debugger variables in its own separate windows
- Profiling Windows/Linux 32-bit apps now works again
- Using the swap lines feature from within a Build Script code editor no longer causes an IDE exception
- Now it is not possible to paste an image in a Method Definition in the IDE on Windows
- Updating the ListBox FontSize/FontUnit now correctly updates the vertical Scrollbar to reflect this change in the layout editor
- IDE's Layout Inline Editor (popover editor) doesn't remove the first item from the control edited values (DesktopPopupMenu, DesktopListbox, DesktopRadioGroup) when it is a return character
- Fixed an exception when creating a new project that could occur on Windows if you clicked too many times on the desktop icon while starting Xojo. This could cause the Project Chooser to appear before the app had finished initializing
- Fixed an exception that could occur when changing color group properties when multiple items are selected
- Remove the Libs folder from the debug build folder of a console app on macOS after the debug app disconnects
- The name of the ColorGroup item is no longer written out twice for Binary/XML project formats
- The name of the Enumeration item is no longer written out twice for Binary/XML project formats
- Android: Settings/Preferences -> Clear Caches now deletes the entire Android cache (when available) to prevent possible library sync problems
- Android: Fixed the case of some TextEncoding properties names for autocomplete
- Desktop: DesktopScrollbar: when embedded inside a TabPanel, the scrollbar no longer always appears on the first tab when that wasn't the tab it was assigned to
- iOS: Added MaximumCharactersAllowed property to the Inspector Panel for MobileTextArea and MobileTextField on iOS projects
- iOS: Better handling of iOS Compiling errors returned as XML, so they are presented in a better / more readable way
- Linux: Linux IDE: the debugger hyper links are now more readable in dark mode. Also updated the default code editor background color so that it isn't so bright in dark mode
- macOS: SegmentedControl honors now the width value on Mac both in the Layout Editor and at runtime
- macOS: Fixed Select All when applied on a text that includes emojis on a TextField on macOS
- macOS: Fix for properly reading as a Plist file an external item that has been saved in a project using an old Xojo Release (2019) (76102)
- Web: WebSegmentedButton inspector editor won't ignore the Selection Style anymore
- Web: Fixed a WebImageViewer issue requiring to enter the URL twice in the IDE Inspector, when its Image property wasn't empty
- Web: Fixed a NilObjectException that could happen when closing a project window while another was still loading at the same time
- Web: Fixed an issue causing copying and pasting elements on web projects to lose most of their properties, on some type of controls
- Windows: The compilation build failure dialog now appears modally, instead of appearing briefly and disappearing just as quickly, when a compilation (typically a file system) error occurs
- Windows: Windows IDE: the Launching Application progress bar is no longer missing part of the bottom edge due to an errant label overlapping it

Framework:
New Features:
- Added ColorGroup support to ChartDataset.DataColor on Desktop, Web and Mobile
- Kanji support has been added to Barcode class for macOS and iOS
- Added an overloaded Database.AddRow(tableName As String, row As DatabaseRow, idColumnName As String = ) As Integer This returns a unique id of the newly inserted row. This API should be preferred over using the more specific SQLiteDatabase.LastRowID and MySQLCommunityServer.LastInsertedRowID which are now deprecated
- Added an IsConnected method to our SQLiteDatabase, ODBCDatabase, PostgreSQLDatabase, and MySQLCommunityServer database classes. This method returns true if the connection is still active, and false otherwise
- String.Characters now returns a String array. This is more optimized than our Iterator approach
- String.Codepoints now returns an array of Integers instead of an Iterable
- Added String.CharacterCount which returns the number of Characters/Glyphs in the string
- Plugins SDK: added REALInsertArrayValuePtr and REALGet/REALSetArrayValuePtr methods
- Added optional Animated parameter to ShowPopover to display the Popover with or without animation. This parameter is supported for macOS, iOS and Linux
- Android: TCPSocket is now available for Android
- Android: ShadowBrush class and Graphics.ShadowBrush property
- Android: Added Graphics.LineCap, LineCapTypes, LineJoin, LineJoinTypes, LineDash, LineDashOffset properties for Android
- Android: Added Graphics.Outline property for consistency with other platforms
- iOS: Added MobileSegmentedButton.LastSegmentIndex As Integer property to match what is on desktop and web
- iOS: #76203 - Added Inline and Compact styles to MobileDateTimePicker on iOS
- iOS: Added HEIC format support for saving Picture instances on iOS; also when used in Picture.FromData and Picture.ToData
- iOS: Now PDFViewer scales the assigned PDF document so it fully fits into the view
- iOS: Added HasInlineLabels property to ChartCircularDataset on Desktop and iOS targets
- iOS: Moved iOS Barcode implementation from iOSFramework to Barcode plugin
- iOS: Added MaximumCharactersAllowed property to MobileTextField and MobileTextArea on iOS
- iOS: Added support for Graphics.CharacterSpacing (62059)
- Linux: Added Barcode support for Linux x86_64 and arm64, which requires at minimum glibc 2.31 (i.e. Ubuntu 20.04 or later) (75841)
- Web: WebButton can now have a different height
- Web: Improved WebListBox performance when using a DataSource on large datasets
- Web: Added WebListBox support for HasBorder and GridLineStyle
- Web: Added support for DefaultRowHeight and HeaderHeight in WebListBox
- Web: Added an option to center WebDialogs vertically
- Web: Added support for ColorGroup in WebMenuItem.TextColor
- Web: Added support in WebPagePanel and WebTabPanel to Add and Remove panels at runtime. Renaming tabs is also possible in WebTabPanel. Web controls PanelIndex property can now be modified, adding support to embed controls in panels, at runtime
- Web: Individual segments of WebSegmentedButton control can have a different Indicator now
- Web: Added support for Control Sets in Web projects
- Web: Added IsGridVisible, IsYAxisVisible and IsXAxisVisible properties to Chart control on Desktop and iOS
- Web: Added a property for WebButton and WebSegmentedButton controls to make them appear outlined
- Web: WebToolbar.Icon doesn't needs to be a square now. Its width will grow as needed
- Windows: DesktopMenuItem.Visible is now supported for Windows. Note: this does not affect the deprecated MenuItem

Fixed:
- XmlNode: getting/setting properties of a non-existent node no longer crashes. This also fixes a crash when viewing the XmlNode in the debugger
- Fixed getting the appropiate values for Graphics.Width and Graphics.Height when PDFDocument.Landscape property is set
- Fixed AutocalculateYAxis for Desktop/MobileChart
- PDFDocument will only ask for the password when opening the generated PDF if the password is set for the User (PDFPermissions), and for the Owner passord if the user tries to do some of the actions disabled in the PDFPermissions settings
- Picture.Constuctor(width As Integer, height As Integer, depth As Integer) now raises a deprecation warning
- ODBCDatabase: iterating the Tables, TableIndexes, and TableColumns now works correctly because we're setting the state of AfterLastRow properly now
- TCPSocket.Flush no longer hangs in an infinite loop when the connection is lost, or when trying to reconnect/listen before Flush finished
- Fixed setting Rect HorizontalCenter/VerticalCenter so that it centers the Rect according to the newly assigned Horizontal/Vertical center instead of being half that
- ODBCDatabase: iterating an empty RowSet no longer enters the iteration loop unnecessarily
- Android: String.Middle() now returns "" when the index and/or length exceed the string in some way. This matches behavior on other platforms
- Android: String.Right() and RightBytes() behavior now matches other platforms
- Android: String.LeftBytes() behavior now matches other platforms
- Android: Fixed a runtime exception that would occur when setting shared property values via introspection
- Android: We now exclude an internal Android table from the SQLiteDatabase.Tables query
- Android: SQLiteDatabase.TableIndexes now returns the correct information
- Android: The column types for DatabaseRow columns that are not yet saved to the database are now correct
- Android: Removed MethodInfo.InvokeReturns from autocomplete as it is no longer needed
- Android: Converting a color value with an alpha to an Integer now has the expected Xojo integer value
- Android: Getting the Int32Value of a ColorValue in a MemoryBlock now matches standard Xojo behavior
- Android: You can now tap into and type text into form fields on pages in HTMLViewer
- Android: Graphics.ClearRectangle should now work properly
- Android: ConstructorInfo.Name now contains Constructor instead of being blank
- Android: TypeInfo.IsArray now recognizes ParamArray parameters as arrays
- Android: TimeZone.SecondsFromGMT now properly accounts for daylight saving time
- Android: Added Graphics.Transparency and MiterLimit properties
- Android: Marked MemoryBlock.Short and UShort as deprecated so that they do not show in autocomplete
- Android: Array.Count(index As Integer) method no longer causes a compile error
- Android: Calling GenerateJSON on a cloned Dictionary no longer causes an exception
- Android: Using Timer.Calllater and CallLaterWithValue delegates as variable types no longer cause a compile error
- Android: TypeInfo.GetMethods() no longer includes Constructors
- Android: Fixed some issues with Introspection, Constructors and IsNull() with a Variant
- Android: Using Object as the For Each loop type when iterating over an iterator now results in more accurate behavior when using IsA
- Android: Fixed a compile error that would occur when subclassing MobileToolbarButton
- Android: Fixed a compile error that would occur when subclassing MobileSegment
- Desktop: DesktopTextField sends the TextChanged event on Windows when clicking the clear button; also, doesn't fire the TextChanged event after pressing the return key
- Desktop: Fixed DesktopSearchField reporting the right value in the KeyDown event for Return / Enter on macOS
- Desktop: DesktopChart Popovers aren't clipped when the Chart area is small
- Desktop: Resizing ListBox columns, while editing a cell, now correctly resizes the editable cell
- Desktop: Assigning a DesktopToolbarButton subclass to a DesktopToolbar now works instead of raising compile errors
- Desktop: Fixed a memory leak when drawing Pictures using PDFGraphics.DrawPicture
- Desktop: No longer leaking MenuBar objects when a Window is closed
- Desktop: DesktopListBox.ScrollPosition is now updated properly when the vertical scrollbar is removed, with rows being removed after, and then the scrollbar is added back
- Desktop: DesktopSeparator now receives MouseDown, MouseDrag, and MouseUp events
- Every OS: Setting the by default background color for DesktopTextArea / DesktopTextField so controls added by code are correctly drawed when using DrawInto, or when these are added to the Window layout
- Every OS: PostgreSQLDatabase: Connect As Boolean is now marked as deprecated in favor of Connect which throws an exception on error
- Every OS: DesktopHTMLViewer now clearly indicates that WebKit is used for HTML rendering on all desktop platforms
- iOS: MobileMoviePlayer displays the the movie controller on iOS 16+
- iOS: Fixed retrieving URLPath from FolderItem saved to Temporary directory on iOS
- iOS: Mobile sharing panel is now centered in the Screen when it is displayed on an iPad
- macOS: Fixed getting the appropiate X/Y coordinates of a window shown as Popover on macOS
- macOS: Setting Window.Visible to True on macOS in a previously hidden window shows it again
- macOS: DesktopContainer returns the expected index on macOS when accessing the TabPanelIndex and PanelIndex properties
- macOS: Fixed a visual glitch when setting a CheckBox cell type in a Listbox during the Opening event
- macOS: Now, DesktopTextField scrolls the view to the visible area on macOS when using SelectionStart method to set the cursor position beyond the visible limits
- macOS: DesktopMenuItems no longer remain enabled (when they shouldn't be) after switching between windows
- Mobile: Now MobileDateTimePicker Calendar is based on user settings on iOS
- Web: Fixed an issue causing some events to lose the WebSessionContext, when using the experimental Send Events in Batches setting
- Web: Fixed an issue causing WebImageViewer to ignore its URL property, when being set from the Inspector panel
- Web: Fixed a WebChart issue causing charts of bar type to be unable to set the grid color option, or font settings
- Web: Fixed a WebFileUploader issue causing its button to ignore raw HTML content
- Web: Fixed a WebCheckBox issue causing the control to be wrongly positioned, when not being locked to the left side
- Web: Fixed an issue causing a horizontal scrollbar to appear in the WebListBox control unnecessary
- Web: Fixed an issue causing WebListBox to be unable to remove rows after changing the column count
- Web: Fixed an issue causing calling applyTooltip() from the Web SDK to raise a JavaScript exception, when the element was undefined at runtime
- Web: Fixed a WebUIControl issue causing setting Width or Height properties at runtime to be ignored sometimes
- Web: Deprecated System.WebCursors in favor of WebStyle.Cursors
- Web: The debugger won't break anymore, when receiving a malformed request for events
- Web: Fixed a WebDatePicker issue that could cause the control to throw exceptions, when the language code wasn't recognized
- Web: Fixed an issue causing the WebFileUploader control to be able to raise the UploadFinished event before UploadStarted
- Web: WebTabPanel.HasBorder can now be changed at runtime
- Web: Fixed an issue causing WebDialogs to not be completely cleared after closing its parent control
- Web: Improved the internal Xojo Web server to make a more efficient use of the CPU
- Web: Fixed a WebListBox issue when trying to get the row tag of a row that has not been shown yet, when using a WebDataSource
- Web: Fixed a WebListBox issue causing the control to ignore selecting the first row, when using DataSources with zero based PrimaryKey
- Windows: Labels, on a TabPanel, no longer longer draw with an incorrect background color when a high contrast theme is selected
- Windows: Popover window no longer shows up in the taskbar when DesktopWindow.ShowPopover is called
- Windows: Fixed getting the proper font descriptor for PDFDocument on Windows when setting the Bold property for the same font name
- Windows: DesktopSearchField fires the TextChanged event on Windows after pasting text
- Windows: Popovers, initiated with DesktopContainer.Popover, now appear over global floating windows. Popovers that are initiated with DesktopWindow.Popover now appear over global floating windows only if the DesktopWindow.Type is set to Global Floating Window
- Windows: Graphics.Rotate now correctly draws items at the correct position when printing
- Windows: Locked controls no longer lose their positions when the DPI changes
- Windows: In specific cases where you need to draw the outline of the text on top of already rendered text, we've added the ability to opt into this specific way of rendering text by setting up the XOJO_GRAPHICS_DRAWTEXT_MODE environment variable. A value of 1 will enable Graphics.DrawText to render the text with similar metrics, regardless of whether Outline is enabled or not. This environment variable must be setup before the Graphics object is instantiated
- Windows: The RadioButtons in the DesktopRadioGroup now honors the transparency setting
- Windows: Graphics.DrawText now properly renders colored emojis on Windows and Linux. This also affects the ListBox output as well

Compiler:
Fixed:
- Static variables, of the same name, in overloaded methods are no longer treated as a single variable between the various overloaded methods. Static variables are independent within their scope, even for overloaded methods, as they should be
- Toolbar: assigning an Icon to a Toolbar button no longer throws a compile error if the name of the Picture conflicts with a property of the same name (such as Index)
- Android: CType usage with Boolean and numeric constants no longer causes a compile error
- Android: Introspection.MethodInfo.IsShared is now correct for shared methods
- Android: Fixed a compile error that could occur when using Me or Self in Container events
- Android: Fixed a compile error that could occur with methods that had attributes
- Android: Fixed a compile error that could occur with methods on a screen that declare a multidimensional array parameter
- Android: Fixed a compile error that would occur when assign an enum value to a variable
- Android: Fixed a compile error that could occur when using ByVal on some module methods
- Android: Fixed a compile error that could occur with Delegates that specify parameter default values
- Android: Fixed a compile error that could occur when using Color default values in a method declaration
- Android: Fixed compiler issues related to casting to interfaces within modules and casting to MobileSlider
- Android: Fixed some compile errors related to casting to MobileUIControl and when parsing hidden class members
- Android: Fixed an issue when using AddHandler to call an event method that is not on the class itself
- Android: Display a better compile error message when there is a type mismatch error caused by incompatible Declare syntax
- Android: Shared computed properties now work properly


Xojo 2024 Release 1.1
Highlights:
- Building for Linux is now included in the free IDE
- Lite licenses can now save in Version Control format
- Popovers for iOS, Desktop, and Web projects
- Creating / scanning Barcodes for macOS, Windows and iOS projects
- SQLite updated to 3.45.1
- Updated iOS SDK to 17.2
- Zip now includes standard password support
- Font and Font Size can now be set independently for the debugger
- Plugins can now include external shared library dependencies

Statistics:
- Bugs fixed: 7

IDE:
Fixed:
- Debugger: the globals Window list now includes all instantiated windows, and not just the front most window

Framework:
Fixed:
- Linux: MoviePlayer.AutoRepeat now works correctly to start playing the movie from the beginning, instead of at some random point in the movie
- macOS: Now Barcode.Image honors the Height on macOS and iOS when the barcode type is set to Barcode128
- macOS: Now a CheckBox celltype updates correctly its visual state when the user clicks on it and the DesktopListbox is displayed in a Popover window on macOS.
- macOS: Fixed click x/y coordinates for DesktopListbox and DesktopCanvas on macOS when instances of these are displayed in a Popover Window. This was impeding right selection of the clicked row and reordering rows in a DesktopListbox; plus offering the right value for Y coordinate on DesktopCanvas.
- macOS: Round button style on macOS looks now right again at runtime on macOS
- Windows: Popovers no longer exhibit a translucency effect, which affected the background color setting


Xojo 2024 Release 1
Highlights:
- Building for Linux is now included in the free IDE
- Lite licenses can now save in Version Control format
- Popovers for iOS, Desktop, and Web projects
- Creating / scanning Barcodes for macOS, Windows and iOS projects
- SQLite updated to 3.45.1
- Updated iOS SDK to 17.2
- Zip now includes standard password support
- Font and Font Size can now be set independently for the debugger
- Plugins can now include external shared library dependencies

IDE:
New Features:
- Added PasswordField to the Library on iOS and Android, so it is consistent with Desktop and Web
- Deprecated interfaces are no longer listed in the Interfaces dialog list, unless already implemented
- Added a new Preference so the user can set the Font / Font Size used by the Debugger panel
- Removed various unused iOS related resources from the Windows/Linux IDE

Fixed:
- Help text area background color properly updates when changing Dark/Light mode
- Duplicating a GroupBox on a TabPanel now properly duplicates its child controls
- Allow controls on a panel of TabPanel/PagePanel to be copied and then pasted onto a different panel, instead of being copied onto the same panel they were copied from
- Now it is possible to set the name of a control instance to the same name of a class created in the project
- Prevent an IllegalCastException that could occur in some situations when copying a database project item to another project
- Debugger variable listbox columns can no longer be resized to 0 width
- Added a new check when adding new enum items, so they can't start with a number or sign, or contain non alphanumeric characters when the previous rules are meet
- Prevent code block selection from changing in some situations when expanding/collapsing the block
- Avoid an OutOfBoundsException that could occur when adding blocks to existing code
- Unified ColorGroup editor in the Inspector Panel for iOS projects, so it is the same used in Desktop / Web projects
- The code editor autocomplete no longer mistakenly colors object property/method names that start with REM
- Brought back the limit to display only last 1500 messages in the Messages Panel. Also added an option in the Messages Panel to save the full list of messages to a file, not just the last 1500 ones
- ProjectConsole, ProjectDesktop, ProjectWeb, ProjectiOS methods for use with Code Asssistants now work properly. Added ProjectAndroid and ProjectMobile now returns True for iOS or Android
- To better match standard macOS behavior, on Ventura and later the Settings window title bar text now reflects the name of the setting group that is selected
- Fixed a NilObjectException when trying to paste other content than a picture from the Clipboard in the Icon Editor
- Avoid an OutOfBoundsException when double-clicking in an empty area of the Inspector Behavior property list
- Avoid an OutOfBoundsException that could possibly occur when changing signatures of overloaded methods
- Fixed an OutOfBoundsException that could occur when processing doc entries for some properties on nested modules
- Fixed a OutOfBoundsException that could possibly occur when dragging code in the code editor
- Fixed a possible exception that could occur during IDE searching with Match Case selected
- Fixed an OutOfBoundsException that could possibly occur when reordering Structure fields
- Debug runs now always use Default optimization level (aka no optimization). This prevents odd debugging behavior. The Optimization Level setting will now only be used when Building
- Fixed an OutOfBoundsException that could occur when typing (or pasting) unusual text into the Constant Editor name field
- Reduced the time it takes to duplicate controls in a large control set
- Avoid a NilObjectException that could occur when stopping the debug run of an app while things are still starting up
- Attempt to avoid a NilObjectException that could occur when adding a control from the Library to a layout
- Avoid a NilObjectException that could occur when there is a startup/connection error when launching an iOS app
- Attempt to avoid a NilObjectException that could occur when drawing resize handles in the layout editor
- Attempt to avoid a NilObjectException that could occur when adding an event handler
- The contrast has been increased in the Add item icon from the Toolbar editor in the IDE, so it doesn't look like disabled
- Fixed a possible exception that could occur when the IDE (or a project window) is closed while debugging
- Fixed an issue where some changes made to a control, for Web projects, did not get saved properly
- We now clear out all the Plugin cache if just one of them has changed, since this one change may also affect other related Plugins too
- Prevent NilObjectExceptions from occurring in certain situations where the Navigator tries to display an item that does not exist
- Attempt to fix an exception that could sometimes occur when shutting down the IDE while debugging
- Attempt to fix an unreproducible exception that occurs for some when switching to show a layout editor
- In the Layout Editor, when dragging or resizing controls these keyboard keys are now ignored: Enter/Return, Tab, arrows. Previously these were processed leading to odd behavior and the occasional exception (particularly with pressing tab)
- Fixed a NilObjectException that could occur when entering an invalid Xojo Cloud app name
- Prevent a desktop menu bar from being dragged to a non-desktop project. Prevent a Color Group from being dragged to an Android project
- Autocomplete no longer shows Delegate methods that are marked as Hidden
- The Code Editor doesn't display cropped the last line of a long method when the code is displayed while debugging
- Debugger no longer crashes when viewing the contents of an object that is going out of scope
- Android: Code signing an Android app on Windows for the Google Play Store is now working again
- Android: Debugger is now better able to display information about some end-user classes
- Android: Android Debug Device list no longer shows a useless INFO entry when newer versions of Android Studio are installed
- Android: Fixed regression on iOS projects that was impedding to set the super of a ContainerControl to another ContainerControl class
- Android: Fixed an issue with resizing Android container controls that could cause an IDE exception
- Android: MobileScreen in the Android Library now has a contextual menu to create a subclass
- Android: Stopping the Android debugger while it is in the processing of starting up no longer causes an IDE exception
- Android: Dragging the resize handles of a MobileScreen (which does not change the screen's size) no longer adjusts the size of controls that are locked to the screen's edges
- Android: Fixed an exception that could occur with some Android compilation errors when building a standalone app
- Android: Now display a better compile error if the Java version needed for Android is incorrect. Clearing the cache (from Preferences) also clears additional Android cache folders which can sometimes cause odd compile errors when they get stale
- Android: Non-UI controls added to a screen now display a standard compile error if there is no public constructor
- Android: Prevent pasting of desktop controls, web controls and unsupported controllers onto a MobileScreen
- Android: Attempt to avoid a possible NilObjectException that might occur when terminating an Android debug session as it is starting up
- Android: iOS launch image can no longer be pasted into an Android project
- Android: An iOS Icon project item can no longer be pasted into an Android project
- Android: iOS Notification Center can no longer be pasted into an Android project
- Android: An iOS Layout can no longer be pasted into an Android project
- Android: Desktop toolbars can no longer be pasted into Android projects
- Android: A desktop report project item can no longer be pasted into an Android project
- Android: Worker project items can no longer be pasted into Android projects
- Android: Debugger tracks variable scope better and no longer attempts to show a variable value that is out of scope, which would sometimes result in the wrong value being shown or the debugger crashing
- Android: The running app no longer crashes when the debugger tries to display a value for a computed property that has raised an exception
- iOS: Now the LayoutEditor displays the text as hidden for MobileTextField on iOS when the Password property is set to True
- iOS: Within the Library on iOS, creating a new subclass using the contextual menu from the Screen icon now sets the correct superclass of MobileScreen
- iOS: Fixed misspelled TextArea/TextField.SelectionLength on iOS
- Linux: Prevent a NilObjectException that could sometimes occur when the layout editor is resized
- macOS: Fixed DesktopButton with Round style being displayed clipped on macOS (layout and runtime)
- macOS: Improved the response to edit the entries of the Segmented and TabPanel controls in the Inspector Panel via double-clicking the listbox cells in their respective Editors
- macOS: Fixed the Inspector tip crashing the IDE when it is shown under macOS Sonoma 14.3
- Web: For Web projects, changing the Super of a control now properly updates the inspector to reflect this new change
- Web: Fixed an issue causing Unparented controls to be assigned to the closest WebView, when re-loading the project
- Web: Fixed an IDE issue happening when saving and loading Web projects with nested controls. Some properties weren't working after reloading, affecting also these controls at runtime
- Web: Fixed a compilation issue happening when using Localized String Constants in the WebRadioGroup.InitialValue property
- Web: Fixed an IDE issue causing an unneeded high CPU usage, when working on Web Projects
- Web: Fixed a bug when previewing some type of buttons in the IDE, when the Enabled property was set to False
- Web: The WebButton preview in the IDE will display an ellipsis, if the button is too narrow, to match what will happen at runtime
- Windows: Remote Debugger CheckBox label is now readable when in Dark Mode
- Windows: Windows IDE: the label heading on the Copy Files Build step editor is now readable in dark mode
- Windows: Fixed an unhandled NilObjectException that was raised in Document.GetScratchDir
- Windows: Reduced the amount of file access that occurred when moving controls and typing in the code editor. This should help improve the overall experience while performing these tasks
- Windows: IDE no longer crashes depending on what controls are on the layout and when tabs/windows are closed
- Windows: Adding a double ampersand (i.e. &&) to a multiline label now renders correctly to a single ampersand in the layout editor. This also affects calls to Label.DrawInto
- Framework:
- New Features:
- Deprecated all the numeric (Double, Integer, etc.) FromText functions in favor of FromString
- TextShape: deprecated Value in favor of Text
- Added a wait for silence time to Barcode scan on iOS, so code reads are not sent in a row when scanning the same code
- Added DatasetLastIndex and LabelLastIndex properties to Desktop/MobileChart
- Added Datasets and Labels methods to Desktop / Mobile Chart to iterate over all the Datasets and Labels of a Desktop / Mobile Chart instance
- Reduce PDF file size when the same File Attached annotation is used more than once in the same document
- Updated SQLite library to 3.45.1
- EncodeBase64 now returns a string whose text encoding is set to UTF8 instead of ASCII
- FolderItem.Zip/Unzip now supports the standard (ZipCrypto/PKWARE) Zip/Unzip password encryption
- Desktop: Added RemoveControl(control As DesktopUIControl/DesktopContainer) to DesktopWindow and DesktopContainer
- Desktop: Removed unused DesktopMoviePlayer.PlayerType property
- Every OS: Added FolderItem.RemoveFolderAndContents. Unlike FolderItem.Remove, this function will recursively remove the folder and all of its contents
- Every OS: Added FolderItem.Extension property to get/set the file extension of a file
- Every OS: Added String.ToBoolean extension method. This will return True if the string contains 1 or True and False otherwise
- iOS: Constraints added automatically to a MobileContainer shown as Popover
- iOS: Overloaded ShowPopover method on iOS so it accepts a MobileToolbarButton as its parent control
- iOS: Fix in MobileChart to deal with NaN values in Datasets (Line, Bar, Scattered, Bubble)
- iOS: Added Barcode class to iOS
- macOS: Now the user can mirror the video stream of the Barcode scan UI on macOS
- macOS: Added Barcode class support to macOS (creating QR / Bar128 codes, and scanning images)
- Web: Added WebMenuItem.PopUp to display a contextual menu programmatically, like in DesktopMenuItem
- Web: Added WebChart.Datasets and WebChart.Labels iterators, and the WebChart.LabelCount read-only computed property
- Web: Added RemoveControl(control As WebUIControl) to WebView
- Web: WebResponse will attempt to use a memory buffer now, if possible, instead of temporary files
- Web: Added WebContainer.ShowPopover, to display custom popovers

Fixed:
- The deprecated Variant.TypeDate and TypeText no longer shows up in auto-complete
- Assigning a DateTime object, to a subclass of a DateTime, now correctly preserves the nanoseconds
- Fixed DesktopChart in Line mode leaving a blank area to the right
- MySQLCommunityServer: ExecuteSQL/SelectSQL now returns a more useful error code on failure (instead of always -1), especially if the connection to the database server was lost
- ODBCDatabase.BeginTransaction no longer prevents table creation
- Fixed getting TextHeight with additional WrapWidth paramenter in PDFDocument graphic context
- Android: MobileContainer now resizes properly when locked to bottom of screen
- Android: Column names accessed on RowSet or DatabaseRow are now case-insensitive
- Android: TabPanel contents are now shown for tab panels that are on containers
- Android: Prevent an exception when attempting to display large images in MobileImageViewer
- Android: MobileImagePicker.Show now better matches iOS. Removed unused Constructor from autocomplete. Note that the Show parameter is not actually used on Android
- Android: Fixed a runtime exception that could sometimes occur when an Object variable becomes Nil
- Android: Fixed a startup crash that could occur when using System.DebugLog in the constructor of a container
- Android: Introspection no longer reports doubled method and properties on MobileScreens
- Android: MobileScreen.Size and ContentSize now more accurately exclude the status bar size
- Android: Introspection.TypeInfo.BaseType property now reports correct values for mobile classes and controls
- Android: Force MobileHTMLViewer to ask for focus when page loads to avoid possible issues with software keyboard not allowing input on some web sites
- Android: MobileTabPanel animations now run after the PanelChanged event has completed
- Android: Introspection.PropertyInfo.Value now properly uses the base parameter
- Android: MobileLocation requires Google Play Services (GPS). Added more checks to ensure that location access via GPS will work. Failure results in the state being set to AuthorizationStates.Restricted
- Android: Fixed an issue with calling certain Methods that have the same name as a Property on a class
- Android: Added MemoryBlock.Operator_Add to match other platforms
- Android: When URLConnection.AllowCertificateValidation is False, also skip checking host verification to match how other platforms work
- Android: Attempting to create a New MobileToolbar now displays a standard compile error instead of an internal Android compile error
- Android: Fixed an issue when using a For Each loop with certain ParamArray parameters
- Android: To match behavior on other platforms, Variant math operations using Nil no longer cause an Android compile error and instead raise NilObjectExceptions at runtime
- Android: TypeInfo.Name and FullName are now correct for MobileScreens
- Android: Multi-dimensional arrays now return the correct value with VarType
- Android: VarType on a currency array now returns the correct value
- Android: Fixed an issue where DatabaseColumn.NativeValue/BlobValue could have the wrong number of bytes
- Android: JSONItem.IndentSpacing now defaults to 2
- Android: With a DatabaseRow that is not connected to a RowSet, column value changes are now properly retained and retrieved
- Android: DatabaseRow.ColumnCount and LastColumnIndex are now correct for rows that are created manually
- Android: RowSet.ColumnType now returns 5 for SQLite TEXT/STRING/VARCHAR columns to match behavior on other platforms
- Android: BinaryStream.ReadCurrency now turns correct currency value
- Android: BinaryStream.ReadPString method no longer causes a compile error, but it does raise an AndroidException at runtime since PString is not a supported type
- Android: BinaryStream.BytePosition is now properly updated when reading data
- Android: BinaryStream.ReadUInt8 now returns the correct value
- Android: TextInputStream.BytePosition is now updated after calling ReadAll
- Android: MobileApplication.Actived and Deactivating events now work on Android
- Android: To match behavior on other platforms, added MemoryBlock.Long, Short and UShort methods
- Android: To match behavior on other platforms, adding two Nil values to a Variant now raises a NilObjectException
- Android: FolderItem.Locked return value is no longer reversed
- Android: Screen startup event order is more consistent across devices
- Android: Calling SQLiteDatabase.CreateDatabase with a file in an invalid location now properly raises a DatabaseException
- Android: Removing controls from MobileContainers now works properly
- Android: To match desktop behavior, added MobileTabPanel.AddPanelAt() method
- Android: To match other platforms, calling SQLiteDatabase.ExecuteSQL with an empty SQL string now does nothing instead of raising a DatabaseException
- Android: Added MobileContainer.Objects iterator
- Android: Encodings.DOSGreek1/MacDevanagari/MacEthiopic/MacExtArabic/MacGaelic/MacGeorgian/MacGujarati/MacGurmukhi no longer cause compile errors
- Android: Locale.CurrencySymbol has been updated to better match what is returned on other platforms
- Android: GenerateJSON now handles dictionaries with nested arrays properly
- Android: Fixed a compile error when using Point.DistanceTo
- Android: Fixed a compile error when using Encodings.MacDingbats
- Android: Fixed a compile error when using Encodings.MacRomanian property
- Android: Exceptions that occur within the framework now generate a more useful stack trace. Also fixed an unhandled internal SQL exception that could occur when trying to commit without a transaction
- Android: Internal RowSet properties no longer are shown in the Xojo debugger
- Android: URLConnection.SendSync() now works better with binary data. Send() now handles some text data better
- Android: Fixed a runtime exception that would occur when trying to get the value of a shared property
- Desktop: DesktopMenuItems now correctly honors the AutoEnabled state, especially when set to False
- Desktop: To match docs, DesktopListBox.CellTextAt() now accepts -1 to refer to an entire row, column or both
- Desktop: DesktopListBox: dragging an already selected row that contains an TextField/CheckBox CellType now works, instead of entering editable mode
- Desktop: Tabbing into a DesktopTextField that has a format applied to the Format property has the same behavior than when Format is empty
- Every OS: DateTime.FromString no longer throws an InvalidArgumentException when the date (without a time specified) falls within the DST transition period
- Every OS: The Pressed event has been renamed to ValueChanged on DesktopDisclosure to keep consistency with other controls. You will need to manually move your event code to the new event
- Every OS: DesktopContainer: no longer raises a Resized event before the Opening event is fired. Note: this change does not affect ContainerControls
- Every OS: Updated Integer ToHex/ToBinary/ToOctal to return String instead of Text
- iOS: Fixed an odd behavior taking place under certain circumstances when executing JavaScript on an HTMLViewer instance on iOS
- iOS: The iOS Layout honors the Dark Mode / Light Mode set on macOS, so the ColorGroups assigned to the iOS controls are correctly displayed in the Layout Editor
- Linux: Playing sounds no longer crashes on newer versions of Linux (like Ubuntu 23.10), or Raspberry Pi5
- Linux: MoviePlayer no longer crashes on newer versions of Linux (like Ubuntu 23.10 or Raspberry Pi5). However, Wayland is not supported so you will need to disable Wayland to play movies using our MoviePlayer. As an alternative you may be able to play movies using our HTMLViewer instead
- Linux: Rotated StringShape, on a Canvas/Windows Graphics, no longer draws at the wrong position
- Linux: Threads no longer eat up 100% CPU, unless the thread Priority is set to 9 or higher
- Linux: The default System font no longer looks condensed on Ubuntu 23.x
- Linux: MySQLCommunityServer can now connect to servers that require versions of TLS that is greater than 1.0 (69197)
- macOS: macOS/iOS: String functions (Left/Mid/Right/etc.) no longer uses the system encoding to do its calculations when the String.Encoding is Nil
- macOS: Calling DesktopWindow.Minimize no longer raises the Minimized event twice
- macOS: For exceptions that are triggered from a Plugin (like RegEx), the IDE now properly shows the function call stack on M1 Macs
- macOS: Assigning new Text to a DesktopTextField now maintains the current selection on Windows/Linux. This now mimics the same behavior as macOS
- Web: Fixed some reported memory leaks in the Web Framework
- Web: Fixed a WebView.Controls issue causing this iterator to return also non-visual WebSDK controls
- Web: Fixed some WebView issues causing Controls, ControlAt, ControlCount and LastControlIndex to ignore controls inside other views, like tab panels or rectangles
- Web: Fixed a WebFileUploader issue preventing the Caption property to be updated at runtime
- Web: Fixed a WebMenuItem issue causing empty row height to be much smaller than others
- Web: Fixed a WebFileUploader issue preventing the end user to drop a file into the browser control, at runtime
- Web: The Web framework won't cut the connection too early anymore, when the user is uploading a file with WebFileUploader
- Web: Fixed a WebPopupMenu issue that was causing the focus to jump into another dropdown menu, when navigating using the keyboard
- Web: The Web SDK won't discard duplicated events anymore, when using triggerServerEvent method
- Web: When navigating the layout using the keyboard, hidden WebViews won't receive the focus anymore
- Web: Fixed a WebTimer issue causing the control to ignore its Enabled property from the inspector
- Web: The web framework will prevent displaying multiple WebMessageBox above each other, when quickly pressing Enter/Esc key repeatedly
- Web: Fixed an issue causing some Web SDK controls to not appear inside WebTabPanel or WebPagePanel views
- Web: WebPopupMenu will display the focus ring now, when it receives the focus
- Web: Fixed a WebStyle bug causing AddTransition with a delay to use a wrong value
- Web: Calling SetFocus on a WebControl will wait the control to be rendered, if needed, before trying to set the focus
- Web: WebSearchField will raise TextChanged and Pressed events when the user clears the field with the clear button
- Web: Fixed a few tab engine issues that wasn't detecting the focused control, in some kind of Web SDK controls
- Web: Setting WebListBox.SelectedRowColor at runtime won't make the whole control to refresh, it will just set the new color
- Web: Fixed a WebFile issue that was raising a NilObjectException, when trying to get the underlying file from an unknown Session
- Web: Fixed an issue causing WebMapViewer.LocationSelected to pass a wrong WebMapLocation object
- Web: Fixed an issue causing the web framework to unnecessary keep in memory a temporary file path for 2 hours in some places, like in the WebApplication.HandleURL event
- Web: WebCanvas inside a WebTabPanel will be rendered faster now, when switching between tabs
- Web: Fixed an issue that could cause WebResponse.Write to raise a NilObjectException in some situations
- Web: Fixed an issue causing WebView children, like a WebDialog, to raise the Shown event before it was actually visible
- Web: Fixed the WebRequest.MIMEType issue where the value was always returning text/html, instead of the actual value
- Web: Fixed a WebListBoxImageRenderer issue that was causing HiDPI images to be shown larger than it should
- Web: WebLink.TextAlignment will also be applied when the WebLink button style is used
- Web: Fixed a WebView issue causing subclassed items to position their controls based on their super class dimensions
- Web: Fixed a WebCheckbox vertical alignment issue, causing the checkbox to appear far above than we want, when embedding the control at runtime
- Web: WebContextualMenu arrow indicator for submenus are vertically centered now
- Web: Fixed a WebSegmentedButton issue causing Enabled to not be applied at runtime. The whole control or individual segments can be disabled now
- Web: WebPopupMenu can now make use of localized constants when using the Initial Value property
- Web: Fixed a WebMessageDialog issue causing the event handlers to not be properly configured when being created with code at runtime
- Web: Modified the WebMessageDialog look and feel to match the current Bootstrap 5 guidelines
- Web: WebMapViewer can be disabled now, allowing the developer to disable user interactions on the map
- Web: Fixed a WebImageViewer issue causing updating the URL parameter to be ignored when the Image property wasn't empty
- Web: Fixed an issue causing WebUIControl to not be able to update the original Tooltip at runtime
- Web: Fixed an issue causing every new web app session to be leaking some memory
- Windows: Graphics.DrawText with Outline enabled, now properly outlines the text using fonts that are weighted (i.e. the boldness level) more heavily, like Arial Black
- Windows: Iterating through the SerialDevice list no longer causes the serial ports to be temporarily open
- Windows: Prevented multiple instances of a Popover window to show before one is completely closed
- Windows: Windows/Linux: a RuntimeException is now raised (instead of an assertion), if the Resources folder cannot be found while attempting to load up all the picture resources that were added to your project
- Windows: The DesktopUIControl.ConstructContextualMenu event no longer incorrectly fires a second time immediately after the first on various controls, like the DesktopTextArea, DesktopPushButton, etc
- Windows: DesktopChart.DrawInto no longer throws an UnsupportedOperationException on Windows/Linux
- Windows: A TextArea, that's hidden behind a non-visible page/tab of a PagePanel/TabPanel, no longer reveals itself when retrieving the StyledText.RTFData
- Windows: ODBCDatabase: storing and retrieving large BLOB values now works properly instead of raising errors or being truncated
- Windows: Window is now resized/positioned correctly when entering fullscreen mode, instead of being offset at the top and leaving visible gaps near the bottom
- Windows: DesktopNotePlayer: the Drum Kit instrument now works correctly, instead of sounding like a piano
- Windows: DateTimePicker.DrawInto now renders the control instead of drawing nothing
- Windows: TabPanel.DrawInto no longer fails to draw all controls when a DisclosureTriangle exists on the current tab
- Windows: Implemented support for TabPanel in Dark Mode
- Windows: App no longer locks up when a modal dialog is displayed while a drag is in-progress
- Windows: Passing in an (X, Y) offset to DesktopWindow.DrawInto now offsets Canvas drawing correctly

Compiler:
New Features:
- Updated iOS SDK to 17.2
- Plugins: additional library dependencies can now be included along with your plugin shared library. This allows you to include external shared library dependencies without having to build it into your main library. Refer to the Plugin Package Format in the Plugins SDK documentation for more details
- Resolved Issues:
- The deprecated Variant.DateValue no longer shows up in auto-complete
- The deprecated Variant.TextValue no longer shows up in auto-complete
- Windows app name that contains an ampersand can now be built/run properly, instead of the app not being able to launch at all
- The DateTimePicker plugin is no longer included for all built apps, unless of course it's being used
- Compiler now raises an error when it encounters enumerations that share the same name, but with different types, while rendering Windows/Controls for Desktop apps, instead of running into failed assertions at runtime
- A compile error is now raised (instead of an assertion) if we were unable to create a build folder during the compilation process
- Calling Array.Pop, on an array of Structures, no longer returns the wrong data or throws an OutOfBoundsExceptions incorrectly for ARM64 builds
- Assigning an Array of Structures (using the Array keyword) now populates the Array correctly for ARM64 builds
- Android: Fixed a compile error that could occur with some expressions within a single-line If
- Android: Fixed a compile error that can occur when overriding a method from a superclass that is not the immediate superclass
- Android: Clarified the Android duplicate method overload compiler error message and fixed an issue where arrays where not being treated as separate types when checking for duplicate method overloads
- Android: Fixed an issue when using the Array function while casting the first value
- Android: Fixed a compilation issue where some methods named like operator overloads didn't match the expected signature
- Android: Fixed an issue where certain Kotlin declares could require an unnecessary extra parenthesis
- Android: Fixed an issue when assigning certain variables initialized with Global to other values
- Android: Fixed an issue when defining certain Constants while using Global
- Android: Fixed an issue with certain uses of Global with Constructors that have parameters passed in
- Android: Fixed an issue with certain Classes that have a ParamArray in their Constructor
- Android: Fixed an issue when calling a MobileScreen Constructor from within that MobileScreen, and fixed an issue when accessing certain Class Constants from outside the Class
- Android: Fixed an issue when using an empty enumeration as a method parameter type
- Android: Fixed an issue with method parameters that use Global.Variant/Object
- Android: Fixed an issue when calling certain methods with a Variant/Object ParamArray type
- Android: Fixed an issue when using other Array methods on a ParamArray parameter
- Android: Fixed an issue when using certain Array methods on a ParamArray parameter
- Android: Fixed an issue when using certain expressions when defining constant values in code
- Android: Fixed an issue with using class constants from a shared method
- Android: Fixed certain uses of Object arrays when used as parameters
- Android: Fixed an issue when comparing certain String properties with explicit Variant.StringValue calls
- Android: Fixed an issue with using some Operator overload names in a module, as well as using App as a name of a parameter
- Android: Project Item Number Constants no longer cause a compile error if they don't have a specified default value
- Android: Fixed an issue when declaring certain Arrays with &b/&h/&o literals
- Android: Fixed an issue when declaring a single dimension array after a multi dimensional array in the same line
- Android: Fixed an issue when using Me/Self as a value during certain variable initialization
- Android: Give a clearer error message if you try to use Object with GetTypeInfo
- Android: Fixed an issue with certain multiple uses of IsA inside of a single If expression
- Android: Fixed an issue when using Raise with an Event that returns an exception
- Android: Prevent duplicate compile errors from being shown
- Android: Display a friendlier error message when there is an unknown/unresolved reference, which can happen with object Declares
- Android: Verify that the first part of the bundle ID is not the same as the App name as that can cause an Android compile error
- Android: Variables used inside or with certain for loops are now visible in the debugger
- Web: Fixed a WebListboxCellRenderer bug causing the project to refuse to compile when creating subclasses inside a Module

Documentation:
Resolved Issues:
- The Use WinUI (experimental) build option has been documented
- The code samples on the various Object2D subclass pages have been made more clear
- Added a note to Mutex.Constructor to make it clear that the name passed will be used to create a file and therefore must be a valid filename for the host OS
- MobileApplication.CurrentScreen is now documented

Examples:
Resolved Issues:
- Passing an empty Value to Barcode.Image now raises an InvalidArgumentException instead of crashing on Windows


Xojo 2023 Release 4
Highlights:
- A more responsive IDE
- Reduced build times
- Debug and built apps run faster
- Xojo web framework optimized for speed
- Plugins load more quickly
- Android Barcode Scanner Class
- Example projects now feature descriptions and new search functionality

IDE:
New Features:
- Added 'Path' entry to the information displayed when an Example Project is selected in the 'Choose a Project' panel
- Increased the Debugger by default font size to 11 points
- Now the IDE's Messages panel only displays the items matching the text typed in the Search control for better clarity
- Changes to the IDE's Debugger panel so it uses the same font size set for the Code Editor; and accesing the String debugger panel double clicking on the value row. Also other have been made to the String Debugger panel, removing the Edit Tab because now it is possible to set a new value for the string directly in the Text Tab, plus reorganizing the controls under the Text tab for a better use of the available space
- Added AllowPopover property to the Inspector Panel on DesktopChart to unify with WebChart
- Web: Layout editor preview won't render dark mode anymore in Web Projects, if the Supports Dark Mode option is turned off
- Web: Reduced the compile time when building Web projects
- Windows: Windows/Linux IDE: the default shortcut key for the Edit->Delete menu is now Del instead of Ctrl+Bksp on Windows and Bksp on Linux

Fixed:
- Plugin declared Delegates now have their compatibility flags setup properly
- For consistency, we no longer dim the layout editor when bringing up the XAML Chooser window since we're not editing the XAML content in place, only bringing up a dialog
- Changes to Plugins are now more accurately tracked so that our Plugin caches are cleared when they need to be. We also do a bit less caching when Plugins are loaded, with the side benefit being slightly faster Plugin loading times
- Fixed alignment of the Clear button in the Messages panel on macOS
- Code Editor Context Menu Go To scrolls the code editor to the matching line
- The Pragma reminder to implement interface methods no longer has an extra space and the #Pragma Error part honors the coding preference for Applies Standard Case
- Running a project remotely, by using the menu shortcut, no longer adds extraneous characters to the code editor
- Restored the ability to filter Window controls by name in the debugger
- We no longer include extraneous HTMLViewer resources when a Window, that contains an HTMLViewer, is not being used/referenced (i.e. when the linker has dead stripped the Window) for Windows/Linux builds
- The deprecated MSSQLServerDatabase plugin is no longer packaged in the Plugins folder. If your project still depends on this class, the plugin still exists in the Database Plugin Resources folder, found in the Extras folder
- Fixed an OutOfBoundException when adding an image to the IDE Navigator via drag & drop
- Debugger now displays generic Object variables again
- Selecting a recent search item in the IDE's Search Panel Recent Searchs menu offers the expected behavior, even if the user's preferences is set to Find/Filter Results appear After Pressing Enter or Return
- Avoid an OutOfBoundsException that can occur when pasting into the code editor when the paste buffer contains an empty string
- Fixed creating a new iOS project being marked as dirty
- Fixed: Minimum width set for the Tab Order Editor Window in the IDE
- Fixed loading user defined defaults for controls added to the IDE (74348)
- Fixed Listbox Inspector Properties bleeding through Under Inspector Header in the IDE on macOS when DarkMode is enabled
- Fix so the Enumeration editor does numbering elements correctly
- Android: Fixed an Android app crash that would occur when viewing the App object in the debugger
- Android: On macOS when debugging with an Android emulator, bring the emulator to the front when resuming
- Android: Android apps no longer show DebugLog messages from prior app runs
- Android: Fixed an internal exception that could occur when calling Timer.CancelCallLater
- Android: If an app icon cannot be converted to PNG during