mergeconflict225 James: [00:00:00] Frank. I just want to let you know that it's very, very important to wear a helmet. And at all times, regardless of if you're on a bike or on a one wheel or whatever, you're doing wear a helmet, Frank, Frank: [00:00:18] well, I already know the answer to this question, but James, where's this coming from? James: [00:00:22] Oh, well, you know that a helmet has saved my life twice, right? Frank: [00:00:27] My response is always stop falling on your head. James, there are better ways to take a fall, but what's assuming I'm going to think best of you. And they were out of your control. W uh, did a helmet saved your life recently? James: [00:00:41] Yeah. About a week ago or so. I mean, I always like to say when. When you, when you take a tumble on a, on a, some sort of vehicle, that's not a motorized vehicle or a motorized vehicle or anything, that's not the vehicle like a car, um, a bicycle per se. You're killing Frank: [00:00:57] me James: [00:00:58] often. Often you only have a few ways to fall. Now, the way to not fall is to, is the worst way to fall is to put out your hands. You don't want to do that. That's a bad idea. You want to kind of Frank: [00:01:08] touch. James: [00:01:10] No cause you'll break your arm. Frank, we'll break Frank: [00:01:12] it up. It's better to break your arm than your head though, but sure. James: [00:01:15] Well, if you have a helmet on, that's going to save your head, um, in general. So I, seven years ago, I had an accident in downtown Seattle and, uh, which is very unfortunate and I skid across an intersection and shattered my helmet. That one definitely saved my life. Um, that one was a little bit out of my control. Yeah. Um, luckily. Frank: [00:01:37] Give me a little heart attack over here, a surprise to everyone like me. James: [00:01:42] Surprisingly, surprisingly that one, I didn't really have any, any scrapes or bruises. I did, like my shoulder got scraped up and was a, a little bloody, but I didn't, I didn't nothing happened. Right. And then last week I went head over handlebars on my bicycle, which is very unfortunate. Frank: [00:01:58] I haven't done that since I was a kid. And even as a kid that hurt and kids just sound soft things. James: [00:02:03] Yes. Well, when you're going pretty much down Hill into a circle and a pothole jumps out at you and you make the wrong decision of yeah. Jamming on some breaks, uh, and not really realizing how powerful disc brakes are. They're very powerful. Uh, Frank: [00:02:19] wow. So your, your front brakes caught, you went tumbling, a fly in, uh, something, James: [00:02:27] uh, when to Tumblin to the, um, top right of my bicycle onto my, onto my chin through a circle and stuff. So I got a few, few stitches they're out now. I'm all. I'm okay. My arm is a little messed up. Got a lot of x-rays um, on everything, no broken bones, somehow, no broken teeth. I've no idea how to do it. That's good. Frank: [00:02:47] Yeah. Skin heals, teeth, James: [00:02:50] skin hair. So anyways, wear helmet is what I'm saying and don't forget to Frank: [00:02:53] vote. Okay. Non-sequitur but I'll accept it. James: [00:02:58] I've already voted. You vote yet. Frank: [00:02:59] We live in Greece. Yeah. Uh, it's pretty easy here. Yeah, we get it in the mountain and I just take it over to the box. It was a long ballot. I had to do a lot of research for this ballot. Cause it's always so many propositions and all that stuff too. So it's like, yeah, the presidential thing. I was like the easiest thing on the ballot. And then. The rest. I had to do a lot of research on James: [00:03:19] there. You got city counsel as you got the house and you've got this and you've got that. Do we Frank: [00:03:25] have, Oh my God. Every, every, like every six months we're voting on judges, democracy. James: [00:03:35] This is going to come out and we can remind people to vote next week too. So if you're not in the States, then I guess you don't have to worry about it, but you should still vote anyways. And your local elections is very important. And I, I did, it's hard to do the research. They send you the pamphlet. I looked in the local newspaper and also sort of the, the weekly. One that's more, I kind of out there newspaper, which I like to see where, what people are saying about people and there's some good websites that are very non partisan, which is good. Like the ballots, like the bonds they're worded. So, so odd. You're like, I don't even know what's this going to do? I'm so confused. Frank: [00:04:15] As a politician, I apologize because I've had to write such kind of stuff. It's, you're trying to summarize a 3000 word thing and, uh, you know, A paragraph it's hard. Uh, you know, they do a decent job with the, the pamphlets that we get. Cause you get, um, I don't, I don't pay attention. I'm so bad, but you get, um, an argument for an argument against, and then the. Counter arguments for both of those. And I kind of really love it because, uh, unfortunately you fall into the trap of you vote for the person who has the best writers. So all the politicians out there pro tip get a really good writer on your team. James: [00:04:56] I also, I've also enjoyed when the pro or against our BI. Um, you know, people that run different initiatives in the community or by different businesses that maybe you respect and things like that, you know about, um, there was one year that the, the. The individual that runs a Molly moon in Seattle. She, she wrote that, I think for, or against something. But I know all about the history of Molly moon. I know all about her. Cause I've watched documentaries and, and the transparency that wage transparency say that she spearheaded there, which was cool. But, uh, yeah, I dunno. I think that more transparency in those things are very good to have in general. Frank: [00:05:38] Yeah. Overall, I just kind of love local politics. So voting time is a fun time. It's I, the federal stuff is a little bit of a sideshow James: [00:05:48] and ever since I ever since I moved to the Pacific Northwest and then they made it so easy to vote, really, honestly like mail-in voting is honestly the best thing ever created. It's so easy. I mean, it, it, I don't understand. What we're going to actually talk about real stuff, but you know, Heather and I were sitting down and doing the exact same thing that you were doing, which was let's go through a ballot and look at the things. And I couldn't imagine like standing in line and then going to the polls and a million tens of millions of people are about to go do this. And I'm sorry, but not necessarily the standing in line. I don't mind doing that, but. Actually getting up to that box, to the thing and trying to remember what all the initiatives are for wanting to do research. He would take me forever. I'd have to have a, I'd have to have a whole one sheet. You know what I mean? I'd have to do the research before doing the research before standing in line to go do it'd be Frank: [00:06:40] bananas. And ours was literally two pamphlets. It was two books. That's how much. And I think it took me three hours to fill out about, I know other people, I'm sure you're smarter than me and you can fill it out much faster, but I totally understand. And I had the exact same thought as you. I've voted, uh, in those boosts before. And I don't remember how I used to do it. Then I just picked people by like, did I like their name or not? I don't know how I've possibly voted before. I was able to sit down and Google everything. James: [00:07:10] You know, we were thinking about that. And I was pretty young. And I think when I went into vote, I believe that maybe I only voted for a few of the top election spots, like the major ones, uh, you know, your house and you just go a party line, but then any of the other stuff, I would just leave blank because if I, I don't, I don't know what it does. I don't feel like I should vote, which is bad. Yeah. But it's better than voting, I guess, for the thing. I don't know. It's, it's a hard word to say. Frank: [00:07:39] I've never liked abstaining. I'm like, eh, you know, pick, pick a side, but I'm sure there are philosophies prone against abstaining. James: [00:07:46] Yeah. Oh, okay. So you can have a fun. So bow Frank: [00:07:52] done voting w uh, have we covered all the topics? Those are the most important things. Well, James: [00:07:57] what about running iOS applications on a Mac? Frank: [00:08:00] Oh, that's impossible chains. Why, why would we even talk about, James: [00:08:05] well, because there's a lot of cool pieces of technology, Frank, we have DTK. Systems in front of us that apparently at some point can run just any good old iOS application. I can't get mine to upgrade. So who knows if it'll ever work. And then we also have the age old, it's the old technology at this point, frankly, decaying technology of catalyst. If you will, it's been out for no, it's only been out for like a year, right? It was pretty young. I see this young. This young technology that really at this year's WWDC, it got backed upon, um, by Apple again, which is catalyst. And you and I talked about it in our dub dub DC or recap. However, apparently, uh, you have an update for us, Frank, is that correct? Frank: [00:08:52] I do I do. I spent a day hacking, hacking, hacking James on a single minded mission to enable catalyst for Xamarin iOS apps, the kind of apps I write all the time. And I would love to spend an evening with you talking it over because I'm very proud of the work I did here. And I think it's going to enable some fun news scenarios. But, uh, where do I even start? Like, uh, should we get some more background on all this stuff? Um, I don't know. It's a show. James: [00:09:28] Okay. So we'll, we'll, we'll, we're going to stick strictly to catalyst, not the new Apple Silicon stuff, but catalyst, let me see if I can summarize this in a nutshell. Catalyst is. In theory, a check box that you check this as I would like my application to also be compatible on Mac iOS devices. And when you do that, it enables you to compile a Mac iOS application. You can add some additional, you know, menu support, some things like that to it. Um, but it gives you a Mac iOS application that you can put into the Mac app store. And what Apple has done is I believe that they've written all the libraries that need to be supported on Mac iOS. So there's like a shim layer, almost like P invoking in some way, but it's like, they've, they've poured it over UI kit and they've poured it over all the things to make it compatible. So when you compile up the special app bundle that enables catalyst, it's sort of injecting all that junk in there to make it run. For math, Frank: [00:10:35] I can make a lie. All that junk, all that junk. Yeah. Yeah. I think the elevator pitch is take your iOS app and sell it on the Mac app store. Because what we're really talking about is, um, we've written a bunch of apps and we want to be cross platform developers, but it can be a lot of work supporting multiple platforms. We work really hard to make that easier and everything, but just is it takes effort. The neat thing is, is that. Revelation, as you said, it's a checkbox. So we're talking 99 to a hundred percent, um, code sharing between an iOS app and a Mac app. And as someone who has written a lot of iOS and Mac apps, that sounds pretty wonderful to me, James, because it allows you to focus down on one API in this case, UI kit for building user interfaces. Um, Otherwise, it's just a normal app, you know, it compiles code and all that stuff. So it's interesting. There are still some questions, like how do you purchases work and all that kind of stuff, but just as a technology, I want it for that beautiful, beautiful feature of being a hundred percent code share between platforms. James: [00:11:51] Yeah. And I think many people at this point would say, well, well, couldn't you just add a macro S if you're using Xamarin forms, couldn't use a macro S uh, head project, which I've definitely done my stream timer on Macko S is just a Xamarin forms application. So I've never gone into app kit and had to mess around with any of that shenanigans. Um, you know, and, and I just use this normal XAML that I've used for awhile. The difference though, is that you sorta have to ensure that. The Xamarin forms Macko has had is, is feature complete feature rich, which is still kind of in previous. And it's not a shipping 100%. Yeah. Stable product, as far as, you know, There being a checkbox. You know, I, although I ship the app to the app store and lots of people download it. And if you make an app or a, uh, just a normal iOS, uh, uh, or sorry, a normal Mac application, then you, you of course don't get any of that shared code. Right. So you can add that Xamarin forms, project to it and, and do that. And let's say even they were 100% the same. There's the, the cork, which is, well, you got to go write the Macco S code. To go do the things. If there's any platform specific things know, okay, Xamarin essentials has some of this stuff. Now we're kind of, we're kind of irking it in there, but there's, there's more testing. There's more things to do there. It's not just one app that magically works on multiple platforms, sort of the, the UWP ask of the world, right. Where a UWP app could work on the desktop on an X-Box and, and, and at one point back in the day, a phone, you know, so that magical bit. Um, but the difference is that they've sort of, Macko S a fide, the iOS application in a way where whatever is running on the iOS device, like you said, in theory is going to be working and acting a hundred percent the same on Mac iOS, like in-app purchases, which we assume work. I'm not a hundred percent sure, but I guess, you know, one set of code is what I'm saying is you don't have another head project really inside of there that you're messing too much around with. Frank: [00:13:56] Perfectly said. Perfect. Um, it's kind of funny. I was daydreaming a little bit. I was thinking, um, it's, uh, in a lot of ways it's kind of like UWP UWP was Microsoft's answer to, we have a lot of different kinds of hardware out there and we need a. User interface library that can adapt itself to all this different hardware. Well, Apple has done the same thing, but they chose UI kit to kind of be there across platform thing. And so their big pitch has been, if you write a really good iPad app, And then convert that over with the magic checkbox over to Mac, it's going to be a good Mac app. And so that's that kind of unification of their platform. You mentioned the D DK earlier and that's, uh, when the arm 64 chips come out and that'll be awesome because people would just be able to run iOS apps natively, but there's a lot of Intel hardware out there, you know, all Macs out there today are Intel. And so it'd be wonderful to have that same story. So all that's wonderful. There was just one little hitch. Uh, none of that was working with Zamron iOS. It was working in X code, but not if you use C-sharp or F sharp, like I use to write your apps. And that was annoying James: [00:15:13] to me. Yes. So I believe there's some open issues, some development maybe starting, maybe know there's priorities, there's things that are happening. We're entering obviously iOS 14 season. We're in the middle of a global pandemic there's product design. And there's a bunch of other things. Uh, I'm not going to talk about inside baseball necessarily, but you know, the it's on the radar, you know, if, if anything of, for the Xamarin team, uh, to, to do it. And, and while I belittle it down to a checkbox, Uh, I'm assuming that Frank, it's not just a check box. Frank: [00:15:46] Oh, no, it was a ton of work. I really was. I I've given up on it so many times at this point that, that, that's why I'm so excited to talk about it because I really feel like I finally made a breakthrough on something that was really just driving me nuts, but, um, uh, to get to it. Yeah. I, I totally knew where, uh, Xamarin and Microsoft were coming from. I just. What's unhappy about it. Of course, I want things now, but I totally got where that was coming from. The real issue was I had this annoying little devil Frank in the back of my head, and I think it's like 15 year old. Frank just kept screaming. It's not that hard. You can do this. Like it's, you know, I, you, you know, the fundamental pieces of how this stuff works, you know how to build each one of them just, you know, Do it just do it and how hard could it be? And so I had that little devil in the back of my head and I tried once and I just got lost in all of this Amrun code. The cool thing is Zimmerman's open source. So you can just go look at all this stuff. How does, how does Xamarin iOS work? Well, the codes right there. Go read it. Good luck. And, but I just, I just failed on that first attempt. James: [00:17:00] Yeah. I have to imagine that it's. Relatively complex. And I have not only this process, but of course the, the, the Xamarin code base and obviously the iOS code base and how compilers work are also complex, you know, and I have definitely added some code to Xamarin Android before I've poked around in the iOS stuff. I've done episodes on the Xamarin show on the, and also the community. Stand-ups talking about how to contribute code and do bindings and. It's uh, you know, it's, it's cool that you can do it. I'm just not that low level of a programmer. That's my problem. Right. I see the low-level the wizardry that happens behind the scenes and it's always scared me away from contributing more. However, there are people like Frank Krueger that love that type of stuff. So I have to imagine that while maybe you gave up, initially, I have a feeling that. The itch kept on edging and you had to keep going Frank: [00:18:02] for it. Yeah, 15 year old, Frank is a real jerk. He just kept screaming at me. He's like, come on, come on, you failed at one time. How hard could this be? Keep trying. Um, I don't love this stuff. I don't want to be doing this stuff. Just have this annoying voice in the back of my head. Uh, so it's lots of time went by. I pondered where I went wrong and all that kind of stuff. And what I figured out was I was attacking it from the wrong side. Um, I was attacking it right. From the build side. So I, you know, started with the Xamarin task. How does the Zimmerman task work? You know, figure all that stuff out. What I found out pretty quickly was I need to start from the ground up with mano itself. Mano needs to be recompiled for Mac catalyst because although Mac catalyst is x86 is 64 bit Intel code x86 64. Um, It has some magical flag in it and all their compilers will reject Intel 64 bit code, unless it was specifically compiled for Mac catalyst. So that was the big realization I came to was. Uh, Oh, I got to start at the very bottom. I thought I was just going to be able to reuse the Mac version of mano, but no, no, I have to start way down deep. James: [00:19:24] Ah, I see. Yeah. So there are quite a few pieces to just running a Xamarin iOS or Mac application. So we should maybe even start before we're talking about the work that you did talk about how those things work, what. The pieces need to go, but first let's take a quick break and thank our amazing sponsor this week. Reagan, listen, have you ever wondered if you could be offering a faster, less buggy application experience for your customers? I know I do all the time and check it out with Reagan application performance monitoring. You have all the information you need at your fingertips to find and fix errors and performance problems across your tech stack down to the line of code that's causing that problem. Reagan makes it easy to monitor the impact. Of your performance improvements, keyword impact, right? And quickly identify and resolve issues and see how your code performs in the hands of your customers, saving you time, money and sanity gotta stay sane in these times. Visit gun.com and join thousands of customer centric, software teams who use Raygun every day to deliver flawless experience for their customers for all of their applications. As a reg.com to your free 14 day trial. Thanks to Reagan for sponsoring this week's PA. Frank: [00:20:33] Thank you for Hagen and thank you, James, for not mentioning my apps need Reagan. You're welcome. James: [00:20:38] You're well, your apps are flawless, Frank Frank: [00:20:41] Wallace, but you know, it wasn't my build scripts. Uh, I feel like, I don't know anyone who watches my trip. A Twitch stream sees that I just live in error messages, you know, a hundred errors. Okay. Got to work through every single one of these. So what I decided to do was get mano compiling for Mac catalyst, and I learned very quickly. I have no idea how to compile Moto. James: [00:21:07] So, let me get this straight though. So there's, there's obviously mano has done at runtime that runs, uh, that enables, you know, iOS, Android Macko ass through Xamarin. The framework is because Xamarin itself does multiple things. It enables the Don code to be run, but it also has all the bindings, right. That the make and the builds and all the magical things that navel you as a add-on net C-sharp SRV developer to build those apps. But what you're saying is that. That you can't just use the runtime. That was for iOS for catalyst. What you're saying is that you'd have to use the Mac version, I guess it was running on a Mac, but the Mac version of the runtime. But when that defeat the purpose of catalyst, which is that it's just iOS. Frank: [00:21:54] Yeah, it's so easy to get confused. Trust me, because that's where I went wrong. On my second time. Um, I, I found out that there was this just flat-out compiler thing. Like the compiler is just not going to accept it unless you run the compiler with magical flag, so need to get that magical flag in there. But I made that, I made it. I did exactly, as you said, I thought I started with the Mac version of mano and I just compiled the Mac version of mano with that flag. Right. And it turns out that was completely the wrong thing to do, but I didn't realize that at the time, all I found out was after another long day of work, just nothing was working. Just error messages everywhere. I had made a mess of the mano build because the motto does complicated. It's make files everywhere and it was just a disaster. And I was like, okay, I, it it's frustrating because it's like, I know fundamentally what needs to happen. I just don't have the skills and knowledge to make it happen. So it was very demoralizing. I didn't know what to do after that. So more time passed. Yeah. I wouldn't sign it. James: [00:23:00] I wouldn't even know where to start by the way. I've already given up, um, probably months ago. So, Frank: [00:23:05] yeah. Um, but I'm sorry, we were supposed to talk about a little high level. So let's talk about layers real quick. So you have, um, the native operating system. Whatever that happens to be windows, Linux, Mac, uh, then you have mano the, the run runtime running there, and mano has a lot of different ways to, uh, run. Like if you do AOT, mano is barely there. You know, if you do AOT, your code is just running, but. If you run like the interpreter, you know, mano is doing a lot of work. So there's varying amounts that the runtime actually does. Xamarin is a layer on top of that. And Amrun is primarily concerned with talking to different user interfaces. So talking to the Android system and talking to the Mac system, I keep saying user interface, but really anything S specific. So Android specific Mac. No, it was specific. So those are the layers. Um, and then if you want to get really technical, you have the build system on top of that. And then the IDE integration on top of that. So all of that stuff has to be done to make this actually work it's in this process that I started to realize why, uh, Microsoft has been like, yeah. Okay. Uh, we'll we'll get to it. We'll get to it. It's a lot of work. So, um, I decided to go for an easy win. I wanted to try to at least get the Xamarin parts compiling. With, uh, that magical compiler flag that makes Mac catalyst work. And I worked hard, worked hard, struggled through errors. Uh, Oh boy, the build system takes a little bit of time. You can need a beefy computer. You need lots of hard drive space. Cause you're going to need lots of versions of X code installed, but, uh, you can get through it. And with. Enough whining and crying and sadness. I got Xamarin compiled for Mac catalysts that I felt like King of the world, James I'm like, it's only one piece of the puzzle, but at least it was done and I was very excited. James: [00:25:09] So you, you had just the pure. Just runtime working basically. Frank: [00:25:15] No, not I don't have the runtime work and yet Nope. Don't get ahead of me. I have purely Xamarin. So let's call that, um, objective C technically kind of working in the case of iOS and Android, it would be talking to the Java runtime talking to, uh, what are Dalvik. Is that what the runtime is called? James: [00:25:33] Arch or Dalvik? Yes. Frank: [00:25:35] Yeah. Okay. Yeah. So, uh, so Xamarin is that magical layer. That's able to talk to those other object oriented systems. And so I had that working, but it's just a piece, you know, it's just a middle layer and the puzzle. I still didn't have mano itself running and Mac catalyst. James: [00:25:53] Hmm. Got it. Got it. Frank: [00:25:56] Yup. Yep. So what that meant was, so here comes, uh, attempt number four, I woke up one morning and I really didn't want to do it, but I had one idea for how I thought maybe I could do the mano version slightly better than I did it last time. And I won't get so confused by everything. And, um, I started basically a new target for Moto. Like I ignored Mac. I just said, I'm going to start from scratch. And I actually more copied all of the iOS stuff. And so I just, I made, instead of copying the Mac stuff, I copied the iOS stuff, which in retrospect makes more sense because what is catalyst it's. And iOS running kind of on Mac. So ignore the Mac parts, focus on the iOS parts. And that was the big kind of revelation. That's when things started to click into place, though. Coolest thing was when I got mano to compile. I'm not talking about running, but just compiling. It felt so good. You saw this 20 megabyte DLL, basically. It's called dive live on Mac and iOS, but this thing was there and I'm like, I did it. I built mano, I, for, for years, I'm like, yeah, I'm a motto hacker. I hack the motto. But finally, James, I had built my own motto with my own compiler settings. I felt so free. James: [00:27:27] That's pretty cool. Right. That's because that means at this point you're able to. With, with those flags, be like, Hey, in my version of things, you know, do stuff and you can almost have a clean separation where you could contribute back. So it's not going to mess up iOS or Mac or anything like that. It's, it's a special catalyst build. Frank: [00:27:48] Yeah. And that was a big issue during all of this. A lot of what I could have done was very hacky. I could have just, you know, search and replaced and put that a compiler flag exactly where I needed it to be. But I knew at some point I'd want to contribute this back in some form or another. And I didn't, I know a few of the Monell runtime people, and I could just see them rolling their eyes. If I did it to hacky, they're really good programmers. And I respect them so much and I don't want to be handing them a bunch of like ugly hacks. So I was really proud that I had that clean solution. That I was in control of, and I wasn't going to interfere with anyone else's, you know, I had no chance of breaking anyone else and that just felt so good. James: [00:28:39] So once you have this big dialogue and it's just a big library, right. It was just sitting there on your desktop and just staring at it. W what do I do? Frank: [00:28:47] Yeah, exactly. So what do I do now? Um, I. I created a million sample projects in Zara, and I created a million sample projects and X code and compared compiler settings, how the package is made. And what I ended up doing was building a little build tool. So in the same way that there is a Xamarin iOS build tool or a target. However you want to think about it. There's one for Mac. I built my own other little one, and I did it with an eye toward, I didn't actually want to do a whole build of your app because that would be frustrating. I wanted to take your iOS build and just kind of turn it into a Mac build. And so I built a tool that, uh, with that objective of just. Pointed at your already built iOS app and magic Presto bang. Uh, it'll just, I'll put it back up for you. That that was the goal. So I started writing that tool. James: [00:29:46] Yeah. That's sort of makes sense where, you know, often when you're publishing an application, let's say I'm publishing a WPF or a UWP application on the desktop, uh, or even, uh, um, you know, even, uh, IOS or an Android application often you're going in and you're like, Hey, I want these different type of architecture types. Right. I want x86 X 64 and arm, you know, give me all three of these and it pumps out a bunch of bundles for you. And you're like, cool. I just, it did it. So it's sort of taking the initial and it's compiling and it's just like, okay, now here's the next one. And here's the next step. Right? So I've always sort of imagined that the catalyst step is, Hey, I built my app and know kind of. Shim it into and rebuild it into this other extra package and it would pump out another package for me. So that's kind of always kind of assumed it would work grant granted. Like I never tested it on, on X code or anything like that, but that was sort of my assumption going into it is that you would be just another thing you would turn on because for some people they may not want their app on the Mac, although. You know, that's up to you, but as soon as Apple is just not going to let you, it's just going to happen anyway. I guess you can opt out. You can opt out. But, um, like you said, when that happens, this piece of technology would be a little bit more important because who knows when the full, full Apple switched to Apple, silicone will be. And even then it's going to be forever and a day until we get a hundred percent Apple Silicon out there, and we'll never be a day, that's a hundred percent, but you know, until, you know, three, four, five years from now, We have a bigger, bigger, you know, installation base out there. So, you know, it's, it's important to be able to, to separate that. And then also like you're going to get those build artifacts at the end of the day, or like, Oh, here, here's the iOS app here as a Mac app. Like, okay, now I see what's going on Frank: [00:31:34] here. Yeah, exactly. And I've built complicated build steps before we has, when you do a web assembly build using, we, it goes through a very complicated linkings staff and, you know, complicated stuff. I don't want to rewrite that again. It's a lot of work. Uh, I've seen the source code, but at the same time, um, To give you that magical experience that you kind of expect and want out of all this stuff, it does at some point it properly, it should be integrated with the iOS build system itself because that's the one that can share the most stuff with a, it's just a matter of doing the extra little step in the end to output the back app. And so that'll be the proper queen way to do it. The reason I didn't do it this time though, is because I just made a mess of that code. It's complicated. Um, I don't understand it fully and I keep trying to modify and I just keep breaking everything. And so I just, I wanted to work kind of in an independent layer. And then when it comes time to integrate it, I can integrate it. But yeah. Uh, I agree with you. I want this to be just a nice, simple, magical little feature like that. James: [00:32:43] So do you have a spin now? Something now? Frank: [00:32:46] Yes. So I got the bill to overworking. So I have let's review. I have a compiled motto. I have a compiled Xamarin, and I have a built system that puts them into a cute little.app. Great. Now you run the.app, James and your computer hard freeze it. James: [00:33:04] No, no, not idea. Frank: [00:33:07] Not the best place to start. You're like darn missed it. Not going to run the first time. So reboot your computer. No, hold the button for five seconds. I hope your files come back. Yeah. Yeah. Anyway, um, so what begins now is approximately 10 hours. Of single stepping through every single line. It feels like of the mono source code tracking down one error after another, after another, after another, because, Oh my goodness. There were so many errors that I worked through and there were so many times where I just said, this is the stopping error. Like, I don't have the brain knowledge to get past this error. Maybe if I sat down with some of the mano engineers and explained to them what I've been doing for the last 10 hours, I could, they might be able to get me through this error, but I don't know how to get through it. So there were just so. I want to say there were so many moments, but there were just two big moments like that where I just literally gave up on the project. I'm like, I don't understand what's going on the model runtimes, not doing what I expect, max, not helping, you know, the worst part, you know, the worst areas in the world are those silent ones or just nothing happens over and over and over again. The great breakthrough of the day was when I got. The mano runtime to print out error messages. It was a revelation. Oh, heavens rained down upon me. James: [00:34:43] Yeah, because it's not, you're debugging through like adding break points doing through through things. I'm assuming it's not that elegant at this point, because this is a sort of a very, you know, hacked up version of, of the Frank: [00:34:56] runtime. Yeah, I don't want to call it hacked up. I had a beautiful James: [00:35:00] building. It was, yes, it was, um, um, was, it was it was, it's a nice souvenir fresh. So some organic tomatoes that you took out and day started into a beautiful, a beautiful cheese and Cracker plate with some fresh vegetables on the side. Frank: [00:35:21] Yeah. So at these, we're definitely at a low level here, right? And there is a lot of interplay between the runtime and the library system at the slow level C-sharp is talking to native. Native is talking to C-sharp, they're just going back and forth with each other. The good news is because I compiled everything myself on my machine. I could actually use a native debugger. So LLDB the, um, the LLVM debugger it's on all Macs and it's a really good. Native debugger. The problem is there's this big interplay happening between managed code and native code, but I only get to see one side of it. So the only time I get to see managed code executing is when it throws an exception and Oh boy was a throne, accessions chains. I could not get one thing to work. Like I would try to create an NS string, the NS string stat, a constructor would call. A new on an NSR object, the NSA objects that a constructor would call all new on NS string. The, in a string static constructor would try to load some objective, see thing, and then the world would explode and I would ponder life all its meanings. And whether I should have just been an artist. Just painting clouds all day. James: [00:36:41] I, what I would like to do that sounds great. Frank: [00:36:44] Clouds are nice. Yeah, you did some blue happy clouds, some happy trees. Uh, okay. So this is all me just whinging and whining because in the end, uh, somehow I actually was able to work through. All of these errors and five minutes after I was able to work through all those errors, I sent you a screenshot, so proud of myself because it was such a monumentous moment. What happened was finally mano was behaving itself. Xamarin was happy. The class library was talking to the runtime. They were getting along with each other and lo and behold. It created an app window. It loaded a storyboard. The registrar kicked in the class overloads were executing and Presto bang. I had turned an iOS app into a Mac app with a silly little batch script. James: [00:37:42] I like it. In fact, the very first screenshot you sent me was of a white box on the screen. And that was like, I don't know, I'm looking at here, Frank. Uh, and then you sent me another one, which is a box that said, hi James from catalyst, which I thought was very nice. And there was, uh, there was, you know, some, some code in there which was a, a UI view controller. And that was popping up on my lit on the, on the Mac, just sitting there. It's like, Frank: [00:38:09] yeah. UI view controller and all its friends. Yeah, it's great. Uh, you know, the thing is I've been programming iOS for 10 years now. I used to think that when forms was my strongest API UI API, that I knew. But the fact is I've been programming UI kit for 10 years now. That's the thing that I know best, and it feels so good to be able to just use the UI kit on Mac, because I spent so much time on the stupid Mac. I love my iPhone. I love my iPad, but I spent so much time on a Mac that I love that I can use my strongest API using my strongest languages on all the hardware I use all the time. It's so I was going to say freeing liberating. Those are the wrong words. Just feels good to have them all together, working together. James: [00:39:06] One big happy family. Yeah. So did, did you get more than a blue box? Have you tried it on other things? Like where is it at today? I mean, it's only been for 24 hours since you texted me, but I mean, I'm assuming in that 24 hours, uh, you have all of your applications running on it elegantly. Frank: [00:39:23] I don't, I don't, I, um, I was burnt out and that was such a long day of programming. I spent a little bit of time after I texted you cleaning up, like the build script and the packager to the point where I can just run it for any other app and that kind of stuff. But there's still a few hard coded strings here and there. And a few little things here and there, you know, I I've got the proof of concept working. I don't have, you know, a shippable product as they say, but at the same time, I know that I didn't use a lot of hacks. So I know like parts of it are, are fine. You know, there's no, no reason to worry about some parts of it. So it's really cosmetic things that I have to fix. So like just improving that app. Uh, at bundler and all that. But the other thing is I was just thinking, so I decided to take the day off and not do anything. I'd even do my Twitch stream. I was so exhausted from this little, little escapade. But I am really excited to see if I can get all my apps running in it. James: [00:40:28] Yeah. That makes sense. Just to see where you take this and how it progresses. I know it's early days and to kind of see where it goes. I mean, it's something that I've been excited for for a while. I haven't. You know, I haven't really, I know I've been excited for it, but I haven't been like, Oh, I need it right now. This moment, you know, this is sort of pushing forward, but I think if it's just there, right, I'm not going to complain, you know, there's like, Oh, there's a very good Frank: [00:40:52] point. James: [00:40:53] I mean, if there's an option to do it, I'm not going to complain if there's, even if there's an option, not to do it, I'm not going to complain until I, until I absolutely need it. And then I'm like, Oh, I really want this. Uh, but I will say that it, it feels like a completion of the story, a little bit of, of making it a possibility. Um, even though it doesn't sound as easy, it doesn't sound as easy as you thought it would be. So it's good. It's almost a good thing to think about. Cause if, if, if you went in and did it in like five seconds, he would've been like, God, come on. You know, but it's almost good that you, you went through this process and in a weird wacky Frank: [00:41:27] way of thinking. Yeah. I still feel like if I knew half of what the mano engineers actually know though, I would have been, I could have done it in half the time, but yeah, I agree with you. Um, and, and for the future, I think longterm, I'll definitely be looking to getting these integrated into the real products, but in the short term, I was thinking I might actually, um, release a kind of like as a small group on get hub or something like that. So stay tuned. Watch me on Twitter. I'll. Probably released it in some form or another to a close group of somehow. I don't know. I hate managing groups, but I'll figure something out like that. Um, so give people an opportunity to try it out on their own apps, uh, because I'm sure it's going to break in all sorts of wonderful and interesting ways when it gets out into the real world. James: [00:42:17] I am in general, even just normal catalyst without. And just even swifter objectives, the applications, I'm also still interested to see the full capabilities of what is possible with it. And of course, even with the arm stuff, I'm assuming it'll all be fine, but I don't know, a hundred percent, like I, you know, I know that like the stock app and the weather app and the news app are all the catalyst or, you know, just apps running, but I'm fascinated to see. The bigger crazier apps. I think of the Adobe applications for iPad or whatever. There's just going to magically work. I don't know. I'm fascinated. I don't know. So I'd be really interested to see how, how deep it goes, because in theory, it all should just Frank: [00:42:58] work. You know, I can say from my point of view, what I'm going to do, I'm kind of hoping I've written my last app kit. Honestly, I would much rather for the Apple platforms to focus on UI kit AI, know it and love it. B we've talked about it on the show before, where it's so much easier to just focus on one UI system. So if you're like focused on Xamarin forms, that's. Amazing because you can spend all your time making your app look amazing and then it looks amazing everywhere. Uh, I can do the same thing kind of on the Apple platforms where I can focus all my attention on to making the greatest UI kit, iPad app. However you want to think of it and that'll translate. Into a good Mac app. So I'm excited for the future. Um, especially as we keep saying the Apple Silicon thing with all the iOS apps coming to Mac that in that way, it's, it feels like the right area of investment is to stay focused on UI kit. Uh, on, on those platforms, James: [00:44:05] I think. So that's sort of what Apple has been telling us. I feel, so I'm going to keep listening and, uh, I'm going to keep watching all the cool stuff that you're doing, but yeah. Feel free to write into Frank. You can hit us up on merge conflict.fm, and of course, helping our discord write a little, a little contact form right in, or just follow us on Twitter. Frank is app for Clairmont. I'm at James Matson mag. Now. Frank. You're awesome. You're very smart way smarter than I am. And I'm really excited to see what you do with this and see what happens when you give it to other people. So we'll see how that goes, but that's gonna do it for this week's merge conflict. So until next time I'm James . Frank: [00:44:41] No, and I'm Frank Krueger. Thanks for listening.