Update to making old versions of Xojo work on new macOS

Some time ago I posted about making 2019r1.1 work on newer versions of macOS

And there are reports that a related technique can be used to enable older versions as well (post copied here for posterity sake)

I ran into this problem today when I wanted to use an older version of Xojo (2018 R4) on Monterey. I found a simple solution that works at least for running the app from Xojo. I could not test if it also works for building Mac apps, because I don’t have a desktop license. Obviously, the better solution is probably to modify your code so that it runs with a more recent version of Xojo (and buy the Xojo upgrade if necessary).

  • Run the Xojo app at least once, so that Gatekeeper is out of the way and you can modify Xojo.
  • Right-click the Xojo app and choose “Show package contents”.
  • Go to the folder Contents/Resources/SDKStubs/macosx10.14/System/Library/Frameworks/AppKit.framework
  • Open the file AppKit.tbd with a text editor like BBEdit.
  • Under “reexports”, you’ll find the problematic UIFoundation framework that’s referenced in the error message from the linker (/System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation).
  • Simply remove this text (/System/Library…) and the preceding comma. Don’t delete the closing bracket, it should now be where the deleted comma used to be.
  • Save the file.

Now Xojo will run your apps again.

Phew !

A couple years back I joined the Canadian Ski Patrol

Normally we’d have to requalify as a patroller every year. But since 2020 was deep in the pandemic at the time the CSP extended every ones qualification for a year.

So unlike most years we didnt have to do exams last year.

Which brings us to this year. We did.

And I have to admit that exams do NOT normally cause me any anxiety. Except this. There is both a written and diagnostic component. 100 multiple choice questions which for some reason I didnt feel prepared. And then they set up a scenario that you have to walk into, diagnose a patient and determine the correct course of action to take.

AND Yay I passed both ! First try !!!!!!!

Now I can quit waking up at 3am thinking “Am I ready ?”

Blast from the past

Many many years ago when REALbasic first wrote the IDE in REALbasic it was said

“We’re also ‘eating our own dog food,’” said Perlman. Previous releases of REALbasic were coded using the C++ language, although with REALbasic 5.5, the last significant update, the groundwork was laid to add pieces that were written in REALbasic. When REALbasic 2005 is released, the entire Integrated Development Environment (IDE) will have been recoded in REALbasic itself.

“That has some benefits for our customers, most of them indirect” said Perlman. The engineers who are developing REALbasic are now having an experience more in line with their customers’ own experience, which gives them a better sense of what does and doesn’t work.

https://www.macworld.com/article/174461/realbasic-45.html

The various API changes made over the past 2+ years should be treated the same. They fundamentally change users experience. When Xojo’s team isn’t using the same API’s day in day out that users are the disconnect is as if they are writing in a completely different language.

Feedback Numbers

As of Oct 18, 2021

Closed (Already exists) 7
Closed (By Design) 45
Closed (duplicate) 48
Closed (Misc) 31
Closed (No Longer Reproducible) 2
Closed (Not Actionable) 7
Closed (Not Reproducible) 44
Closed (Won’t Implement) 8
Fixed 8
Fixed & Verified 107
Implemented 1
Implemented & Verified 15
Needs Review 10
Reproducible 176
Resolved 2
Reviewed 217
Verified 32

Overall 435 Open cases

Visitors from Germany

Recently I had both Christian Schmitz and one of my clients from Germany visit

Christian and I spent his first full day in Canada touring about to the Royal Tyrell Museum and some of the sights on thee way out. Weather was crappy so we didnt spend a lot of time outside.

At the end of the day we got together with several other Xojo users at a local restaurant and enjoyed a nice meal and discussions around all kinds of things.

Spectacular !

Last night the northern lights were out in full force.
Walked to the end of the deck and WOW !
We took some pictures but they didnt come out nearly as nicely as the ones my youngest took (like this)

Truly an awesome display

Copy & paste is not a code reuse strategy

Code reuse is an admirable goal for any developer.

Being able to re-use well written well tested code is a good thing.

Especially if you can reuse it across multiple facets of one project, or across several projects.

And I wouldn’t be surprised if a lot of people start out reusing code using copy paste from one place to another.

However, copy paste isn’t usually a well regarded code reuse technique.

Why not ? Stack overflow wrote a blog about the reasons. You might copy & paste someone else’ insecure code into your projects and thereby introduce security vulnerabilities. That’s certainly a possibility.

But what if you’re just copying & pasting your own code around ? Where’s the harm ?

Suppose you have some code you really think is top notch. And you want to reuse it over & over. Suppose you want to reuse it in the event handler of numerous controls across several projects in Xojo.

And sometime later you find there’s a bug in it.

Now how many places do you have to fix in one project ? Or worse across many projects ?

This is where copy paste as a code reuse technique can cause you extra work.

You have to find & fix all that code in every project you’ve used it in.

I’ve been using externals in SVN (yes I still use SVN)

And in every project that uses these shared modules its a simple “update” and they have all the latest code from all the shared items.

Git has similar capabilities.

All good things come to an end

Some time ago Bob had said he would let the domain registration for BKeeney Briefs lapse. Today it finally came home to roost.

Trying to visit gets you one of several things.

What I got was a domain name squatter site trying to sell me the name.

Sad to see that finally happen but with Bob’s employment changing from contractor to full time employee its not surprising.

And, with this change, another one bites the dust somehow seems strangely appropriate.

Thanks for everything Bob !

Bit in the ass by API 2

Was tracking down a bug in my app and couldnt figure out what was wrong initially.

All the code seemed right but setting a value to code like

value = string.ToInteger

seemed to be the culprit. Sure enough the string contained a value like 3.0e+2 (an integer expressed in exponential form) But the docs say

String.ToInteger

Method

Returns the integer equivalent of the source string. This function is the same as the Val function but is international-savvy.

But experience was telling me this wasnt true

So a quick test in 2021r2.1 with

Dim s As String = "3.0e+2"

Dim i1 As Int32 = Val(s)
Dim i2 As Int32 = s.Val
Dim i3 As Int32 = s.ToInteger

Break

shows that indeed i1 = 300, i2 = 300, and i3 is 3 not 300 like I would have expected. I changed my use of ToInteger to Val and things work as expected.

Be careful out there

EDIT : reported bug http://feedback.xojo.com/case/65567