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

Xojo for Mac

Join our mailing list

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

Download Xojo 2020 Release 1

  -  860.42 MB  -  Trial

What's new in this version:

Bug Fixes:
- Incorrect expressions in For Each statements now raise a compile error instead of a failed assertion
-Building 64-bit Windows apps in the Linux IDE no longer raises an assertion, but should now work
-Fixed a compile error that could occur when adding a SerialConnection to a window and implementing the LineStateChanged event
-Analyzing a project no longer slows down subsequent debug runs or builds
-Var can now be used in XojoScript class definitions when defining properties
-Casting Nil to an Object no longer crashes

Crashes & Assertions:
- Crash    Incorrect expressions used in For Each statements now raise an error instead of crashing for iOS builds.
- Failed Assertion Windows: Placard/UpDownArrows controls no longer raises a failed assertion if its width/height are 0 (or negative).
- Failed Assertion Passing an invalid floating point number (i.e. a value like NaN or Inf) to Graphics.DrawString, TextSize, or StringHeight no longer raises a failed assertion, or crashes/hang.
- IDE Unhandled Exception IDE no longer crashes if controls are sized too small or too large in the layout editor.
- IDE Unhandled Exception BuildDateTime now uses the same Timezone at Buildtime and Runtime.
- IDE Unhandled Exception Windows: Certain TimeZones could not be constructed by name (like Turks and Caicos), this is now fixed with the update to a newer version of ICU 65.1.
- IDE Unhandled Exception The IDE no longer crashes when dragging Library items to the debugger's Navigator.

Database Plugins:
- PostgreSQLDatabase: now correctly takes the database schema into account when updating records from a RowSet
- PostgreSQLDatabase no longer leaves orphaned prepared statements on the server
- MySQL    Checking DatabaseColumn.Value for Nil now works correctly when these originate from DatabaseRow
- PostgreSQL: Error messages when failing to connect are now correctly encoded as UTF8 strings
- PostgreSQL: Any errors that occurred before performing SelectSQL or ExecuteSQL calls are now cleared properly
- SQLite: SQLitePreparedStatement.ExecuteSQL now properly raises an exception on error
- Debugger CGFloat values now show up in the debugger

Framework All:
- Graphics.FontUnit now works for Console/Web apps
- Console Graphics: Fixed incorrect StringWidth and StringHeight calculations
- Console graphics: calling DrawText right after DrawPicture no longer incorrectly aliases the text
- Added IteratorException that is raised when an error or a change occurs in the data being iterated over
- Global Val is no longer shown as deprecated in docs. Global Titlecase is now shown as deprecated when you Analyze Project
- DatabaseColumn.Value now returns a Variant of the correct type instead of always returning a String, unless of course the value is actually String
- GenerateJSON on a Variant Array no longer only creates a JSON array of string values, unless of course the Variant Array only contains strings
- When DateTime.FromString is passed an empty Date string it now raises an InvalidArgumentException instead of crashing (on Windows)
- Fixed some incorrect Window.Types enum values, i.e. Window.Types.Floating should be 3 instead of 1
- Added AddAllRows function that takes a ParamArray for PopupMenu/ComboBox
- IsNumeric is now compatible with incoming Text values
- Trying to change the Modification/Creation DateTime of a FolderItem when that FolderItem is busy/open now properly throws an IOException
- String.ToDouble now takes into account the current localization when parsing the string
- Creating a new DateTime from a DateTime returned by DatabaseColumn.DateTimeValue no longer throws a NilObjectException
- SerialConnection.Connect now raises an IOException on error. If a Device is not assigned when connecting the error code returned is SerialDeviceNotAssigned
- Updated RGBSurface.Transform page to have correct parameter types
- Setting the HorizontalScrollPosition of a TextField no longer causes a StackOverflowException
- Assigning a Picture to a DatabaseRecord.PictureColumn or DatabaseField.PictureValue no longer crashes
- Assigning a Picture to DatabaseField.PictureValue no longer crashes
- Closing a MenuItem that was just clicked on no longer crashes. When this MenuItem is clicked on and then closed from an EnableMenuItems event an UnsupportedOperationException is raised
- Added Crypto.HashAlgorithms.SHA1 enum value (was incorrectly named Crypto.HashAlgorithms.SHA before)
- Point doc page updated to remove mention of operators
- PrinterSetup.Landscape property should not be deprecated and IsLandscape property should not have been available (and is now marked as deprecated)
- Added missing TabPanel.AddPanelAt and RemovePanelAt methods, deprecated Insert and Remove. Overloaded AddPanel for compatibility
- FolderItem.IsFolder no longer raises an IOException if the folder doesn't exist, it'll return False instead
- Color.CMY now matches output of deprecated CMY when an alpha is specified
- Added POP3SecureSocket.RemoveMessageAt() to replace DeleteMessage(). Deprecated incorrectly added RequestMessageAt()
- RectControl.RefreshRect() is deprecated with a Refresh() overload as its replacement
- Removed a few extraneous properties on TextField/TextArea that were not intended to be usable (i.e. IsBold, IsItalic, etc.
- FolderItem: getting/setting the CreationDate/CreationDateTime and ModificationDate/ModificationDateTime now correctly offsets any daylight savings time
- XojoScript: Mid String extension function no longer acts like MidB, but now correctly parses unicode points
- BevelButton, ImageWell, Placard, and PopupArrow’s MouseUp coordinates now correctly report negative values
- No longer crashes when assigning a Nil WString to a String
- Removed Timer.Tolerance property as it was not documented and did not do anything
- Analyze project can now report that StrComp is deprecated with a replacement of String.Compare
- Cleaned up POP3SecureSocket events by removing unused ServerReplied, LoginSucceeded, RollbackSucceeded
- Added SpecialFolder.Caches property
- Updated StyledText: deprecated AddStyleRunAt(Run as StyleRun,Index as Integer) in favor of; AddStyleRunAt(index as Integer, run as StyleRun)
- MenuItem: LastRowIndex is now a Property instead of a Method
- When iterating through a RowSet using For Each Loop, we now reset the RowSet to the beginning before iterating
- Ptr to String conversion no longer truncates the Ptr to a 32-bit value for 64-bit builds

Framework Desktop:    
- Window.Types.Sheet enum value has been corrected
-    HTMLViewer.NewWindow event now expects an HTMLViewer as return value instead of just a plain Object

Framework Linux:
- MouseDrag events now fire correctly when using a touchscreen
- Setting the BinaryStream.BytePosition now flushes the buffer. This fixes an occasional file I/O misread on certain platforms
- Changing the Label TextColor no longer leaks memory
- A raised RuntimeException no longer causes a segmentation fault on Raspberry Pi (mainly an issue on Jessie & Stretch)
- Linux IDE: now uses the preferred control heights (of the OS/theme) when new controls are added to the layout editor
- Updating the font properties on a Control (like FontSize on a Label) no longer leaks memory
- 64-bit and ARM Linux apps now correctly display their app icons in the desktop task/launch bar instead of being blank/generic looking

Framework macOS:
- Tooltips on controls embedded in a parent container and added within a TabPanel or PagePanel now shows correctly when switching between tabs/pages
- Listbox: Header height now dynamically adjusts to fit various font sizes. This was already the case on Windows/Linux
- SerialDevice.WithName now returns a proper device that SerialConnection can connect to
- FolderItem: optimized child by index APIs to match performance before the switch to using the newer NSURL APIs
- Mac IDE: Loading internal plugins from a unicode path now works again
- FolderItem memory is now cleaned up immediately after FolderItem.Parent or FolderItem.Name is called instead of being released after the main loop iteration runs
- GraphicsPath drawing no longer incorrectly offset on HiDPI Retina displays
- Getting the FolderItem.ModificationDate (or ModificationDateTime) now immediately releases memory instead of waiting on the next event loop to do so
- DrawInto no longer crashes when drawing to a clipped Graphics
- Graphics: setting the FontUnit to Pixels, Inches or Millimeters now works correctly when drawing text on HiDPI displays
- Our macOS framework no longer relies on the non-public API getsectiondata

- New project windows no longer show as all black when they first open on macOS
- Auto Complete: The word Selector now autocompletes when typing it in a declare
- Auto Complete: Autocomplete now matches "Allow" prefix instead of "Allows"
- Auto Complete: Added "Is" to autocomplete prefix list
- Code Editor: When using super-return to expand an inline if, the keywords for then, else, end if now match the case of the initial if (or all use standardize format if the "use standardize format" at end of line preference is enabled).
- Code Editor: The code editor no longer jumps back to the last edited line if you scroll and then click & drag to make a new selection and have code reformatting turned on.
- Code Editor: The code editor no longer suggests Super.Destructor when adding a Destructor method to the subclass of a class which also has a Destructor. This change was made because the framework calls both class and subclass Destructors automatically and calling it in user code actually causes it to fire twice.
- Debugger: Viewing Text types that contain a lot of content no longer hangs the IDE
- Debugger:    Hex viewer no longer appears blurry at HiDPI
- Debugger:    DatabaseRow contents can now be viewed in the debugger
- Debugger:    Debugging objects, whose classes include Hidden attributes, no longer crashes
- Debugger:    Numeric conversions, i.e. FromBinary, FromHex, FromOctal, FromString and ToString no longer raise Xojo.Core exceptions. While these were being re-raised as InvalidArgumentExceptions, in the debugger you would still see both.
- FileIO: Images attached to ImageSets that have to be relocated when a project opens now save the location change properly in text projects.
- FileIO: Checkbox inconsistency between the VisualState as seen in the IDE vs. Runtime is fixed
- FileIO: IDE now tries to load plist files as soon as they are dropped on the IDE so it can give feedback about files that are inaccessible or malformed in some way
- Icon Editor: Fixed a bug where the IDE unexpectedly stalled when dragging a PDF file on the Icon Editor on macOS
- Icon Editor: Labels on the icon editor are now the right color on macOS light and dark mode
- Inspector    Method Edit Panel is now a little more intelligent about what methods are available to be overridden and the initially generated code
- Inspector    Overriding a method in a subclass now uses the capitalization from the super's class method name
- Inspector    Newly added Plugin controls now displays the Tooltip property in the Inspector instead of the deprecated HelpTag property
- Inspector    TextArea: Multiline property now shows up in Inspector
- Inspector    SegmentedButton: Tooltip and Tabstop property now appear in the Inspector
- Language Reference: Linux IDE: local Language Reference links now work correctly instead of doing nothing.
- Language Reference: Search field on the Language Reference on macOS 10.14 and above now switches correctly between light and dark mode when the window isn't visible during the transition.
- Layout Editor    WebPopupMenu now renders properly in the layout editor on HiDPI screens
- Layout Editor    WebTextArea resizes live in the layout editor again
- Layout Editor    Linux IDE: Window Backdrop image is now properly drawn in the Layout Editor
- Layout Editor    Adding a Right layout constraint for iOSSegmentedControl no longer hangs the IDE
- Miscellaneous    Mac and iOS projects containing an invalid plist file will now show a warning in the Resolve Issues dialog when the project is first opened
- Miscellaneous    Removed the ability to export classes that are already external
- Miscellaneous    Added back the Help->QuickStart->Getting Started menu item
- Miscellaneous    Cleanup from previous debug-runs is now a little faster
- Miscellaneous    IDE now properly cleans up any plugin related resources that may have remained in the temporary folder
- Navigator    When cancelling a Navigator Filter, always force it to refresh
- Navigator    A Database project item is now usable for 64-bit builds instead of throwing NilObjectExceptions when accessed
- Navigator    IDE no longer crashes if you try to undo the addition of a Module while the navigator has the Classes group name selected
- Navigator    Navigator scrolling speed has been optimized
- Preferences    Changed "Menu short cuts" in Preferences window to "Menu shortcuts"
- Rendering    In event handlers, the CurrentMethodName constant no longer replaces underscores (“_”) in control names with periods (“.”)
- UI IDE no longer shows a warning about building 32-bit apps in an iOS project on macOS 10.15+
- Installer    Debian installer now correctly looks for libwebkit2gtk dependencies
- Miscellaneous    RoundRectangle: OvalWidth and OvalHeight property values are now correctly converted to their new replacement properties (i.e. CornerWidth and CornerHeight)
- Plugin SDK Linux & macOS IDE can now load 64-bit shared library plugins that are found directly in the Plugins folder (i.e. without a packaged hierarchy)
- Plugin SDK Updated EyeControl makefiles to be more current and appropriate for 64-bit builds
- Plugin SDK REALUnregisterBackgroundTask now properly cleans up memory instead of leaking ~16 bytes worth

Database Plugins:
- SQLite    Updated SQLite plugin to 3.30.1

Framework All:
- Added new Crypto.HMAC function that takes Crypto.HashAlgorithms instead of the deprecated Crypto.Algorithm
- Deprecated DrawPolygon, use DrawPath instead. Deprecated FillPolygon, use FillPath instead
- HTMLViewer: changed our injected sendtoxojo Javascript function to sendToXojo to match Javascript naming convention.
- Listbox: the sort widget is now drawn as part of the HeaderContentPaint event instead of HeaderBackgroundPaint. i.e. returning true from HeaderBackgroundPaint no longer suppresses the sort widget from drawing.
- Usage: me.icon = WebPicture.BootstrapIcon("bar chart")

- Code Editor    Change Code Reformat script optimization from Low to High
- FileTypes Editor:    FileType editor icon editor now renders disabled when the control is not enabled so it's more obvious that you can't add an icon
- Graphics:    The DefaultButton control now has white text instead of black when displayed in the Library and Navigator
- Miscellaneous    Duplicate method dialog for plugins is now more specific about where the problem occurred
- Miscellaneous    Added a button to close the Getting Started window
- Miscellaneous    Removed unused 256x256 and 128x128 icons from default web projects
- Plugins: macOS IDE now loads the native 64-bit plugin targets before attempting any other variations
- XojoScript    XojoScript: added ability to save compiled XojoScript object
- Added XojoScript.Compile(optimizationLevel As OptimizationLevels) As MemoryBlock
- Overloaded XojoScript.Run(cachedObject As MemoryBlock = Nil)

New Items:
- Removed 32-bit macOS parts from the framework. Only 64-bit macOS apps can be built
- MachO executables are now padded with an additional 2048 bytes of header space for 3rd party apps to poke into

Framework All:
- Support for creating PDF documents on macOS, Windows, Linux ( Desktop), Web and Console
- Updated Graphics.DrawPicture to use clearer parameter names so that they are more useful in the Syntax Help area and match what is in the Language Reference.
- Listbox: added two new header paint events
- HeaderBackgroundPaint(g As Graphics, column As Integer) As Boolean HeaderContentPaint(g As Graphics, column As Integer) As Boolean These new events are triggered whenever the header requires repainting. Returning True means override our drawing, False otherwise. For the end cap (the column above the scrollbar if any), only the HeaderBackgroundPaint event will be triggered.
- HTMLViewer now has the JavaScriptRequest event which is called by a special JavaScript function called executeInXojo() or executeInXojoSync() which accepts any number of numeric and string parameters. You have to use the WebKit renderer for this to work on Windows.
- SerialConnection: Added new Parities enumeration values Space and Mark.
- Windows/Linux: Updated frameworks to use latest version of ICU 65.1, this mainly affects DateTime, TimeZone and Locale.
- Added String.Characters iterator. Just like Text.Characters this iterator will iterate through all the Characters (including grapheme clusters) and not individual codepoints.
- Widened Web EmailAddressField.
- Extended Double and Single with IsNaN and IsInf functions. Use IsNaN to determine if a floating point calculation yields NaN (Not-A-Number), and IsInf to determine if a floating point calculation yields an infinity value (either positive or negative).
- Added the following convenience methods to PopupMenu: SelectRowWithValue(targetValue As String), SelectRowWithTag(targetValue As Variant)
- Added Color.ToString and FromString methods to match equivalent API 2.0 methods on other datatypes.
- The new available methods: AddAllRows(items() As String), and AddAllRows(ParamArray item As String), will add the received values at the end of the ListBox, or at the end of the first column for multi-column ListBoxes.
- Updated HTMLViewer for improved JavaScript communication: ExecuteJavaScript (executes JavaScript asynchronously) - ExecuteJavaScriptSync (new, executes JavaScript synchronously, returns Variant) - executeInXojo (new, called from JavaScript to trigger JavaScriptRequest event asynchronously) - executeInXojoSync (new, called from JavaScript to trigger JavaScriptRequest event synchronously, returns String) - New event JavaScriptRequest(method As String, parameters() As Variant) As String
-    Added new UnicodeMode property to TextArea, this allows Codepoint or Character selection modes: Added UnicodeModes enum (0-Native, 1-Characters, 2-Codepoints) with the default being Native which is Codepoints on Windows/macOS and Characters on Linux - On Linux only Native/Characters is supported, an UnsupportedOperationException is thrown otherwise - This new property can be found in the Advanced tab in the Inspector - Updated StyledText to also support Characters UnicodeMode when associated with a TextArea
-    Fixed text size and truncation when printing reports on PDF Document

Framework macOS:
- Updated HTMLViewer on macOS to use WKWebView
- Updated the look of Listbox headers to match macOS behavior

- Layout Editor: The basic button control in the Library now has the same name and default caption across all platforms
- Layout Editor: All controls now use the same base Bootstrap theme.
- Layout Editor: New TextAreas added to the layout now defaults to Characters for the UnicodeMode property.
- Navigator    Added a new “Import” entry for the Module contextual menu, so it can import several Classes, Modules, Interfaces… at once.
- Scripting    Build Target architectures can now be set in and IDE script using the PropertyValue method. the property names are: "App.MacArchitecture", "App.WindowsArchitecture" and "App.LinuxArchitecture". The values may be set to "x32", "x64", "ARM32" or "ARM64" depending on the specified target. If the target does not support the new value, the value is not changed.
- Style Editor WebStyles can now accept any CSS value
- Xojo Cloud: Xojo Cloud apps now each have their own domains
- Miscellaneous    Modernized Spotlight importer on macOS for Xojo project files
- Plugin SDK: Added additional Plugins SDK function to Add/Remove event handlers and a function to determine if an event is being handled, see PluginMain.cpp in the Plugins SDK for more details
- Reporting: Now it is possible to print Reports to PDFDocument instances
- XojoScript: Updated XojoScript to support API 2.0 feature set

Join our mailing list

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