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

Xojo

Join our mailing list

Stay up to date with latest software releases, news, software discounts, deals and more.

Subscribe
Download Xojo 2024 Release 1

Xojo

  -  1.1 GB  -  Demo
  • Latest Version

    Xojo 2024 Release 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

  • Filename

    Xojo2024r1Setup.exe

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 1 Screenshots

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

What's new in this version:

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 the Run/Build process, an error message is now displayed
- Android: NewAndroidProject is now used with IDE Scripting to create an Android project
- Every OS: Removed duplicate database plugins found in the Database Plugin Resources folder
- macOS: Fixed an intermittent code-signing issue with macOS Sonoma and when iCloud Document+Desktop sync is turned on
- Web: Fixed some IDE issues causing web project controls to not be displayed properly in the layout editor
- Web: WebChart.HasLegend will be True by default now, like in Desktop projects
- Web: Removed WebHTMLViewer URL and HTML properties from the IDE inspector, as they no longer exists
- Windows: Copying from the Documentation window, using the short-cut key combination, no longer throws a ThreadAccessingUIException
- Windows: Forcibly ending a debug session for a Desktop app, that contains DesktopHTMLViewers, no longer leaves cefsubproc.exe background processes around
- Windows: Having a Separator control, along with a TabPanel, no longer causes the TabPanel to misdraw in the layout editor
- Windows: Unselected items in the Tray area are now more distinguishable in dark mode
- Windows: Windows dark mode menubar is no longer white if Windows 8.1 support is turned off

Framework:
New Features:
- String.IndexOf returns -1 instead of raising an OutOfBoundsException when the starting position is greater or equal than the string length
- The Variant.TypeDelegate constant is now documented
- CLong and String.ToInt64 no longer performs an additional string conversion to ASCII if the string is already in UTF-8
- Added new LinearGradientBrush and RadialGradientBrush constructors for convenience/simplify code. Note: these constructors will make a copy of the Point/Pair.- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, stops() As Pair)- LinearGradientBrush.Constructor(startPoint As Point, endPoint As Point, ParamArray stops As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, stops() As Pair)- RadialGradientBrush.Constructor(startPoint As Point, endPoint As Point, startRadius As Double, endRadius As Double, ParamArray stops As Pair) (74521)
- Added new PictureBrush constructor that accepts a Picture and optional PictureBrush.Modes as parameters: Constructor(image As Picture, mode As PictureBrush.Modes = PictureBrush.Modes.Default) (74510)
- Android: Added System.DismissKeyboard() method
- Android: Can now use Ptr type to pass handles to Declares for Kotlin Library projects
- Android: Added an addition constructor to Font to allow it to load a font from a FolderItem
- Android: Added Barcode class (for Android) with StartScan() method and ScanCompleted, ScanCancelled and ScanFailed events
- Android: Added MobileHTMLViewer.Cancel() method
- Every OS: String.IsEmpty now checks the string byte count instead of calculating the actual String.Length before it returns
- Every OS: Improved stack overflow checking to minimize the amount of time it takes to check for a StackOverflowException every time a function is called
- iOS: Added the Pressed event handler to MobileMapViewer on iOS, so the user can add new LocationMap pins to it using a long press gesture. Also adding DistanceTo, LookupAddress, MoveTo and PointsOfInterest to MapLocation
- iOS: Implemented global functions Asc(), Bin(), CDbl(), Encoding(), Hex(), IsNumeric(), IsNull and Oct() so they are available also on iOS
- iOS: Added global Chr() method to iOS for consistency with other platforms
- iOS: Removed throwing an unnecessary exception from iOS Graphics when using DrawRoundRectangle / FillRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle
- macOS: Calling System.Ticks is now 20% faster on macOS/iOS. This also affects background tasks that are running
- macOS: Removed throwing an unnecessary exception from GraphicsPath on macOS when using AddRoundRectangle and the CornerSize is equal or greater than the width / height of the rectangle
- Web: Added an experimental opt-in feature for WebSession, Send Events In Batches, aiming to improve performance
- Web: Improved the web framework static asset cache control, to take advantage of browser's cache
- Web: Updated Bootstrap icon set to v1.11.1 for Web Projects
- Web: Improved WebListBox rendering performance
- Web: Added StackOverflowChecking Pragma to several framework methods to improve its performance
- Web: Added WebSegmentedButton.LastSegmentIndex as a ready-only property
- Web: Improved the way some controls are sending their events to the server, to avoid under-firing or over-firing them
- Windows: DesktopXAMLContainer: PointerEntered, PointerExited, PointerMoved, PointerPressed, and PointerReleased events can now be handled in the EventTriggered event
- Windows: DesktopHTMLViewer: updated to CEF build 118.0.5993.96. Note: this build no longer supports non-HiDPI aware apps. Enable the Supports Hi-DPI build option for best results. This build also removes the swiftshader folder

Fixed:
- DatabaseRow: repeatedly assigning a value to the same Column name no longer leaks memory
- Restored some of the lost behavior of JSONItem (since 2021r1). DecimalFormat now works like it used to (instead of being ignored), and doubles are no longer formatted in the user's locale
- PictureBrush offers now the same behavior in PDFDocument than on Desktop when its mode is set to Default
- String.IndexOf will raise an OutOfBoundsException if the received startPosition parameter is equal or greater than the text lenght
- Getting the Line/Node from an XmlException no longer crashes
- The number ToString functions, that pass in Locale.Raw, now matches the same behavior as calling ToString without specifying a Locale
- Android: Added Variant.TypeWindowPtr for platform compatibility. It will never match anything on Android, of course
- Android: Fixed a crash that would occur when viewing TypeInfo properties in the debugger
- Android: Fixed an internal exception that could occur when changing a container's Visible property during its Opening event
- Android: Improved URLConnection error handling
- Android: AndroidMobileTable.SelectedRowText now returns if there are no rows or no selected row instead of raising an OutOfBoundsException
- Android: Accessing HTTPStatusCode before URLConnection has initialized no longer causes the app to crash with an internal exception
- Android: MobileApplication.UnhandledException event now better captures the user runtime call stack for Stack() and StackFrame()
- Android: Controls are resized if necessary when a bottom toolbar is added at runtime
- Android: To match behavior on other platforms, EncodeBase64 now sets the resulting string encoding to US-ASCII
- Android: Integer.ToBinary() now works with large integer values
- Android: MobilePopupMenu.SelectedRowText should return when there are no rows, not raise an OutOfBoundsException. MobileSegmentedButton.SelectedSegment should return null when there are no segments instead of raising an OutOfBoundsException
- Android: Fixed some internal exceptions that could occur when accessing some screen properties from the App.Opening event
- Android: Controls that are locked to top/bottom or left/right now report more accurate height and width
- Android: Hex strings (via Hex or Integer.ToHex) are returned with uppercase letters to better match behavior on other platforms
- Android: To better match other platforms, EncodeBase64 result no longer has a trailing LF
- Android: Nil + String when assigned to a Variant no longer has null prefixed to the beginning of the string
- Android: String + Nil when assigned to a Variant no longer has null appended to the end of the string
- Android: IsNumeric() returns True for enums to match behavior of other platforms
- Android: Locale.Identifier now uses ISO-2 IDS, matching behavior on other platforms
- Android: Fixed a compile error when subclassing TypeInfo
- Android: URLConnection binary request content data is now sent correctly
- Android: Fixed a drawing oddity with MobileOval, MobileRectangle and MobileSeparator if they had focus
- Android: MobileSeparator thickness is now 1pt and gray to match other platforms
- Android: Returning False from MobileTextField.ReturnPressed event now dismisses the keyboard
- Android: To match behavior on other platforms, VarType() and Variant.Type now return TypeInt64 (3) for an enum
- Android: Fixed some compiler error when using Crypto enumerations
- Android: Fixed an exception that occurred when using MobileSharingPanel.SharePicture()
- Android: HTMLViewer.NewWindow() event now contains correct url in the url parameter
- Android: To match behavior on other platforms, Bin() function should use 4 minimum digits, not 8
- Android: To match behavior on other platforms, JSONItem.LastRowIndex now returns a value based on the key count
- Android: It is not possible for introspection to know an array's type and size just from its declaration, but we can at least prevent an exception when requesting that information
- Android: On Android 14, avoid a situation where containers could sometimes be added to the screen more than once
- Android: Str() method now works with Boolean, Color and DateTime
- Android: Fixed an internal exception that would occur when there was only 1 tab on a MobileTabPanel
- Android: Fixed an internal exception that could occur with a MobileContainer on a screen after the app is re-opened
- Android: Invalid objects added to JSONItem now raise an InvalidArgumentException (like other platforms) instead of adding silently as a string
- Android: Fixed compile errors when overriding members of Graphics in a subclass
- Android: An empty array is added to the JSON when converted from a dictionary
- Android: MemoryBlock.StringValue() now returns a string using the specified encoding
- Android: MobileScreen Activated/Deactivated event behavior better matches iOS behavior
- Android: The behavior of CDbl now better matches other platforms
- Android: Fixed a problem with some equality checks to Currency values
- Android: URLConnection Request Content is now sent using the specified character set
- Android: Improved DateTime math results for a variety of edge cases
- Android: A Dictionary is now first converted to a JSONItem before adding it to a JSONItem
- Android: Added IsNull(value As Variant) As Boolean global function to match other platforms
- Android: For MobileTextField, only enable the keyboard done button change if the ReturnPressed event is implemented
- Android: MobilePopupMenu.RowTagAt() can now be assigned a value
- Android: Removed JSONItem.EscapeSlashes and DecimalFormat from Android as those have been deprecated in the main framework
- Android: Sign() now returns Integer instead of Double to match other platforms
- Desktop: Fixed memory leak in DesktopSearchField for Windows
- Desktop: DesktopMenuItem: enabling/disabling the menu item, outside of the MenuBarSelected event, now works
- Every OS: For consistency and to match naming standards, Semaphore.Constructor parameter name standardized to resourceCount
- Every OS: Deprecated HSV, use Color.HSV as replacement
- Every OS: A value that is represented as a Single type, that is stored in a Variant, no longer emits an extraneous e+ at the end when retrieving the StringValue
- Every OS: JSONItem.ToString no longer uses the decimal character based on locale to format doubles
- iOS: Added default event handler to MobileApplication on iOS
- iOS: Thread.DebugIdentifier is now supported for iOS
- iOS: Fixed Graphics.DrawText drawing multi-line strings on iOS
- Linux: ListBox: checkboxes are no longer drawn outside the bounds of the ListBox
- Linux: A clipped graphics from a Picture, whose scale factor is greater than 1, no longer incorrectly offsets the clipping. This fixes an issue with the Linux IDE, for Web Projects, that did not draw any controls on the layout editor when the display scale was greater than 100%
- macOS: DateTime.ToString/SQLDateTime no longer waits for the OS to garbage collect these string instances before freeing up memory
- macOS: GraphicsPath.Bounds no longer returns a Nil Rect if the width or height is 0. This fixes the behavior on macOS, iOS, and Linux to match the behavior on Windows
- macOS: Fixed setting the text on DesktopCombobox (macOS) when SelectedRowIndex <> -1 and the control still has the focus
- macOS: Fixed DateTimePicker receiving key events on macOS when the control is disabled
- Web: WebListBox won't reload its data unnecessary anymore when the browser has been resized, unless its height has changed
- Web: Fixed an issue causing large file downloads to be closed too early sometimes, before the browser finished the download
- Web: WebTabPanel.PanelCount will report the correct amount of panels now, it was always returning 2
- Web: Fixed an issue when doing a WebMapLocation.LookupAddress with the default provider
- Web: Fixed a WebUIControl issue causing the Tooltip placement to be always set to auto
- Web: Fixed a ColorGroup issue causing a NilObjectException to be raised in some situations. It was affecting Web projects
- Web: Fixed the issue causing hovering over a WebMapLocation marker in WebMapViewer to throw console errors, when Title wasn't filled
- Web: Fixed a WebMapViewer issue causing the LocationSelected event wasn't being fired, unless Pressed event handler was present
- Web: Fixed a WebChart issue causing the Pressed event to raise an internal exception
- Web: Fixed Web Framework methods and events to match Xojo coding guidelines
- Web: Fixed an issue causing connections being closed too early under some circumstances
- Web: Fixed an issue causing tooltips to not be shown on disabled web controls
- Web: Fixed an issue in WebTextField and WebTextArea causing loss of data when typing while changing its settings
- Windows: Projects using DesktopHTMLViewer no longer leave cefsubproc.exe processes laying around when the app unexpectedly crashes
- Windows: DesktopDateTimePicker no longer leaks GDI objects
- Windows: Closing a ContainerControl that has a TabPanel on another ContainerControl/Canvas, no longer crashes
- Windows: TCPSocket: sending data is now much faster on Windows/Linux
- Windows: DesktopDateTimePicker control gets the focus on Windows when the Mode is set to TimeOnly
- Windows: DesktopHTMLViewer: ZoomTextIn and ZoomTextOut now zooms in/out to more than one level
- Windows: Fixed an issue due to a bad format string when the DesktopChart is set to Scatter/Bubble and the app is ran on Windows / Linux
- Windows: Fixed DrawInto for ListBox, GroupBox, BevelButton, DisclosureTriangle, PopupArrow, and Separator controls that did not draw correctly when drawing into a Graphics whose scale factor differed from the OS scale factor
- Windows: DesktopWindow/DesktopContainer DrawInto now correctly draws all the controls on the Window/Container
- Windows: Assigned menu icons, with Picture sets, now re-calculates the best representation when the scale factor changes
- Windows: Switching between high contrast themes now triggers the App's AppearanceChanged event
- Windows: Controls, that do not have the Top locked, are now refreshed properly when the window is restored from its maximized state
- Windows: DesktopTextArea: getting the StyledText.Paragraph no longer scrolls the TextArea contents, which caused the text to appear to jump up and down
- Windows: Canvas.DrawInto no longer offsets the Backdrop image incorrectly when drawing into a Picture Graphics
- Windows: Fixed mouse cursor flickering when moving over SearchField control on Windows

Compiler:
New Features:
- Android: Updated to newer Android/Kotlin toolchain
- Android: Added Dependencies property to the Android advanced build settings. This can be used with Declares and Libraries to load any external dependencies they need. Put one dependency per line, an example would be: io.github.bitstorm:tinyzip-core:1.0.0 (74658)
- Android: Added support for Ptr type, allowing declares to custom libraries to pass along Android/Kotlin types that do not have an equivalent Xojo type

Fixed:
- Fixed an occasional issue when compiling on very high core count Windows machines
- Android: Fixed an issue where accessing certain controls by name in events of certain mobilescreen subclasses could fail
- Android: Fixed an unexpected exception when comparing a WeakRef.Value to Nil
- Android: Fixed an issue when referencing certain controls via the screen name in certain events from that same screen
- Android: Fixed an issue with Objects and IsA
- Android: Fixed an issue with certain JSONItem casts that could result in an unexpected exception
- Android: Fixed an issue when using a constant as the lib name in a declare
- Android: Fixed an issue when setting a constant to the value of another constant in certain circumstances
- Android: Fixed an issue when declaring a constant with a nil value
- Android: Fixed a compilation issue with certain events on mobilescreens that use paramarray
- Android: Fixed an issue with using CurrentMethodName inside certain computed properties
- Android: Fixed an issue with AddressOf and methods from Class properties on App
- Android: Fixed an issue when using CType to convert an Enum to an Integer
- Android: Fixed an issue when using CType to convert an Integer to a Boolean
- Android: Fixed an issue with declares that have certain parameters and expect a cstring return value
- Android: Fixed an issue when initializing certain variables of different types following a New and method call on the same line
- Android: Fixed an issue when initializing a Pair variable on the same line that initializes another variable of another type using a method
- Android: Fixed an incompatibility with using modal screens on Android 8 (APK 26)
- Android: Fixed an issue when using the Array function to initialize a variable on the same line as other types
- Android: Fixed an issue with conditional compilation that could cause odd issues between certain runs/builds
- Android: Fixed an issue when referencing certain controls on a screen during variable initialization
- Android: Fixed an issue when initializing certain variables with a dotted module/class reference
- Android: Fixed an issue when using multiple IsA in a single Case
- Android: Fixed an issue with certain class enumeration references
- Android: Fixed an issue with calling a conversion on certain framework properties like System.Version.BuildVersion
- Android: Fixed an issue with certain combinations of #ElseIf and #Else
- Android: Fixed an issue that sometimes occurred when returning an object with a nil value from a method
- Android: Fixed an issue with nested/multiple #Ifs in certain circumstances
- Android: Fixed an issue with #ElseIf and nested #Ifs
- Android: Fixed an issue with Not in combination with IsA in parenthesis
- Android: Fixed an issue when accessing a shared property on a MobileScreen via Self
- Android: Fixed an issue when accessing a computed shared property on a MobileScreen
- Android: Fixed an issue when using certain multi-parameter methods with Case
- Android: Fixed an issue with certain methods that have a multi-dimension array parameter
- Android: Fixed an issue where an error state between run/build with conditional compilation in the same session could persist
- Android: Fixed an issue with conditional compilation and TargetMobileSimulator
- Android: Fixed an issue when calling a method with an optional parameter before a required parameter could fail when passing only a required type
- Android: Fixed an issue when calling a method with an optional parameter before a required parameter could fail when passing nil
- Android: Don't allow non-default screens to be opened directly from outside the app
- Android: Fixed an issue with certain whitespace at the end of a line, and fixed an issue with evaluating a pair value as a boolean
- Android: Fixed an issue when using the inspector to set the value of an enumeration on a class
- Android: Fixed an issue when using Timer.CallLater with a method on a container
- Android: Fixed an issue when calling MemoryBlock.StringValue in certain circumstances
- Android: Fixed an issue when accessing an element of a protected shared array property
- Android: Fixed an issue when comparing an object to nil when that object is a variant
- Android: Fixed an issue with conditional compilation and constants
- Android: Fixed an issue when calling certain overloaded methods with different parameter sets
- Android: Fixed an issue with some uses of Try that use End (rather than End Try)
- Android: Fixed an issue with accessing/comparing certain MobileScreen inherited properties, and an issue with properties that have underscores in the name
- Android: Location app permission is now only added if MobileLocation is used on a layout. Camera app permission is now only added if MobileImagePicker is used on a layout. If those permissions is needed for other reasons they can be manually added using the Permissions field on the Android Build Settings advanced tab
- Android: When the bundle ID is changed, the app gets fully rebuilt on the next run
- Android: Fixed an issue when using two - in a row
- Android: Fixed an issue where certain classes within modules weren't being checked for invalid names
- Android: Fixed the error message when there are too many modules within other modules for the Android platform
- Android: Fixed an issue when using Optional in a Delegate
- Android: Fixed an issue when using Optional in an event definition
- Android: Fixed an issue when comparing certain types against an element of a variant array
- Android: MobileApplication version properties are now shown with introspection
- Android: Fixed an issue with testing a condition inside of parenthesis made up of certain framework shared methods
- Android: Fixed a compilation error with certain methods that have a multi-dimensional array as the return type
- Android: Fixed an issue when initializing a MobileScreen with a Constructor that has parameters
- Android: Fixed an issue that could cause Android compilation to fail on some Windows installations
- Android: Building an Android app now always clears any prior builds to ensure that a proper rebuild is done
- Android: Fixed an issue with AddHandler and certain controls on a container
- Android: Improved Android temporary build folder creation process
- Android: Fixed an issue where MobileScreen constructors weren't always called

Documentation:
Fixed:
- WebPicture.Height and Width are now correctly documented as methods rather than properties
- DesktopPopMenu now ha

Join our mailing list

Stay up to date with latest software releases, news, software discounts, deals and more.

Subscribe