Google Admob Update

For the next version of MBS Xojo Plugins we include an update for Google Admob to the version 10.14 of the SDK. With the update, we get new classes to show a consent form to ask user whether he likes to get tracked for advertisement. To quote Google's documentation:

Under the Google EU User Consent Policy, you must make certain disclosures to your users in the European Economic Area (EEA) along with the UK and obtain their consent to use cookies or other local storage, where legally required, and to use personal data (such as AdID) to serve ads. This policy reflects the requirements of the EU ePrivacy Directive and the General Data Protection Regulation (GDPR). To support publishers in meeting their duties under this policy, Google offers the User Messaging Platform (UMP) SDK. The UMP SDK has been updated to support the latest IAB standards. All of these configurations can now conveniently be handled in Interactive Media Ads privacy & messaging.

MBS Xojo Plugins, version 23.6pr5

New in this prerelease of the 23.6 plugins:
  • Updated to Xcode 15.1.
  • Fixed issue with RowSet iterator to not skip first row.
  • Fixed an issue with MoveFirst in our SQL cursor.
  • Updated Visual Studio to version 2022.
  • Disabled old tesseract 3 for Windows ARM 64-bit as that doesn't compile currently.
  • Updated Google AdMob SDK to version 10.14. You may need to adjust your project.
  • Removed tagForUnderAgeOfConsent and tagForChildDirectedTreatment methods in GADRequestConfigurationMBS class.
  • Added tagForUnderAgeOfConsent and tagForChildDirectedTreatment properties for GADRequestConfigurationMBS class.
  • Added new classes for consent dialog: UMPRequestParametersMBS, UMPDebugSettingsMBS, UMPConsentInformationMBS and UMPConsentFormMBS.
  • Added new loadWithAdUnitID method to GADAppOpenAdMBS class.
  • Added automatic rerun of SQL SELECT if you call MoveFirst on a RowSet/RecordSet, which doesn't support moving because it is not cached or scrollable.
  • Added checks for SQL Plugin in multiple places to avoid crashes if SQL command text is empty.
Download: or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.6pr5

New in this prerelease of version 13.6 of the MBS FileMaker Plugin: Download at

Four months until MBS Xojo Developer Conference

Just four months left until we start our MBS Xojo Developer Conference in Andernach, Germany. We already got a couple speaker proposals and already over 25 registrations from nine different countries: 🇩🇪, 🇳🇱, 🇬🇧, 🇺🇸, 🇫🇷, 🇪🇸, 🇨🇭, 🇵🇱 and 🇨🇦.

In January we start to fill in sessions for the conference. Already listed are the sessions with Xojo staff: Geoff Perlman, CEO of Xojo Inc. will join us to talk about what is new in the Xojo world for 2024. Ricardo Cruz and Javier Menendez from Xojo Inc. will join us to present about mobile and web development.

The Geyser tour is booked and anyone who likes to join the tour on Saturday is welcome to let me know. We encourage you to not leave Friday evening, but maybe Saturday afternoon.

The Skybar at Einstein Hotel.


MBS Plugin Advent Calendar

Have you seen all the entries for this year's advent calendar?

24 articles to highlight various MBS Plugin features:

  1. Barcodes
  2. Vision
  3. BinaryFile
  4. Speech
  5. WindowsOCR
  6. MongoDB
  7. Paths
  8. CoreLocation
  9. IBAN
  10. Phidgets
  11. WindowsLocation
  12. Files
  13. XL
  14. Progress Dialog
  15. DynaPDF
  16. GraphicsMagick
  17. Dialog
  18. Preview
  19. RegEx
  20. MapView
  21. SendMail
  22. ListDialog
  23. MailParser
  24. Goodies

You can download the example file here: Advent2023.fmp12.


iCloud Sync Tips

If you use iCloud drive for document synchronization, you may run into various issues. The big problem is that Apple doesn't really provide control or information on what is happening. It should all work seamless, but it often doesn't.

For Apple, I can recommend to test it not just with a few documents, but with e.g. a million documents in Documents folder and then change 5000 of them on a day.


Merry Christmas

Frohe Weihnachten und ein gutes neues Jahr!

Merry Christmas & Happy New Year

Joyeux Noël et Bonne Année

Buon Natale e Felice Anno Nuovo

Franziska, Sebastian, Michael, Monika & Christian Schmitz

MBS Plugin Advent calendar: 24 - Goodies

Door 24 - Goodies

Fact of the day
Did you know that we have over 2000 functions in the plugin that you can use without a license?

Today we come to the last door of our Advent calendar. I would like to introduce you to some of the free developer functions. MBS has been providing free functions for a number of years to make life easier for you as a developer. Unfortunately, most of these functions only work on the Mac. This is not because we wouldn't like to make the features available to Windows users, but because we don't have the access to Windows, so we can only offer most things on Mac. This year, we were able to make one function available to Windows users. So if you have installed the plugin on Windows and the function is activated, there is an input field with which you can search in the relationship graph.

If you want to use the functions, you need to download and install the MBS FileMaker Plugin and the functions you want to use have to be activated. To do this, you have a checkbox in the Windows preferences dialog that you need to check.


MBS Plugin Advent calendar: 23 - MailParser

Door 23 - MailParser

Fact of the day
With the MBS FileMaker Plugin you can not only analyze or send mails. You can also retrieve mails directly from your email account via CURL using an IMAP connection.

Our advent calendar is slowly coming to an end and so we have already reached door 23. In door 21 we saw how to send emails with inline graphics. Today we would like to look at how we can find out what is in an email if we only have the mail file. For this we have the component EmailParser.

The mail file can either be in a container, as a file on the hard disk or we have the source code of an email. In all cases, we can read the data from the mail with the MBS FileMaker Plugin. For each case we have a separate function that loads the mail into the working memory and returns the reference with which we can work. If we have a sourecode of the email we use the function EmailParser.Parse to parse the email. Do we have the mail as a file on the disk then we use the function EmailParser.ParseFile. In our example, we place the email file in a container. To parse this mail we use the function EmailParser.ParseContainer

Set Variable [ $Mail ; Value: MBS( "EmailParser.ParseContainer"; DoortTwentyThree::Mail ) ] 

MBS Plugin Advent calendar: 22 - ListDialog

Door 22 - ListDialog

Fact of the day
Over the last few days we have become familiar with some dialogs that you can display with MBS. One that we were unable to present this Advent due to time constraints is the FileDialog. With this you can create a dialog to select a file.

Sometimes you want to be able to display a dialog from which the user can select one or more options. The ListDialog component allows you to do this. I will introduce this component to you in this door.

The ListDialog is again another dialog that is accessible across the entire solution. This means that I can set settings for this dialog in various scripts and these are then applied to the dialog. So we have to reset the settings of the dialog first if we want to create a new and fresh dialog. For this we have the function ListDialog.Reset.

Set Variable [ $r ; Value: MBS( "ListDialog.Reset" ) ] 

Now we can make settings for the dialog: First, we want a text to be displayed in the dialog. We set this with the ListDialog.SetPrompt function. We set the title for the dialog with ListDialog.SetWindowTitle.


MBS Xojo Plugins, version 23.6pr4

New in this prerelease of the 23.6 plugins:
  • Updated DynaPDF to version
  • Updated Chromium classes for Xojo 2023r4.
  • Added checks for SQLDatabaseMBS class to raise an exception if you try to close, SQLExecute or SQLSelect while a background thread runs a SQL query.
  • Added more render functions to WindowsPDFPageMBS for synchronous and asynchronous modes.
Download: or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS Plugin Advent calendar: 21 - SendMail

Door 21 - SendMail

Fact of the day
The first e-mail as we know it today was sent by Ray Tomlinson in 1971.

Did you know that you can also use the MBS FileMaker Plugin to create mails according to your wishes and send them to one or more people? I will show you how this works in today's door.

First of all, we create all the fields we need in our project. Today we want to add a graphic header and footer to our email. We put the image files for each of these in a container. Then we need a field for the subject and a field for the recipient. In this example we only send the mail to one recipient, but I will explain how you can send the mail to other recipients. We also need a field for the mail text. We also want to send an attachment with the mail. We also need a container for this. In addition, we can now also create fields containing our data for the email layout. The layout can then look like this, for example:


Search scripts in FileMaker for Windows

As you may know, we have search functions for FileMaker, built into our MBS FileMaker Plugin for a few years and they work great on macOS. But clients using Windows asked for a similar thing.

We got some search functions for Windows to show you today: With our new Search Script example file you can use a hotkey to start the search. Once you press the hotkey, we copy the script steps and put them into our search window so you can perform a search there.


MBS FileMaker Plugin, version 13.6pr4

New in this prerelease of version 13.5 of the MBS FileMaker Plugin:
  • Added a Search Scripts example file to allow you searching your Script Workspace on Windows (and macOS) with the F8 hotkey.
  • Updated DynaPDF to version
  • Changed DynaPDF.FontInfo to return numbers for FontBBox as list of values with numbers.
  • Added QuickList.Release function as new name for QuickList.Free. Old name stays valid.
  • Fixed an edge case with auto complete of variables causing an exception.
  • Improved commment links with script: scheme to use script IDs in addition to names.
  • Added links to syntax coloring goodies from help pages.
  • Fixed a problem with Get function links and non breaking space.
Download at, in DropBox folder or ask for being added to the DropBox shared folder.

MBS Plugin Advent calendar: 20 - MapView

Door 20 - MapView

Fact of the day
The advantage of Apple Mapview is that you do not have a total quota of calls that are assigned to your app, but these calls apply per device and are therefore almost impossible to reach.

Did you know that you can use the map material from Apple Mapview on your Mac and iOS devices in FileMaker? I'll show you how it works in this door.

Show map with options

First of all, we want to display a map that we can then work with. Two functions are available to us for this purpose. One is MapView.CreateWithSize with which we can create the map in a window by specifying the position and size. We would like to use the second option MapView.CreateWithControl, because here we position the map with the help of a control. The control can be a rectangle, for example. We then give this control a name so that we can also address it. In our case Map. Then we call the function. First we specify the window reference. If the window is in the foreground, it is sufficient to enter a 0. Then the name of the control follows. If necessary, we can then specify an offset with X and Y. This is oriented to the top left corner of the control and causes the map to be shifted.

Set Variable [ $$MapView ; Value: MBS("MapView.CreateWithControl"; 0; "Map")

Control interactive containers in FileMaker

Interactive containers in FileMaker are a great way to play videos in the FileMaker user interface. Whether you actually run a movie database or you use them for animations, they are implemented using web viewers. That means we can use our WebView.Evaluate function here from MBS FileMaker Plugin.

We got a little database file to try various calculations directly in FileMaker on macOS and Windows:


MBS Plugin Advent calendar: 19 - RegEx

Door 19 - RegEx

Fact of the day
Regular expressions originally come from mathematics. In 1951, the mathematician Stephen Kleene wrote events similar to today's RegEx.

You want to search for mail addresses in a text and extract only these addresses from the text. Or do you want to replace all Internet addresses in a text with a new Internet address of your own? In this case, regular expressions are a good solution for this task. What regular expressions are and how you can use them in FileMaker I will show you in this Door.

What are regular expressions?

With regular expressions you can search for certain patterns in a text or check a string if it meets certain criteria, e.g. if the chosen password contains upper and lower case letters, at least one number, one special character and is at least 8 characters long. If we search for something in a text search then we actually always search for a regular expression. For example, if we enter the word "Miss", then we search for a pattern in the text that searches for the letters M-i-s-s that stand behind each other. We find the word Miss but also the word Mississippi and if we tell the program that we don't care about upper and lower case letters we also find the word missed. So we are looking for a pattern where the 4 letters appear exactly in this order. This is already a regular expression. But now we can build it even further. E.g. for a mail address that the local part is separated from the domain with an @ sign. After the Domain is the Domaintail separated by a dot. but also are valid mailaddresses. We now want to develop a regular expression that finds both mail addresses in one text. So we have to formulate how the pattern looks like. The local part can be composed of upper and lower case letters, numbers and the characters .!#$%&'*+-/=?^_`{|}~ the string has no fixed length. Let's see how to define something like this. If we specify a range from which a character can be taken, we write the characters in square brackets. In this example, all characters that are an a, b or c would be found.


Parallel network transfers with MBS Plugin

You may know how to download a file with either our CURL functions or Insert From URL in FileMaker. But have you ever tried to download multiple files in parallel?


Let us show you three variants. First using FileMaker's Insert from URL, then CURL sequential and finally CURL parallel. The FileMaker one may quite common, but you can speed up your processing with parallel requests and run a lot of them at the same time. Let's say you have a job to download 4 files together and you like to do it faster. This can of course also be changed to do multiple uploads and of course you could use index variables and loops to code it for a variable number of requests.


Xojo Web signal handling

For a Xojo web project, the framework registers signal handlers to catch various signals from the OS. This seems to include at least KILL and INT signals, which are used to force quit an application or interrupt it. In both cases Xojo framework quits the application.

Let's check the event order:

App.Stopping: False
App.Stopping: False

Looks confusing?
Yes, it is. So the app launches and we log the call to Opening event. Then the web app runs and waits for work. Then the signal happens and a signal handler is invoked. We made a stack trace by raising an exception and got this:


MBS Plugin Advent calendar: 18 - Preview

Door 18 - Preview

Fact of the day
Did you know that you can also embed an XML file in PDF documents? This is also done with the ZUGFeRD format, for example. With the help of DynaPDF and the plugin, you can create and read such files yourself

Did you know that MBS offers a PDF preview for Windows and Mac, with which you can view the document and even copy content with the mouse?

We have included this control in our plugins since version 13.3 of this year. You can use this function on Windows 10 and MacOS. You can easily test whether your system fulfills the requirements with the Preview.Available function.

If [ MBS( "Preview.Available" ) ] 

If this fits, you can create the preview control. We have two options for this. First, we can create a PDF control with a fixed size and a specific position. To do this, we use the Preview.Create function. We first enter the window reference in the parameters. If it is the window that is furthest forward, enter a 0 or find out the reference with Window.FindByTitle or Window.FindByIndex. Then comes the position, which we specify with x and y for the top left corner. Finally, enter the width and height of the control.

Set Variable [ $$Preview ; Value: MBS( "Preview.Create"; 0; 177; 64 ; 320; 420 ) ] 

MBS Plugin Advent calendar: 17 - Dialog

Door 17 - Dialogs

Fact of the day
Did you know that you can also influence FileMaker's own dialogs a little?
Take a look at the DialogModifications component in the plugin.

The dialog box for displaying information to the user is essential and can be found in almost every application. But sometimes you want more design options for the dialog box and this is where the plugin comes into play, because with this you can build your dialog box according to your wishes. I will show you how this works in this door.

Such a dialog is valid for the entire application, which means that you can make the settings for a dialog in one script and call the dialog in another script. However, this also means that we have to get rid of old settings at the beginning. To do this, we use the Dialog.Reset function, which resets all dialog settings to their original state.

Set Variable [ $r ; Value: MBS( "Dialog.Reset" ) ]

MBS Plugin Advent calendar: 16 - GraphicsMagick

Door 16 - GraphicsMagick

Fact of the day
MBS already had an advent calendar for last year. So take a trip back in time to last year and enjoy the articles

Did you know that with FileMaker and the component GraphicsMagick you can change a lot in your images?

Last year we had an advent calendar that only dealt with GraphicsMagick. You are welcome to have a look here as well. To be able to work with an image, the image must be loaded from a file or a container. The appropriate function then gives us a reference number with which we can continue working.

Set Variable [ $Image ; Value: 
	MBS("GMImage.NewFromContainer"; DoorSixTeen::Container) ]

First of all, you can easily query the height and width of an image in a container using the functions GMImage.GetWidth and GMImage.GetHeight.


MBS @ FMTraining.TV - 20 Free FileMaker MBS Functions to Change Your Development

Check out the website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.

A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.

We check out the first 20 free goodies in MBS FileMaker Plugin around syntax coloring.


Upcoming changes for 2024 in MBS Plugins

For 2024, we plan to change a few things and we let you know here:

Claris Product line goes away
The use of MBS Plugin in Claris Pro/Server has been deprecated in September and will be removed for 14.x releases. We concentrate on FileMaker Pro/Server in the future. Customers still using the Claris product line should let us know.

Number of releases
Currently we do a release every two months. There may be the chance to optimize this and maybe do just 5 instead of 6 releases a year. For example the release in July always gets less feedback as clients are going to vacation. If we don't need to have something new to show for a summer conference, we may skip this. And the September release is often a smaller update because our team is regularly on vacation in August. (more)

MBS Plugin Advent calendar: 15 - DynaPDF

Door 15 - DynaPDF

Fact of the day
The groundwork for today's PDF documents was laid back in 1991 with the Camelot project. The aim was to develop a file format that can capture data from all programs, this document can be shared and displayed in the same way on any end device so that it can also be printed

Today I would like to introduce you to an area that is very appreciated by our customers. We are talking about DynaPDF. With our DynaPDF functions you can work with your PDF documents. You can create PDF documents according to your wishes, write in these documents, sign them, create forms and much much more. In order to be able to work with DynaPDF without a watermark being permanently superimposed on your PDF pages, you need the correct additional DynaPDF license. Which license you need depends on what you want to do with DynaPDF. If you are only working create a PDF from scratch, for example, then all you need is a Starter license. If you want to load an existing PDF file, you need a Lite license. If you also want to optimize or render your PDF file, you need a Professional license. This table can help you decide which licenses you need.

Today in the example I would like to show you how to merge two PDF files and then add page numbers to them. As with LibXL, we first have to initialize DynaPDF and specify a library to work with. From the examples, you can use the InitDynaPDF script in your database and place the appropriate library file in the same folder as your database, or you can use the DynaPDF.Initialize function and enter the path to the appropriate library and your license key in the parameters. If you do not have a license key yet, because you want to test DynaPDF, then leave the license key blank. If you want to test whether your solution works with a specific license, then write the license name in the place of the license key. If you are using Windows, you must use the dll files. There are two dll files, one is for use on 32 bit systems and the other on 64 bit systems. On Mac you need the file with the extension .dylib. For use on a Linux server you need the file.


Benchmarking improvements in Xojo 2023r4

A few weeks ago, I had a blog post about Performance improvements in Xojo. Now that Xojo 2023r4 version is available, we got a few benchmarks to verify if things are faster.

Stack Overflow Check

Let's test the improved stack overflow check. The test application basically performs a few loops to run about one million function calls. Each function call performs a stack check, so doing a million stack checks takes some time. Our test shows this improvement for StackOverflowChecking:

SecondsWhereXojo Version
57.876DebuggerXojo 2022r4
31.566Built AppXojo 2022r4
19.456DebuggerXojo 2023r4
0.620Built AppXojo 2023r4

MBS Plugin Advent calendar: 14 - Progress Dialog

Door 14 - Progress Dialog

Fact of the day
And speaking of waiting, did you know that in Gary, Indiana, the law says you can't go to the movies or theater until four hours after eating garlic?

Do you know this? You have to go through many records and it takes and takes and takes time? Some users then become frustrated and start hammering on the keyboard or pressing all kinds of buttons because they don't know that there are already processes running in the background that simply need its time.

With the MBS Progress dialog, you can display a dialog to your users so that there is no confusion or panic. To do this, you have the functions from the ProgressDialog component.

Before we can display the progress dialog, we first have to make a few settings for the dialog. The special thing about the dialog is that you can set the content in a script and then call it up at a later time in the different layouts in our solution. For this reason, we must first reset the dialog to its initial state to remove legacy content before we make new settings. To do this, we use the ProgressDialog.Reset function. Now we can give the dialog box a title. We use ProgressDialog.SetTitle for this. In the dialog you can also enter a text above the progress bar and one below. We use the ProgressDialog.SetTopText and ProgressDialog.SetBottomText functions for this. We can also select a font and size for these two texts. We set these values in the ProgressDialog.SetFont function. To make the dialog look nicer, we can also display an icon in the dialog to make it easier to understand. In our case, this is the monkey with the Christmas hat. We set this image, which is in a container, with the ProgressDialog.SetImage. If you use a PNG with transparent background, you don't get the white border around.

Set Variable [ $r ; Value: MBS("ProgressDialog.SetTitle"; DoorFourTeen::Title) ]
Set Variable [ $r ; Value: MBS("ProgressDialog.SetFont"; "Comic Sans MS"  ; 14  ) ]
Set Variable [ $r ; Value: MBS("ProgressDialog.SetTopText"; DoorFourTeen::Text) ]
Set Variable [ $r ; Value: MBS("ProgressDialog.SetBottomText"; "Wait...") ]
Set Variable [ $r ; Value: MBS("ProgressDialog.SetImage"; DoorFourTeen::Container) ]

MBS Xojo Plugins, version 23.6pr3

New in this prerelease of the 23.6 plugins:
  • Improvements for Xojo 2023r4.
  • Fixed problem in LargeNumberMBS class when parsing too long string. We now raise an exception.
  • Improved JavaScriptEngineMBS class to handle arrays of Int32, Int64, Double, Single, Boolean, Color, String and Currency for conversion from Variant to JavaScript.
  • Improved handling of arrays for our JSON to HTML conversion for JSONMBS class.
  • Updated SQLAPI to version 5.3.
  • Added PairAsyncCompleted and UnpairAsyncCompleted events for WindowsBluetoothLEDeviceMBS class to catch the events from WindowsDeviceInformationPairingMBS easier.
Download: or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.6pr3

New in this prerelease of version 13.5 of the MBS FileMaker Plugin: Download at, in DropBox folder or ask for being added to the DropBox shared folder.

Xojo Delegate Change

There has been a problem in our plugins and in Xojo when handling target flags for delegates for some time. The bug was found and is already fixed for the Xojo 2023r4 and our plugins. You may need to use newer plugins 23.6prX (or later 24.x) for the newer Xojo to build some of your projects in some cases.

On our part, we didn't set the flags correctly for a lot of delegates in our plugin. Sorry for the inconvenience this may cause. This seems to affect the following plugins:
  • CURL
  • iOS
  • Mac64bit
  • MacBase
  • MacCF
  • MacFrameworks
  • Picture
The problems are corrected with all builds from 22nd November or later as well as Xojo version after build 61716. (more)

MBS Plugin Advent calendar: 13 - XL

Door 13 - LibXL

Fact of the day
XL Did you know that there is even an Excel World Championship in which 8 Excel experts compete against each other to win the prize money of $10,000?

Welcome to door 13 of our advent calendar. Today it's all about the LibXL component. Did you know that you can use the MBS FileMaker Plugin to read, create and modify Excel files without having Excel installed?

This is made possible by the LibXL component. LibXL is an independent product that can be used in FileMaker with the plugin. This means that you need an additional LibXL license in addition to your plugin license to be able to use the functions properly. Today I will show you how you can read and modify data with LibXL and even create your own files.


But before we start our work, we first need to make the LibXL library available so that we can use the functions in the plugin. The library file you need can be found in the examples supplied with the plugin download. Exactly which file you need depends on your operating system. If you want to initialize the library on a Mac, then you need the library file with the extension dylib. If you use Windows, we have a file for the old Windows computers that work with 32 bit and a file with the extension dll for the 64 bit systems. If you want to use LibXL on a Linux server, we have included with the Linux plugins.


Xojo 2023r4 released

The new release was just posted by Xojo Inc. As usual we have a few new items and a lot of bug fixes.

Release Notes - Download - Order license

There is a new Xojo version available and I expect everyone will quickly jump onto it: The reason is performance.

The improved code for StackOverflow checking will speed up all your applications, especially for macOS. Beside that you see improvements for thread switching, main thread checks and other places. The IDE itself and the web framework benefit heavily from the changes, so things may feel snappier. In an upcoming blog post, I'll show some numbers, but until that please try the new version and check the details in my blog post here: Performance improvements in Xojo.

You will need newer MBS Xojo Plugins, e.g. 23.6 beta or later 24.0 release: Download here. Due to change in delegate handling, we had to adjust our plugins. Most developers may not notice, but if you build a console, web or worker project, then you may get a compilation error with our older plugins. See also Xojo Delegate Change. What we enjoy is the improved cache handling for the plugins. Xojo loads the plugins faster and avoids issues with cache not being up to date. If you use RowSet with our MBS Xojo SQL Plugin, please use the newer plugin version with the fix related to the RowSet class.


MBS Plugin Advent calendar: 12 - Files

Door 12 - Files

Fact of the day
Did you know that the first hard disk in 1956 only had a storage capacity of 3.75 megabytes? Today, many of the pictures we take with a high-resolution digital camera are already larger than that.

Today we come to a topic that I already mentioned in a previous door: Today we come to the Files section. This is all about your files. In Door 3, we already got to know the Files.FileExists function, which can tell us whether a file is stored behind a certain path. However, this function is not only available for files but also for folders. With Files.DirectoryExists you can check whether a path specified in the parameters leads you to a folder. If a file is hidden behind the path, the result is 0 and if it is a folder, the result is 1. If we want to know whether a folder or a file is hidden behind this path, we use the Files.ItemExists function, which returns a 1 for a file and a folder.

File Folder
Files.FileExists 1 0
Files.DirectoryExists 0 1
Files.ItemExists 1 1

Three weeks till year's end

The year 2023 will end in less than three weeks. Do you need some more licenses?
  • You can order licenses for 2024 or later and have invoice, delivery and payment done in 2023.
    This way you secure the current pricing and the possibility to keep upgradeability for older licenses.
  • And of course you can order updates for several years in advance for all your MBS products.
    Multi Year Updates can provide a discount or extra months.
  • As all our Xojo and DynaPDF plugin licenses are per developer, you should check if you got a new developer in your team this year and adjust licenses to match team size.
  • For MBS FileMaker Plugin please check if you have enough license for the number of seats or servers you have in use.
    If you upgrade to unlimited seats or servers, the plugin won't need to check the usage counts.
  • For LibXL you can check if you like to upgrade from individual developer licenses to the Enterprise level. We can assist and may apply a special upgrade price.
Especially if you run on a budget and you want to spend some money in the old year, you can buy updates for several years in advance.
If you need help to decide what Xojo, FileMaker or plugin license you need, we may be able to assist you.

JSON Search Example

Let's create a more complex example for JSON.Search function in MBS FileMaker Plugin by combining various JMESPath features. Consider the following JSON data representing a list of students and their courses:


Use Perform Script on Server inside Data API script

We recently had a client with a problem exporting data in a server side script. Since server scripts run blindly and we can't debug them, we check FileMaker's logs, enable script error logging and add calls for MBS("Trace") and MBS("Log"; ...) calls to log data to the log file from our MBS FileMaker Plugin.

We quickly noticed that the Export Records script step failed with error 3, which is command unavailable. After that I quickly looked though FileMaker's documentation and identified functions with limited Data API support:


MBS Plugin Advent calendar: 11 - WindowsLocation

Door 11 - WindowsLocation

Fact of the day
Did you know that one of the reasons why the Greenwich meridian became established was because the area on the other side, i.e. the International Date Line, was sparsely settled? This had the advantage that you rarely had to add a whole day when you were traveling. This avoided confusion.

In Door 8 we have already seen how we can determine a location from a Mac or an iOS device. With the WindowsLocation component, we also have a way to determine the location for Windows.

First we have to initialize the location functions for Windows with the function WindowsLocation.Initialize. Once this has worked, we ask Windows for permission to query the location. To do this, we use the WindowsLocation.RequestPermissions function. Now we can get the following statuses with WindowsLocation.Status.

  • Not supported
  • Error
  • Access Denied
  • Initializing
  • Running
If we have Running, we can query the location with WindowsLocation.Location. We then receive a JSON with our data that can look like this, for example:
    "Latitude":    50.4833,
    "Longitude":    7.4655,
    "Altitude":    0,
    "ErrorRadius":    6713,
    "AltitudeError":    0,
    "SensorID":    "{00000000-0000-0000-0000-000000000000}",
    "Timestamp":    "06.12.2023 12:38:40,532"

We can then read this information from the JSON using JSON functions. For example, here we see the script step with which we read the latitude:

Set Variable [ $JSON ; Value: MBS( "WindowsLocation.Location" ) ] 
Set Variable [ $lat ; Value: JSONGetElement ( $JSON ; "Latitude") ] 
Set Field [ DoorEleven::Latitude ; $lat ] 

MBS Plugin Advent calendar: 10 - Phidgets

Door 10 - Phidgets

Fact of the day
Did you know that Phidgets are used in schools to get students interested in computer science?

Do you already know the small input/output devices from Phidgets Inc. Phidgets are small additional devices that you can connect to your computer and with which you can then input or output data. For example you can connect a small motor, a temperature sensor, a humidity sensor, a gyroscope or a small LED display and exchange data with these devices.

In this example, I would like to introduce you to three different Phidgets and how we can read data from these Phidgets in FileMaker. Our three phidgets are a light sensor, a temperature sensor and a slider. In our example, the phidgets are all connected together to a hub. This hub has various outputs to which the individual Phidgets can be connected. This hub is then connected to the computer with a USB cable. All Phidgets also draw their power via this USB cable. It is also possible to purchase a wireless HUB. In this case, a separate power supply is required.

I would now like to show you how to retrieve the Phidget data via FileMaker. First of all, we need to load the Phidget libary. To be able to load the libary, we first have to download it. You can find the appropriate download here.


MBS @ FMTraining.TV - FileMaker Monkeybread Plug-in Q&A

Check out the website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.

A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.

We looked on a few new things in development for the next version. In the Q&A session we got interesting questions:


Xojo Meeting in Austin

I am coming to Austin in early February and I may organize a casual get-together with Xojo developers.

Something like a meet-up for dinner in a restaurant to talk about Xojo in North Austin.

I made a survey with doodle to find a date: Survey to find a date

We previously had meetings as well as a Xojo conference in previous years. See also forum post.

MBS Plugin Advent calendar: 9 - IBAN

Door 9 - IBAN

Fact of the day
Saint Lucia has the longest IBAN with 32 characters. This country is not a member of the SEPA area. Within the SEPA area, Malta has the longest IBAN with 31 characters.

Today I would like to introduce you to a component that currently only contains 7 functions, but can be very useful to you if required. We are talking about the IBAN component. The IBAN number is an international number that can be clearly assigned to a specific account. It is intended to contribute to the standardization of global payment transactions. Mainly the EU countries have already implemented this standard, but countries outside of Europe are also adopting this standard.


MBS Plugin Advent calendar: 8 - Determine your own position

Door 8 - Determine your own position (for Mac users)

Fact of the day
A man from Munich parked his car in a parking lot in 2015 and was unable to find it again. The car was reported stolen in the meantime. After around 6 months, he was informed by the parking garage company that his car was still in the parking lot. This man should have remembered his location ;-)

Today I would like to show you how you can determine your own position as a Mac or iOS SDK user. The CoreLocation component is available for this purpose.

If you want to use this option in your apps, we need authorization. We can request various authorizations. The Always authorization requests permission to use location services whenever the app is running. The next weaker authorization is the when in use authorization. It Requests permission to use location services while the app is in the foreground. There is also the temporary full accuracy authorization. This access will expire automatically, but it won't expire while the user is still engaged with your app. In our example, we use the Always authorization. If the authorization fails, please check the settings in Security. You can check whether the authorization was successful using the CoreLocation.authorizationStatus function. It displays the current authorization status. The following responses are possible.


MBS @ FMTraining.TV - FileMaker Monkeybread Plug-in Update 13.5

Check out the website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.

A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.

We talk about the new MBS FileMaker Plugin 13.5 release: Announcement, release notes, new functions and download


MBS Plugin Advent calendar: 7 - Paths

Door 7 - Paths

Fact of the day
Did you know that you can easily copy the path of a file under Mac if you press the option key in the menu of the right mouse button at the same time? The menu will then show the entry as pathname

Today it's all about how you can build paths in FileMaker with the help of the MBS FileMaker Plugin. We already got a little insight into this topic in the third door, where we created a path to a file on the desktop. The MBS FileMaker Plugin offers you some of these paths to special folders in your system. For example, you can use the Folders.UserDesktop function to determine the path to a user's desktop. Or you can determine the path to the temporary folder with Folders.UserTemporary. In this picture you can see the functions that are available for special folders.


MBS Xojo Plugins, version 23.6pr2

New in this prerelease of the 23.6 plugins: Download:
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.6pr2

New in this prerelease of version 13.5 of the MBS FileMaker Plugin: Download at or ask for being added to the DropBox shared folder.

Two months until Claris Engage 2024

Just two months left until Claris Engage 2024, 6th to 8th February 2024 in Austin, Texas.

The Claris Engage conference will take place one day in the Apple Campus (6900 West Parmer Lane) for training and keynote. After the keynote, we'll meet each other at a party with food and drinks. Plenty of time to welcome old friends and talk about the keynote content. The other two days are on a different Apple Campus (5505 Parmer Lane). All the sessions will be there with lunches and refreshment breaks.

I hope to meet a lot of users of MBS FileMaker Plugin there, answer questions and have a great time!

Reducing the number of plugin parts for Xojo

For our next pre-release, we did a big change. We reduced the number of plugin parts from about 500 to now about 400. About a 20% reduction. This saves us some build times. We build each plugin part for 13 targets and thus building 5200 dylib/dll/so files is better than build 6500 ones.

How did we do this?

Well, we merged over 100 plugins parts together internally. For example if you build a Windows app using our Windows USB classes, we had several plugin parts. But it is quite likely you would refercence all the parts for Windows USB if you would write such an application. Since these three plugin parts had common code, merging them reduced the size of the total code. Often merging three parts makes the resulting plugin part smaller than 2 of them.

Old size of all 52 plugins was 879 MB and now is 832 MB, a 47 MB saving. You may check if your application become bigger or smaller as your milage may vary. Due to the reduced number of plugin libraries to load, the IDE needs about 20% less time to start.

Please let us know if you find issues with your projects. Everything should just work fine like before.

MBS Plugin Advent calendar: 6 - MongoDB

Door 6 - MongoDB

Fact of the day
MongoDB is the backend of Claris Studio, unfortunately you cannot use the advantages of MongoDB directly with Claris Studio, but MBS makes it possible.

Welcome to December 6th. Today is St. Nicholas Day and we also want to take part in filling the Christmas boot with our calendar. Today it contains MongoDB. The special thing about MongoDB is that it is not a relational database based on tables and relationships, but its data has a JSON-like structure. This allows you to perform queries that were previously not possible due to the restriction of relationships or table limits.

In a MongoDB database we can have several collections. These collections can in turn contain several documents. The documents can be compared with data records, with the difference that different documents in a collection do not have to share the same structure. For example, you can have data in one and the same collection that describes the data for an employee and for a warehouse item. So you can easily find out who is in your company longer: the carpet in the warehouse or your trainee.


Functions in JSON Query

Let us show you the built-in functions in JSON Query and how to use them in FileMaker with MBS FileMaker Plugin.



Returns the absolute value of a number.


Run abs() on a value in an array:


MBS( "JSON.Query"; "[-3]"; "abs($[0])")






Or find all values with an absolute value > 3, so we remove small values from the array:


MBS( "JSON.Query"; "[-3, 5, -6, 1]"; "$[?abs(@)> 3]")






Static Variables in Xojo

In Xojo variable declaration somewhere inside a piece of code, you can use the static keyword. Whether you are in an event handler, a menu handler, a method or a global function doesn't matter. Just swap your "var" or "dim" with a "static" and you get a global variable. Instead of allocating memory for the variable on the stack and thus loosing the value on the end of the current code block, the static variable will remember the value. You can easily use it as counter for how often a method is called or for a global dictionary to cache results.

Here is a sample for a method which counts how often it gets invoked:

Sub testCounter() Static counter As Integer counter = counter + 1 System.DebugLog CurrentMethodName+" called already "+counter.ToString+" times." End Sub

MBS Plugin Advent calendar: 5 - WindowsOCR

Door 5 - WindowsOCR

Fact of the day
If you want to program a cross-platform solution or need text recognition for older Windows versions, you can use functions of the Tesseract component from the MBS FileMaker Plugin.

In Door 2 we already introduced you to a way of performing text recognition under Mac. But this possibility is not only available for Mac in the MBS FileMaker Plugin, but the MBS FileMaker Plugin also makes it possible to use Windows' own OCR functions. These WindowsOCR functions are available under Windows 10 and 11.

You can test whether you can use the functions under an operating system by running the WindowsOCR.Available function. If you can use the functions, first create a new OCR engine with WindowsOCR.New. This function returns a reference number which you can use in other functions to address the OCR engine. In this function, you can also optionally specify which language is to be recognized by the engine. If you skip this parameter, the language, that you get back with the WindowsOCR.CurrentInputMethodLanguageTag function, is automatically used for language recognition. Which languages can be recognized depends on which languages are installed on your system. You can obtain a list of the languages that you can currently use in your system with WindowsOCR.AvailableRecognizerLanguages.


MBS Plugin Advent calendar: 4 - Speech

Door 4 - Speech

Fact of the day
A voice output can not only make reading easier, but also creates freedom for people with physical disabilities.

In this door, you have the opportunity to ensure that your solution never has to be at a loss for words again. Today we are teaching your application to speak, because MBS offers speech output for Windows, Mac and iOS with the Component Speech.

If we want to output a text, we can use the Speech.Speak function. We first pass the text to be read out in the parameters. That's enough for now. Optionally, we can also choose from various speakers. You can find out which speakers are available with the Speech.AvailableVoices function. This function provides you with a list of all speakers. You can specify in this function whether you want the speaker names or the ID for the speaker to be displayed in this list.

If you want to use a specific speaker in the Speech.Speak function, you need to enter the ID. In the Speech.Speak function, you can also set whether or not your script should be continued while the speech output is running. Stopping a script also makes sense if you call the Speech.Speak function in the script several times so that the text that follows is also read out and is not lost because another text is being read out. You can also set the volume and playback rate in the function. The volume is between 0.0 (silent) and 1.0 (full). The playback speed ranges between 0.0 (silent) and 2.0 (double speed). The default value for both settings is 1.0.


MBS Plugin Advent calendar: 3 - BinaryFile

Door 3 - Binary File

Fact of the day
You may also be interested in the Text component. Because you can also create a text file with this component.

Behind door 3 is a component that is mostly unseen, but is used in many applications by customers and has become essential. It is the BinaryFile component. You can use it to read binary data from a file and also write it to a file.

But what is it actually good for? Although the texts are saved as binary data, you can also create normal text files with this component and read them out again later. For example, you can create a log file yourself in which you can write information. We would like to do this now by logging in the file when a certain script has been called and what result it has. The aim is to have as less code as possible in the script that we want to log so that the script doesn't become confusing. For this reason, we use the Perform Script script step and call a script that writes the desired text to the log file. We pass the text that we want to write to the log file as a parameter. In this way, for example, the results that were calculated in the script can also be written to the file.


MBS Plugin Advent calendar: 2 - Vision

Door 2 - Vision

Fact of the day
The MBS FileMaker Plugin not only offers you the Apple Vision as a framework, using MapKit you can also integrate Apple maps into your application or take pictures with your iPhone via Continuty Camera and store them directly in FileMaker.

The second door provides something for Mac users. Apple provides a framework called Vision. With this framework you can recognize barcodes, recognize texts from images or classify images into categories with the help of machine learning, e.g. so that you can search for them in your image database. This framework makes MBS usable with the plugin for FileMaker.

Barcode recognition

Let's first look at the possibility of recognizing multiple barcodes on an image. You simply pass the image to the Vision.DetectBarcode function as a parameter and Vision then searches for the barcodes on the image and returns a JSON in which the barcodes are listed. If you only want to search for QR codes on the image, for example, you can restrict the barcode types in the search by specifying the desired types as parameters. You can find out which barcode types can be recognized with Vision on your computer using the Vision.SupportedSymbologies function.

Result from Vision.DetectBarcode

MBS Xojo Plugins, version 23.6pr1

New in this prerelease of the 23.6 plugins:
  • Updated DynaPDF to version
  • Updated SQLAPI to version 5.3.
  • Added FullyQualifiedFieldName property to DynaPDFFieldExMBS class.
  • Added karFormData and kaffNonPDFA_4e constants to DynaPDFMBS class.
  • Added Hidden attribute to JSONIteratorMBS, XMLIterateAttributeNodesMBS, XMLIterateChildNodesMBS, XMLIterateElementsMBS, DynaPDFIteratorMBS and PCRE2IteratorMBS classes to hide it from auto complete. Since you use it via for each loops indirectly, you never need to use these classes directly.
  • Changed CallDelegateOnMainThreadMBS delegates to be hidden for auto complete.
  • Fixed GetDelegateParametersMBS, GetDelegateTargetMBS and GetDelegateWeakMBS functions to work better in newer Xojo versions.
  • Fixed an endless loop in JSONMBS class when running Search function with a bad query. Now propergates the exception properly.
  • Fixed JSON, DynaPDF and plugin to compile again with Xojo 2019r1.
  • Added SortArrayMBS methods to sort with/without a delegate and ascending or descending.
  • Updated openssl library to version 3.1.4.
  • Optimized text handling to be faster, which affects various string functions like ContainsWholeWordMBS.
  • Added CopyArrayMBS methods to copy array data to second array of same type.
  • Added target flags to our delegates to make sure they are available on the right targets.
  • Updated to LCMS 2.16fc1.
  • Improved array access for the plugins.
  • Added checks for fillSeries and fillDateSeries in CDRanSeriesMBS class to better handle if arrays are nil.
  • Improved array conversion from Xojo array to JSONMBS array.
  • Fixed crash in NSIndexPathMBS when passing nil array to Constructor or indexPathWithIndexes method.
  • Improved NSSearchFieldControlMBS to scroll horizontally.
  • Added DynaPDFParserMBS class.
  • Fixed some flags for delegates to work better in the future.
  • Added cmsV2Unicode function to LCMS2ProfileMBS class.
  • Added Scrollable property to NSSearchFieldMBS class.
  • Added more properties to CURLEmailMBS class for debugger.
  • Updated SQLite to version 3.44.1.
  • Added ApplyMergePatch, ApplyPatch, MergePatchFromDiff, PatchFromDiff to JSONMBS class.
  • Fixed string parser in LargeNumberMBS to not break on a minus sign sometimes.
  • Added BigNumberConversionMBS class.
  • Added new GetStringValue and SetStringValue methods to BigNumberMBS class.
  • Added new GetStringValue and SetStringValue methods to LargeNumberMBS class with more options.
  • Fixed OpenMTInputFile method in CURLSMBS class to remove InputData first.
  • Fixed SetupAWS and SetupOAuth in CURLSMBS class to reset NoBody flag if new transfer is not head.
  • Implemented EOF and BOF for SQL Plugin for RowSets to make for-each loops work better, but AutoCache may need to be enabled if the database doesn't allow MoveFirst like SQLite.
  • Added isBOF and isEOF to SQLCommandMBS class.
  • Improved WindowsDeviceInformationPairingMBS class to keep reference to the device object.
  • Fixed a possible crash in SQLConnectionMBS destructor.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.6pr1

New in this prerelease of version 13.5 of the MBS FileMaker Plugin: Download at or ask for being added to the DropBox shared folder.

MBS Plugin Advent calendar: 1 - Barcodes

Door 1 - Barcodes

Fact of the day
Did you know that you can generate over 80 different barcode types with MBS?

Welcome to the first door of our advent calendar. In this advent calendar I will introduce you to various components of the MBS FileMaker Plugin and show you how to use them. Today it's all about barcodes. Did you know that you can create over 80 different barcode types with the MBS FileMaker Plugin? How this works I will show you today in a project in which we create a WIFI QR code. If your guests get bored over the Christmas period, they can simply scan this QR code with their smartphone to gain access to your WiFi.

First of all, let's consider the question of how such a WiFi QR code is actually structured. The information you need for the QR code is the SSID, In other words the network name, the access password, the type of WiFi encryption and the visibility. For this test, let's imagine we have a WLAN with the following data:



Jul 2024
Jun 2024
May 2024
Apr 2024
Mar 2024
Feb 2024
Jan 2024
Dec 2023
Nov 2023
Oct 2023
Sep 2023
Aug 2023
Jul 2023
Jun 2023
May 2023
Apr 2023
Mar 2023
Feb 2023
Jan 2023
Dec 2022
Nov 2022
Oct 2022
Sep 2022
Aug 2022
Jul 2022
Jun 2022
May 2022
Apr 2022
Mar 2022
Feb 2022
Jan 2022
Dec 2021
Nov 2021
Oct 2021
Sep 2021
Aug 2021
Jul 2021
Jun 2021
May 2021
Apr 2021
Mar 2021
Feb 2021
Jan 2021
Dec 2020
Nov 2020
Oct 2020
Sep 2020
Aug 2020
Jul 2020
Jun 2020
May 2020
Apr 2020
Mar 2020
Feb 2020
Jan 2020
Dec 2019
Nov 2019
Oct 2019
Sep 2019
Aug 2019
Jul 2019
Jun 2019
May 2019
Apr 2019
Mar 2019
Feb 2019
Jan 2019
Dec 2018
Nov 2018
Oct 2018
Sep 2018
Aug 2018
Jul 2018
Jun 2018
May 2018
Apr 2018
Mar 2018
Feb 2018
Jan 2018
Dec 2017
Nov 2017
Oct 2017
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
Feb 2017
Jan 2017
Dec 2016
Nov 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
Dec 2015
Nov 2015
Oct 2015
Sep 2015
Aug 2015
Jul 2015
Jun 2015
May 2015
Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014
Apr 2014
Mar 2014
Feb 2014
Jan 2014
Dec 2013
Nov 2013
Oct 2013
Sep 2013
Aug 2013
Jul 2013
Jun 2013
May 2013
Apr 2013
Mar 2013
Feb 2013
Jan 2013
Dec 2012
Nov 2012
Oct 2012
Sep 2012
Aug 2012
Jul 2012
Jun 2012
May 2012
Apr 2012
Mar 2012
Feb 2012
Jan 2012
Dec 2011
Nov 2011
Oct 2011
Sep 2011
Aug 2011
Jul 2011
Jun 2011
May 2011
Apr 2011
Mar 2011
Feb 2011
Jan 2011
Dec 2010
Nov 2010
Oct 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010
May 2010
Apr 2010
Mar 2010
Feb 2010
Jan 2010
Dec 2009
Nov 2009
Oct 2009
Sep 2009
Aug 2009
Jul 2009
Apr 2009
Mar 2009
Feb 2009
Dec 2008
Nov 2008
Oct 2008
Aug 2008
May 2008
Apr 2008
Mar 2008
Feb 2008