Announcement Release Notes Download Announcement in Forum
The new release brings a few well needed bug fixes, a few new items and a few nice goodies for us. First the IDE itself is built for Apple Silicon, so you can enjoy native speed on the new Macs from Apple. On the way to this goal, the XojoScript plugin got updated for Apple Silicon and helpers are now built with Apple Silicon support. Xojo Inc. got their own LLVM based compiler to output code for Apple Silicon, update the linker and also the just-in-time compiler in XojoScript. Kudos to Xojo Inc. as they are one of the first to fully support the new CPUs.
A big change is the rewrite of JSONItem class. Under the hood they now use a C++ library alle yajl internally. This makes the JSON processing a lot faster in Xojo, but has a bit different behavior. Some of the subtile changes may cause trouble, so please try with your projects and see the improvements. Testers found and reported a few possible issues and Xojo Inc. already fixed them. There should be a big upside on performance with a little downside of smaller behavior changes. Web 2 benefits greatly from this change and gets a performance boost internally. Speaking of Web 2, the WebLocation control is back. Hurray!
If you do iOS, you may be happy to see that Apple no longer complains about some bundle identifiers used for the plugins. Now you can submit your Xojo app to the App Store once again including various plugins. Plugins enabled for iOS include the XML, SSL Socket, SQLiteDatabase, RegEx, Encodings and Crypto ones within Xojo itself.
The new UserAuthentication class looks interesting to do authentication via face or finger print on supported devices. But as far as I see it uses the same API as we do for our LAContextMBS class, which works for macOS and iOS.
The Web 2 framework got a lot of attention with new controls, a lot of bug fixes and small improvements. We still have to wait for something like a style editor and a way to get old projects migrated preserving the custom styles for individual controls. And we still have a couple of leaks in the web framework, but looks like they are not yet found and fixed. For the time being you may enjoy an improved WebFileUploader performance and the JSON speed-up.
MBS Plugin 20.5 and newer should work fine. Older versions may run into issues. Please check release notes for our plugin to learn what we changed over time. For iOS development with our plugins, please use version 21.1. Remember that our current 21.1 plugins support Xojo from version 2006r4 to 2021r1.
Nevertheless, this is a solid release and we used it for a few things the last weeks and had no issues with our projects. Please try it and report feedback to Xojo soon. What have you noticed?
We have a new video with a quick demonstration of a new example project for our MBS Xojo ChartDirector Plugin.
RabbitMQ itself is an open-source project implementing a message-broker software. It's a server software to do message queues and then there are various clients available to use the services.
We got a couple of classes for you:
We built the plugin for all platforms we support, which includes macOS, iOS, Windows and Linux for both 32/64 and Intel/ARM targets. We include OpenSSL library, so you can use with and without SSL options. As usually the plugin handles memory and error management and hides a couple of low level stuff, especially all the value serialization with arrays, tables and variants.
Coming soon for 20.2 pre-release for you to test. Let us know if you have questions.
But first what is DynaPDF?
The DynaPDF library is a full featured PDF library for C developers and we provide you a Xojo integration as a plugin. With DynaPDF you get functionalities to create, edit, merge, analyze or sign PDF files within your Xojo application. With DynaPDF you can e.g. write an invoice for your customer in which you integrate a barcode with payment information and attach the always same terms and conditions to the PDF document. This invoice can also be converted to PDF/A for archiving purposes.
While your users can open a PDF and do some operations in Acrobat Reader (or the full Acrobat product), our plugin allows you to do things automatically in your code. You write the code to use the plugin to apply changes to many PDFs. Like process a folder of 100 invoices, extract text from each and look for vendor names in them to tag them automatically. Or use regular expressions to find the bank account and amounts.
If you want to use the MBS Xojo DynaPDF Plugin, you need a suitable license of DynaPDF and the MBS Xojo DynaPDF Plugin. You can of course just test the plugin without a license and try all functions before you order. There are four different license levels available for DynaPDF. Which license you need depends strongly on which methods you plan to use. For example, if you only want to insert links in a new PDF document, a starter license is sufficient. If you also want to add a page to an existing PDF document, you need a Lite license for the import feature. If you want to read images from existing PDF files or import single PDF pages from another PDF document, you need a Professional license. Same applies for rendering pages for display or printing. With the additional PDF/A converter license, you get the possibility to convert already existing documents from PDF to PDF/A. All MBS DynaPDF licenses can be used for Xojo, FileMaker, C/C++, C#, Delphi, Lazarus, PHP, VB, VBA, and VB .Net with the appropriate DynaPDF versions. (more)
Over the years we got requests for alternative database plugin classes for use with Xojo (formerly REALbasic). In 2009 a client requested a native plugin for Microsoft SQL Server, so we started writing a SQL Plugin and got a deal with SQLAPI to use this C++ library as the base of the plugin. Over the years, we contributed lots of changes and bug fixes and helped funding adding CubeSQL and SQL Anywhere support to SQLAPI.
As of today, we support CubeSQL, Centura SQLBase, DB2, Firebird, Informix, InterBase, MariaDB, Microsoft Access, Microsoft SQL Server, MySQL, ODBC, Oracle Database Server, PostgreSQL, SQL Anywhere, SQLite, SQLCipher and Sybase. Well received features include using named parameters for prepared statements, full unicode support, threaded connect & execution, bulk row transfer, streaming blob values, and offering database specific options for advanced features. And recently we got even edit/update support for RecordSet and newer RowSet classes. Yes RowSet is supported!
You can use our plugin with one of two interfaces and even mix them. SQLConnectionMBS is our native interface for using all the nice features. This includes SQLCommandMBS class for doing both statement preparation and handling the result set. With SQLDatabaseMBS class, we have a database subclass, which makes transition easier for existing Xojo developers and use PreparedStatement interface and RecordSet class.
If you like to try the plugin, please check the website. Watch SQL Plugin presentation and read Xojo Developer Magazine article in issue 14.1.
- Converting Xojo project to use MBS SQL Plugin
- RowSet in MBS Xojo SQL Plugin
- Connect to Oracle via MBS Xojo SQL Plugin
- Connect to Microsoft SQL Server with MBS Xojo SQL Plugin
- Accessing Microsoft SQL Database from Mac/Linux
- Edit and Update for SQLDatabaseMBS class
Always great to have all the articles from one year of the Xojo Developer Magazine in one book, where you can just browse through when you have some time in your hammock.
We'll give away a few over the year at various Xojo meetings, once they start to take place again.
If you like to get one yourself, you can order them in the XDevMag book store.
When you consider ordering them, better pick several years and let them ship together at a package price. There are also academic and subscriber discounts available.
Upper and Lower
To map between lower and upper case, you can use those function and they should work perfectly for all unicode characters. But there are some language differences and so you may want to pass the locale specification with the function call.
lower('I') returns 'i'
lower('I', 'en_us') returns 'i'
lower('I', 'tr_tr') returns 'ı' (small dotless i)
If the second argument is omitted, NULL or empty text, you get the general case mapping for all languages.
This shows ÄÖÜSS as output. (more)
Later I was curious whether Xojo's compiler takes the self really just like a scoping indicator or really does some more. A little test project built and then inspected with lldb shows me what is happening:
In the method, the rax is a register containing the reference to the object, named self. That is non nil always in a method as one of the pre-conditions of using methods. If self would be nil, there would be no way to find the right method since all methods in Xojo are virtual ones and go through a dispatch table.
Sample code is like this:
Where a is a property of the class. The disassembler shows, that Xojo compiler does well and just moves the value into the right spot:
a = 1
Now use self.a = 2 and we get this:
0x100133ef0 <+128>: movq $0x1, -0xe8(%rax)
In code the compiler asks the CPU to compare the value in the rax register (containing self) to zero. If that is equal, it jumps to another code block, which raises a NilObjectException! (more)
0x100133f06 <+150>: cmpq $0x0, %rax
0x100133f0a <+154>: je 0x100133f62 ; <+242>
0x100133f0c <+156>: movq -0x8(%rbp), %rax
0x100133f10 <+160>: movq %rax, %rcx
0x100133f13 <+163>: addq $-0xe8, %rcx
0x100133f1a <+170>: movq %rcx, -0x18(%rbp)
0x100133f1e <+174>: movq $0x2, -0xe8(%rax)
0x100133f29 <+185>: movq -0x38(%rbp), %rax
BiggerNumber and BigNumber
With BigNumber you can already process very large numbers with a high accuracy, but for some applications it can be important to have an even higher accuracy and therefore we have now BiggerNumber too. Objects of the BiggerNumberMBS class can have a floating point number with 2560 bits. They have a precision up to 617 digits behind the decimal point. Compared to a normal double value we have 5 times as many bits available. If BiggerNumberMBS is so accurate, why would you need BigNumberMBS class at all?
The answer is, if the speed of your applications is more important to you than the accuracy, use BigNumber, but if you need high accuracy, use BiggerNumber. If you use large integer numbers, use LargeNumberMBS. This class provides integer numbers up to 1200 digits long. With the innovation of BiggerNumberMBS also some mathematical formulas are added, like the calculation of cosines, sinus and tangent. There are over 30 new methods available for BiggerNumberMBS and BigNumberMBS classes.
This conference was cancelled due to new rules for quarantine when entering the United Kingdom.
It will be held
Check out the conference highlights video if you want to see what it's like - or ask one of the many attendees from the forum!
Wether you are full or part time Xojo developer, this is your chance to learn all about the Web 2.0 framework, the Android progress and what's new in the Xojo world.
To get there, please use public transportation. The piccadilly line brings you right from Heathrow Airport to Russell Square Station, just next to the hotel. That trip should cost about 3 £ and you may just pay by tap in/out with your NFC enabled credit card or phone. Otherwise buy an Oyster card and load money on it if you don't have such a card. If you come by Eurostar train through the tunnel from France, you can exit Pancras station and just walk to the hotel. Otherwise take one station via subway to Russell Square Station. That station is right behind the hotel block.
See you soon there!
Let us show you a few of the new example projects included with the 21.1 version of our Xojo Plugins:
|MBS Xojo Plugins 21.1
Watch on Youtube
Some links for the video:
00:30 NSDataDetectorMBS class
03:50 NSCollectionViewControlMBS shown
07:40 Leak Finder example project
13:00 BigNumberMBS and BiggerNumberMBS classes
16:00 iOSPictureMBS module
21:10 NSNetServiceMBS class
Please do not hesitate to contact us if you have questions.
For macOS and iOS we have new functions for data detectors. That is the feature Apple provides for applications like Safari or Mail to identify data within the text. With our NSDataDetectorMBS class you can detect phone numbers, email addresses, URLs, postal addresses and dates in Xojo. On that way we implemented NSRegularExpressionMBS class to do regular expressions using Apple's frameworks.
You may know our BigNumberMBS class, a 320bit floating point number. For scientific math we were asked for a something bigger, so we created BiggerNumberMBS class. The new class provides a 2560bit floating point number with a 512 bit exponent and a 2014 mantissa. This provides about 600 digits of precision. For both classes we added 30 new trigonometry functions.
To use high level APIs for macOS and iOS applications we got NSNetServiceMBS and NSNetServiceBrowserMBS classes. You can publish a service and find other services, e.g. have your iOS app find the companion macOS app.
Recently we found DuckDB, an open source database engine similar to SQLite, but with column based data storage (instead of row based like SQLite). Depending on what you do with the database, this implementation may be much faster since it is optimized to quickly walk over values in a column. Check out DuckDatabaseMBS class in Xojo to use both in-memory or file based databases.
We upgraded our PDFKit classes to have over 200 additional methods and properties to work with annotations. We added PDFAppearanceCharacteristicsMBS class to specify more options for appearance streams.
For Windows we got HTMLText or PlainText methods for WebView2ControlMBS control. The WindowsShellExecuteAsAdminMBS function may help to run an executable with admin privileges.
We improved the DeclareCallBackMBS class to work on Windows and Linux for callbacks received in a thread. The plugin routes them to main thread and calls your delegate there. We improved DirectShow plugin and added DirectShowAMVideoControlMBS class. The DirectShowCaptureGraphBuilderMBS class now got a FindPin function and GetStreamConfig can accept an GUID to identify the category for a pin.
For our SQL Plugin, we implemented Edit/Update for SQLDatabaseMBS class. We added ErrorMessage property for iOS. To embrace RowSet we added more methods related to it: SQLSelectAsRowSetMT and SQLSelectAsRowSet for SQLConnectionMBS class and BuildRowSetMBS global function.
To help debugging memory leaks we got a new MemoryStatisticsMBS class and the Leak Finder example project. With AllObjectsOfClassMBS function you can quickly find all objects of a class.
We upgraded NSCollectionViewControlMBS control to work better and improved the example. Please try the control to get a grid control in your solution to show various container based controls.
For iOS we got a new iOSPictureMBS module with helper functions specific for iOS. You can export an image or video to the camera roll and get an event when the export finshed from the plugin.
We added more properties to JSONMBS class, added SetLogEventMask to GMImageMBS class to enable logging in GraphicsMagick, a new ReadFromPkcs7 function for X509MBS class and an extra version number line to CURL debug output. Use the NormInvMBS function to calculate NormInv like in Excel. The new IncludeDataInDebugMessages property for FMConnectionMBS class helps debugging your requests. And enjoy high resolution drag images on macOS with InstallDragImageMBS function.
Finally we updated CURL library to version 7.75.0, DukTape to 2.6, DynaPDF to 220.127.116.11 including ZUGFeRD 2.1.1, dyncall to 1.2, LCMS to 2.12, LibXL to 3.9.4, LibXML to 2.9.10, LibXSLT to 1.1.34, openssl to 1.1.1i, Rockey4ND, SQLAPI to 5.1.4b5 and Xcode to version 12.4.
See release notes for a complete list of changes.
We got it new in 21.0 and improved it for 21.1 version, so please try it in the next days with the upcoming plugin version.
You can have a resizable grid of containers controls for macOS here. Great as it allows you to use it with a thousand items and containers are created on the fly when you scroll or resize the control. Since we use ContainerControl in Xojo, you can put whatever control you like on them. The example uses an ImageWell with a Label.
The layout is controlled by the NSCollectionViewLayoutMBS class. You can configure it with NSCollectionViewFlowLayoutMBS, the items will nicely flow within the available area. That allows you to set the spacing between items, item size and section sizes.
Please do not hesitate to contact us with questions.
- Fixed a problem with a crash in CURL with SFTP with empty password or username.
- Added BiggerNumberMBS to have 2560 bit floating point number for even bigger range and precision. 512 bit exponent and 2048 bit fraction.
Or ask us to be added to our shared Dropbox folder.
- Added iOSPictureMBS module with methods and delegates to export video or image to camera roll.
- Deprecated SetLicenseKey function for DynaPDFMBS class. Please use SetLicenseKeyGlobal instead.
- Fixed an issue with OpenDialogMBS class not returning folderitems properly for alias files.
- Updated DynaPDF to version 18.104.22.168.
- Enabled math functions for internal SQLite library for next SQLite version. (see InternalSQLiteLibraryMBS module)
- Added isObject, isArray, isNumber, and isBoolean to JSONMBS class.
Or ask us to be added to our shared Dropbox folder.
We have eight classes for you:
- XLBookMBS is the base class for a document.
- XLSheetMBS describes the individual sheets in an Excel document.
- XLFormatMBS defines the formatting of a cell, which may include a font definition.
- XLFontMBS defines a font specification. That may be as simple as bold or a color.
- XLFilterColumnMBS defines filter options for a column.
- XLAutoFilterMBS provides the properties for auto filter options.
- XLCopyOptionsMBS are used for our copy functions to define what to copy.
- XLRichStringMBS allows access in detail on styled text.
We don't just provide you functions to use rich text with XLRichStringMBS class. We got further and allow you to convert the rich text in Excel into the styled text as Xojo uses it. StyledText function on the class will convert the content to StyledText and return it, so you can directly assign it to a TextArea control. With the AddStyledText method you can add text from a TextArea control into a new XLRichStringMBS object.
For your convenience the XLSheetMBS class has a method WriteStyledText, where you can directly pass StyledText from TextArea control to assign styled text to a cell. Our ReadStyledText function will read a cell containing rich text and translate to StyledText object for Xojo. (more)
Deja Vu by Marc Zeedar
Are you getting tired of API and technology transitions? Does it seem like you're always having to redo perfectly good code because of an OS update?
Getting Started with DynaPDF by Stefanie Juchmes
If you need more PDF power than you can get with Xojo's built-in PDF classes, you should check out Monkeybread's DynaPDF plugin. Stefanie will show you how!
Shake It! by Markus Winter
You know how when you enter an incorrect password on the Mac the dialog will shake to show you it's wrong? Markus has figured out how to do that with pure Xojo.
Maps Part 9 -- Putting GPS Data on the Map by Markus Winter
This time Markus helps a reader by showing how to plot GPS coordinates on a map.
Application Instance by Christian Schmitz
Did you know you can tag an application download with a unique identifier? It's a little tricky, but Christian shows you exactly how to do it.
Plus: Creating a web service with Xojo, picture fills, scrolling pictures, and much more!
- Added HTMLText or PlainText methods to WebView2ControlMBS class.
- Added IsNull function to JSONMBS class.
- Added IncludeDataInDebugMessages for FMConnectionMBS class.
- Improved DeclareCallBackMBS class to handle asynchronously dispatch on Windows and Linux.
- Added SetLogEventMask and IsLoggingEnabled shared methods to GMImageMBS class.
- Fixed an issue with LZ4MBS decompression failing.
- Fixed problem with DynaPDFMBS where an empty password was not passed as nil in OpenImportFile.
- Updated SQLAPI to version 5.1.4b5.
- Updated DynaPDF to version 22.214.171.124.
- Added ResolutionUnit constants to JPEGExporterMBS class.
- Fixed issue for iOS where Transporter complains about __INFO_PLIST segment in plugin library.
Or ask us to be added to our shared Dropbox folder.