Skip to content
Episode 121

M365 Admin App: A Customer .NET MAUI Migration Story

December 15th, 2023

52 mins 37 secs

Your Hosts
Tags

About this Episode

Show Notes

The M365 Admin app is used to administer M365 tenants on the go. It's a complex app written in Xamarin.Forms ... or it was. Find out how the team behind the M365 admin app migration from Xamarin.Forms to .NET MAUI.

Follow Us:

Transcript

00:00:16 Matt

Welcome everyone to the.net Maui podcast. We're here to keep you up to date with the latest and greatest in.net client development. We'll talk about some Azure, some Visual Studio, some blazer and of course, net Maui.

00:00:29 Matt

I'm Matt Sokka, and today we have a special episode. This is a customer update episode. I'm going to be talking about the M3.

00:00:37 Matt

65 admin.

00:00:38 Matt

App now this is a really cool.

00:00:39 Matt

App is that.

00:00:40 Matt

It lets you admin your M365 tenants and on the go scenarios like you can go and change the passwords for your users when you're out and about. So quick tasks that keeps you up to date.

Read Full Transcript Hide Full Transcript

00:00:49 Matt

So Swaggy this app came from Xamarin, it was just updated over into net Maui. So tell us a little.

00:00:56 Matt

Bit more about that.

00:00:58 Sweeky

Uh, Yep, for sure for sure. Umm, this was a super exciting project to be a part of. Our team was extremely lucky that we got to work with the M365 Admin app team again and we essentially help them in the journey from moving over from Xamarin to dot at Maui and let me actually bring in the awesome team and then we can talk a little bit more.

00:01:19 Sweeky

About how the process is like learnings and how the app is so let me pull in Shivan and Sanjana from the M-65 Admin app team.

00:01:29 Matt

Right. So yeah, before we get started. Yeah, let's let's introduce everybody. My bad for not doing that right away. Sweetie, introduce yourself, and then we'll have Anshuman do it. And then Sedona so squeaky. Who are you? Everybody knows who you are. So we gave out one last time, just in case we have brand new people tuning in.

00:01:46 Sweeky

Sure. Hi everyone. I'm swiggy. I work in the dev customer engagement team and our job is to help awesome customers who are trying to do awesomethingswith.net and their apps and help them be extremely success.

00:02:00 Sweeky

Doing that and Yep, like I said, this this episode, we're talking to one of our awesome customers, the.

00:02:07 Sweeky

M360.

00:02:08 Sweeky

Five admin app team and I will throw this over to Anshuman now so he can introduce himself. And then.

00:02:13 Sweeky

We can go over to Sanjana.

00:02:18 Amsuman

Hi, I'm anshuman. And I'm part of admin IDC team and this was my first project working on migrating them 3365 admin mobile app from Xamarin to dot net movie.

00:02:31 Matt

Great. And so Joanna.

00:02:33 Sanjana

Yeah. Hi. I'm Sanjana from the M365 admin mobile app. So I was part of this exciting project of migrating the Xamarin forms app to net Maui and I have been working in this team for.

00:02:50 Sanjana

The past two years.

00:02:52 Matt

All right. So I guess the biggest and the most.

00:02:57 Matt

The question is this app was a Xamarin app beforehand and I'm sure man I'm going to ask you this, why did you choose to start migrating the net? Molly, what was the impetus, the reasoning why you decided to say, hey, I had a perfectly good app, but why did I want to bring?

00:03:12 Matt

This to dot net Molly.

00:03:14 Amsuman

Yeah, sure. So initially we were before we migrated to dot net movie we were using Xamarin forms 4.6.

00:03:23 Amsuman

But by the time we moved to Maui, there were later versions of Samarian, but we could not update to that you to some partner dependencies from Intune which was not supported was Xamarin 5.0, but we could still live with 4.6 for our requirements. But then Google came up with a mandate saying.

00:03:43 Amsuman

We need to target API 31 level devices starting from November 2023.

00:03:50 Amsuman

So one issue we faced with that was the Intune package we were using it.

00:03:57 Amsuman

It had the latest support for API 29 level itself and the main reason was the while targeting the API 31 there was 1 issue, one native issue where we had to add few attributes something like export equal.

00:04:14 Amsuman

True, but that was not being added for the Intune package because of it implicitly creating the attributes in the manifest itself. So first initially before considering migrating to Mobi, we worked with Intune App Intune team to.

00:04:34 Amsuman

Fix this issue in Xamarin 4.6 itself but unfortunately they we could along with the help of that team also we were unable to fix that issue.

00:04:46 Amsuman

So we they were focusing all their support for the new packages for.net, Maui. So we had to switch. We were we had two options, one was moving to native apps, one for Android and iOS as well and the other was switching from Xamarin to Mobi. So considering all the dependencies and talking with the partners about their.

00:05:05 Amsuman

Priority support for MAHI we considered Mavi might be the best way going.

00:05:10 Amsuman

Ahead, given we were already on Xamarin and we will receive latest package from all the partners.

00:05:17 Matt

Well, that makes perfect sense.

00:05:18 Matt

And you know, eventually you might have to do it and that that I like. I like the idea that Google made you do it. That's that's the first time I actually heard heard that reason next week. How about you? Does that, you mean you're doing the customers all the time? Has Google ever made anybody?

00:05:32 Matt

Else's upgrade.

00:05:35 Sweeky

Google, we're hearing a lot more of Apple is making them do it because if they don't upgrade next year onwards, they're gonna have issues publishing to the.

00:05:43 Sweeky

App Store, so yeah, it's been a mix of Google made me.

00:05:46 Sweeky

Do it Apple made me.

00:05:47 Sweeky

Do it. Yep.

00:05:49 Matt

Why not was just so like do you even remember the Xamarin numbering like we were talking amount was talking 4.6. I'm like oh, what was 4.6 everythingsbeen.net Molly lately? I I can't even.

00:05:59 Matt

Remember back you?

00:06:01 Matt

Know what what the Xamarin versioning was?

00:06:01 Sweeky

Well, it does if.

00:06:03 Sweeky

Yeah, yeah. No 5.0 with a couple of service releases is like the latest, I think German forms you can get right now. So if you are looking to migrate, not a bad idea to try and upgrade to five point. If you can just make sure everything is newest and then should make a migration to Maui easy.

00:06:20 Sweeky

But like, like we're gonna talk about now, even if you are unfortunately stuck on some older version, it's not that bad to migrate. So yeah, so.

00:06:28 Matt

So I'm sure what were some of the biggest benefits other than being able to work again with the latest versions of the Intune packaging that Google APIs needed. What were some of the biggest benefits though, that you've seen after the migration up to dot net?

00:06:41 Amsuman

Maui. Yeah. So one major benefit was we had support for the latest packages. All the nugget packages.

00:06:48 Amsuman

So which we were unable to upgrade before when we were in Xamarin. So that was one major benefit.

00:06:56 Amsuman

And considering migrating from Xamarin to more with the migration process having compatibility frameworks from Maui for XAML, whoever is migrating for Xamarin, that was one of the major benefit for the migration process I would say now not on the end product.

00:07:13 Amsuman

So and there were very specific new libraries that were introduced in Maui that were not there in Xamarin that we made use of that made our work easy. So one such thing was the Maui semantics. Umm.

00:07:28 Amsuman

Which was built on top of the Xamarin Ali features. So initially there were no screen readers or specific focus for elements that we were implementing using some custom methods accessing the native controls underlying the Xamarin controls. But the Maui semantic libraries made it much easier for us.

00:07:49 Amsuman

Removing all the custom code we were using before and it also enhanced the performance.

00:07:55 Amsuman

And coming we also coming to the UI rendering, so the Maui UI rendering was using much lower resources, much lower GPU consumption compared to the Xamarin app. So we had better API performance. We also had new cross-platform libraries.

00:08:15 Amsuman

Which initially we had to implement accessing the native controls and Xamarin on Android separately. But now we have few.

00:08:22 Amsuman

Additional libraries which which can work cross-platform and we can include a ton in our shared code.

00:08:29 Sanjana

Adding on to what Anjuman has mentioned, I think hot reload was another feature which was which was blocked on Xamarin by the Intune package Intune Library.

00:08:41 Sanjana

I think that is now working well.

00:08:45 Sweeky

Yeah. Yeah. I was about to say that these folks, because of like the needing to be on that particular version of Xamarin farms having to use a particular version of Intune. They were stuck in using. They were not able to get the latest and greatest and the best out of our VS tooling which coming to Maui has lit up.

00:09:06 Sweeky

All of our awesome features for them, so it's super exciting to see them being able to finally use all our you know, really great tooling. You know features like hot reload.

00:09:16 Matt

And so, sweetie, I want to hear your your.

00:09:20 Matt

From perspective on this one, when not just on the the admin app, but overall what are some of the biggest risks that you see our customers taking on when they do do a upgrade? Well, I want to hear for the M365 one, but overall to what are some of the biggest risks or the?

00:09:36 Matt

Blockers that people might encounter.

00:09:39 Sweeky

Yeah. Let me give a general overview and then maybe we can have MT65 team share some specifics. But I think the biggest risks people are looking at is the time it will like the time investment in doing the actual migration.

00:09:54 Sweeky

And the whole just health check on the ecosystem was another big one on on like Ohh will every all of these packages all these features I'm using? Are they all going to just you know work as is or will there be support for that in net Maui I think in recent days it's.

00:10:14 Sweeky

Than a much easier decision to make. The number of risks, risks and blockers are reduced in the sense that.

00:10:22 Sweeky

When it comes to the time it takes our we've been putting a lot of effort into our upgrade tooling. There's now a VS Visual Studio, windows integration of the upgrade assistant tool, so now you can use it on the CLI on Mac, on Windows, and you can use it from inside of Visual Studio itself. So there's a lot of investment.

00:10:41 Sweeky

Going into reducing the time it should take you to upgrade your app and when it comes to like the third party dependencies like I think every day I'm hearing about.

00:10:50 Sweeky

New package that's being, you know, they're adding dot and Maui support for. Just yesterday I heard about Localytics nowhasa.net Maui package. So yeah. So it's pretty exciting to see the ecosystem catching up. So I think those are still being considered like bigger risks. But I think the risk value on that.

00:11:10 Sweeky

Is reducing the MC65 team, do you guys want to share a little bit about, you know how you guys went about?

00:11:16 Sweeky

This vetting, you know, checking the dependencies, anything that you thought was particularly risky? Hint, hint if you want to talk about the Intune migration aspect.

00:11:27 Sweeky

Of the app.

00:11:27 Sanjana

Yeah, sure. Sweetly. So I think one major risk point was the Intune package integration. So the reason we moved from Xamarin to dot net Maui was.

00:11:28

Would be awesome.

00:11:40 Sanjana

In in June, had no longer was no longer supporting any updates to Xamarin, so it had declared end of life for Xamarin and we had no other options but to move away from Xamarin forms. So I think that was one major reason that we had to support our Intune customers and.

00:12:00 Sanjana

Yeah. So I think Intune package readiness was one major risk that you know we were.

00:12:11 Sanjana

Which would have blocked us. So I think integrating Intune right is a big challenge. We we got the beta version sometime around May. We tried integrating. We face a lot of issues, challenges with the MAM enrollment and you know in tune.

00:12:30 Sanjana

Along with Msal, integrating with M cell so that was another.

00:12:34 Sanjana

The challenge that we had with the Indian packet, so yeah, but we managed to with with the help of the Intune team, we managed the sale through and we were able to integrate it successfully and with with all the test cases passing with you know.

00:12:54 Sweeky

Yeah, yeah. I mean, a huge shout out to the Intune team.

00:12:58 Sweeky

I, like you said, they've been like their support with the M-65 admin app has been awesome like they were there to like talk about any issues like like you know Sanji just mentioned they gave them the early beaters to try and test and give them feedback. Yeah. So it's been like a super great.

00:13:17 Sweeky

You know.

00:13:18 Sweeky

Of core collaboration effort here, just to make sure that you know the Intune packages are working and the MC5 app was like a good test case to make sure that yeah it's it's doing what it's supposed to do. That's super great. Shuman was there any any risky or any any blockers that you were worried about during the migration process?

00:13:40 Amsuman

Yes, OK. So I can add to what Sandina said about the Intune package. So while we were migrating, we were looking at all the dependencies, all the nugget packages we were using and during our time of migration.

00:13:53 Amsuman

We were able to find.net sixand.net seven support for most of the external packages that we were using. The open source packages. So few of the internal Microsoft packages we were using, major ones were msal libraries, App Center packages and the Intune ones. So fortunately we already had support from.

00:14:14 Amsuman

Sal and App Center, so as Sanjana mentioned in Q.

00:14:19 Amsuman

Let's also work closely with us. Thanks for their help. We were able to get out the beta.

00:14:23 Sweeky

That's awesome. That's awesome. Just talking about migrating that authentication flow and like the Intune integration was it complicated? Was it like confusing or did the documentation like they shared with you, did that just work? How was?

00:14:37 Amsuman

That experience, nothing complicated, came up with the Msal library, so they almost maintained the similar.

00:14:45 Amsuman

The third similar flow, they try to maintain the exact behavior from Xamarin to dot net movie. Whatever package provided for that. So we didn't have any issues migrating the outflow.

00:14:57 Sanjana

Yeah, with Intune we did face a few challenges with the MAM enrollment library, the method and.

00:15:05 Sanjana

A couple of other issues where we were unable to actually log in into the app with Intune and Company portal, so I think we we managed to fix those.

00:15:15 Sanjana

And yeah, and all the other issues with the help of the Indian team. So I think, yeah, those were those were the major blockers and challenges that we had while integrating the.

00:15:26 Sweeky

Awesome. That's awesome. That's really great to hear.

00:15:30 Sweeky

I guess I just want to talking about just like you know migration process, so here we are, you guys have decided we're gonna take the jump. We're gonna do it. We are migrating what? Before you guys looked at like doing the migration manually, how was your experience using upgrade assistant?

00:15:49 Amsuman

Yes. OK. So initially from for the first very first step, we started with the upgrade assistant itself.

00:15:56 Amsuman

So it suggested upgrading to Xamarin 5.0 before migrating to dot net mode, but I tried both the flows directly updating from 4.6 and updating from to five and then tomorrow, but there were no differences. I noticed in between that. So I think we are good to use the.

00:16:16 Amsuman

Resistant even with the four point X versions.

00:16:18 Sweeky

We have good to know, good to know, yeah.

00:16:21 Amsuman

So apart from that, the major use the major benefits we had using the upgrade assistant to us, it made all the project file changes that we needed to runthe.net mall.

00:16:34 Amsuman

Yeah. So it renamed all the major namespaces from Xamarin to Maui and it it did a status check on all the dependencies we were using whether the latest and it upgraded them to the latest versions. If we if that was supported for net seven and it also gave a list of all the dependencies.

00:16:56 Amsuman

That were not supported in net Moji and it automatically removed those namespaces or the references to those.

00:17:04 Amsuman

Packages so though it missed a few like Xamarin Essentials was one which we faced issue like it was not replaced because afterwards going through update documentation we understood Xamarin Essentials was split into multiple Maui libraries so it just left it in place.

00:17:20 Sweeky

Right, right.

00:17:24 Amsuman

Not essentials. That was one thing and say our G pop UPS was there, it just removed that without any notice for the replace libraries. But that was really helpful. So instead of manually going through the entire code like we have a.

00:17:39 Amsuman

Considerably how big cold like going to each and file each and every file, renaming the namespaces and everything would be much harder. So whatever the upgrade is extended, we could like whatever namespaces it removed. We could just build up after that we were notified of all the errors.

00:17:58 Amsuman

You could find the replacement for whatever package it removed, either in open network or in the documentation.

00:18:06 Amsuman

And we were able to like get the app to work, at least to build and run like very soon after using the upgrade assistant.

00:18:16 Matt

Wow. So you would say the upgrade assistance did really?

00:18:20 Matt

Most of the grunt work for you. Most of the the busy work for you of getting it up and running, and then it was just.

00:18:26 Matt

A little.

00:18:27 Matt

Tweaking here and there on the side to make it actually get.

00:18:30 Matt

It going then.

00:18:32 Matt

Yes. Yeah. So what about the documentation that we have? Was that useful for the for the upgrade, the upgrading process did that, that'll help out.

00:18:40 Amsuman

At all. Well, so initially when we started the migration, the documentation was still evolving. So in mostly for the project changes, the file structuring and everything, the documentation was.

00:18:52 Amsuman

Be useful and coming to the native libraries that were migrated from Xamarin namespace to movie. So upgrade document had good details about the replace packages and what we need to move for. But one thing I felt we missed an update documentation is the replacement for the deprecated.

00:19:12 Amsuman

Other deprecated packages like RC, Pop.

00:19:15 Amsuman

That were open source.

00:19:16 Amsuman

Not provided by Maui. So those we had to find. Other than that the documentation was very useful for getting the app to build.

00:19:26 Amsuman

And run.

00:19:26 Matt

Well, good. That's good to know. And sweetie, that might have been the most polite answer in the world. The documentation was still evolving.

00:19:35 Sweeky

I was about to say that the MC65 team actually was one of the first few folks who, like we were helping.

00:19:42 Sweeky

And that is correct. It was part of when we were just getting started with putting the documentation together, putting the steps together. And I think they had this unique space of actually watching the documentation evolve. So I mean, I'm, I'm pretty sure Sanjay and Anshuman remember when the docs were just GitHub pages and like a GitHub.

00:20:04 Sweeky

Stage, which then moved over to turning into an official like OK, now it's on the documentation side and then like on the doc side then it's add, we're adding more things to it. Yeah. Like a huge shout out to this team also. They helped like the feedback they gave us on the documentation, we were improving documentation based on like stuff we heard back from them.

00:20:26 Sweeky

Also their app and we'll get to this in just a little bit. Custom renderers they mentioned how they were using quite a lot of them. So they also helped us like.

00:20:37 Sweeky

Understand how to like, sort of. We're still. We're still working on that custom renderer, you know, documentation how to migrate those to handlers, but it was a good exercise to just hear like how they're going about it and the questions and the issues that they faced. Yeah, so definitely yes. They saw and evolutionary version of the documentation.

00:20:58 Sweeky

And I'm still glad it was useful for.

00:20:59 Sweeky

Them so yeah.

00:21:00 Matt

I was. I was gonna make a joke that when they see the documentation evolved, they got a 40.

00:21:05 Matt

More air if he's in with it.

00:21:08 Matt

That's what they got. But but thank you, Saint John and Andrew, Amanda, for, for, for doing that and then you know that's how you get good documentation is that you have to go through and you do evolve with it when you have real mortal experiences to inform to inform it. So what other experience points have you?

00:21:26 Matt

Tweaky that have you learned through this? This isn't your first.

00:21:29 Matt

Show or not even the first podcast, this isn't your first upgrade experience with with customers. What other?

00:21:36 Sweeky

Yeah. So, yeah, no, I'd love to ask Sanjana and Samantha. Let's start with Sanjana specifically, we started you guys started with the Android app. So just curious on how it was to get like your Android project up and running. Did you guys have?

00:21:55 Sweeky

Any specific like issues, anything very like particular to Android that you guys had to fight with like Sanjana. Do you want to share anything any like weird Android API that you have?

00:22:05 Sweeky

Figure out we can also complain about custom renderers if you want.

00:22:10 Sweeky

But yeah, just curious to hear about that.

00:22:13 Sanjana

Yeah, sure. So I think a lot of issues that we initially faced with the UX, the US rendering when we migrated from Xamarin to Maui was kind of very distorted. Most of the elements on.

00:22:26 Sanjana

Our dashboard were blank. We were not able to see. Those are not rendering. So I think we started kind of not not on a very good note as things were all.

00:22:38 Sanjana

Distorted and not well rendering. I think one major issue that we had was with frames. So we have elements which are within frames and those frames are within another frame. So I think that was one major point and that's all across the app that we use frames.

00:22:58 Sanjana

You know predominantly. So I think frames support in Mavi was limited. So we had to figure out different you know compatible elements to to be replaced.

00:23:14 Sanjana

As a replacement for frames, so I think we we started with trying out box view shapes, borders and finally you know with the the closest replacement for frames was border. So I think that was one major issue that we faced with the UX. The couple of other things.

00:23:34 Sanjana

Where I which were blockers for our Android app was.

00:23:40 Sanjana

With with the UM main page settings. So uh, when we were trying to switch user or add a new user, when you go back to the login page and we try to log in with the new user we were seeing crashes. So I think that was an issue which was there with the flyout toolbar which sneaky and Shane.

00:24:02 Sanjana

Triaged and came up with a fix for that I think.

00:24:08 Sanjana

So yeah, that was the fix. Now that we have is in.isin.net anowwith.net seven, we are still using the workarounds and the yeah, the the third issue major issue that we faced was with the navigation library. So the model.

00:24:27 Sanjana

Stack a sync issue that we have, yeah.

00:24:29 Sweeky

Ohh yeah.

00:24:31 Sanjana

So that was one major blocker which with I mean without which we couldn't do a beta release. So we had to get it fixed and that was that was where again spiky really helped us with you know all the issues getting a fix for us in Maui. So right now that's again we have the fix in.

00:24:52 Sanjana

Net8for.net seven, we are using the workaround for the timing issue. So yeah, these were the major blockers or issues.

00:25:02 Sanjana

That we had seen.

00:25:04 Sweeky

Yeah, yeah. Also anyone listening this has been fixed. Thank you for this team to reporting us all of these like, you know, issues.

00:25:13 Sweeky

They have they.

00:25:13 Sweeky

Turned out to be actual like issues in Maui and the Maui team. Super supportive, they absolutely love the MC5 app team so they were more than happy to help.

00:25:24 Sweeky

Get these fixed.

00:25:25 Sweeky

With them. So we've had other issues. Some of them were back ported into net 7, some of them are only coming up in net eight. So there's workarounds that you use and you can use for now. And then these fixes are coming in for net eight. So yeah, we've had a lot of bug fixes that which were reported by the admin app, which has been fixed in net, Maui. So which was.

00:25:45 Sweeky

Super nice experience. Also I'm Sherman. Was there anything you wanted to share here? Any like big blocker or any weirdness in Android?

00:25:55 Amsuman

Yes, Vicky, so coming to the major risk we had major.

00:26:00 Amsuman

A work item we had was moving from renderers to handlers, but I'll come to that at at the end. So before that so some of the issues we faced during the migration. So on top of what Sanjana mentioned, so mostly like we just had one or two issues which were.

00:26:20 Amsuman

We couldn't find it on the open issues or closed issues on the GitHub. Apart from that most of the issues we found we could find the work around either shared by you or Shane. We were using that and everything was working fine.

00:26:38 Amsuman

And one other issue was a OT profiling, so that was one thing that was missing. So fortunately we had the profiles we created during the last stage of our Xamarin. So we were using the same profiles.

00:26:43

Ohh yeah.

00:26:58 Amsuman

And we could actually turn it on using the same profile.

00:27:01 Amsuman

But I in using at least using.net seven, we could not find any to create new profiles. So there was no support, but that was I think that is includedin.net. So users migratingusing.net eight should not face any of these issues or any of the bugs we face like most of.

00:27:09 Sweeky

Yeah, no. Yeah.

00:27:13 Sweeky

Exactly, yeah.

00:27:22 Amsuman

We found recently, like most of them, were fixed in net eight anyway.

00:27:26 Matt

OK, I have questions now.

00:27:26 Sweeky

Yeah, yeah. Go for it.

00:27:29 Matt

Yeah. So First off, we the M365 app.

00:27:34 Matt

Or the admin.

00:27:34 Matt

App is both.

00:27:36 Matt

There is both an Android and an iOS version, correct?

00:27:41 Amsuman

Yes, OK. Yes, yeah.

00:27:42 Matt

And and both were upgraded right?

00:27:45 Sanjana

We started with Android via to migrate in iOS.

00:27:51 Sweeky

Yeah. Then much further along with the Android target, the iOS one is in progress, yeah.

00:27:56 Matt

OK, good. And the Android was started specifically specifically first, just because of running into the Intune issues from the because of the Google API.

00:28:07 Matt

The the. Yeah. OK. OK.

00:28:10 Matt

Good. So I'm just making sure everybody understands cuz you know I I was a little confused too and.

00:28:16 Matt

And are we running.net eight with the Android app right now?

00:28:21 Sweeky

We not yet, I don't think we've tested it on the previews yet, although I think Shane did pull down their app and tried it locally on his machine and and nothing broke. Everything was working fine, but we don't have enough like we haven't like built built it against any other previews yet. My recommendation was.

00:28:39

I see.

00:28:41 Sweeky

Just to wait till like an RC comes out because the the it's part of their daily workflow not and want them to have to like mess around with their systems. A bit like too much switching between 7:00 and 8:00. So once we have a net eight RC out, I think we'll give it a shot.

00:28:52 Matt

OK.

00:28:58 Matt

Who would have thought? Sweetie, that.

00:29:00 Matt

You would play it safe, I don't know, but.

00:29:02 Sweeky

It's a production app, man, it's.

00:29:04 Sweeky

Not like my little sample app.

00:29:05 Matt

No, I was just wondering.

00:29:06 Matt

That's what I was thinking was like.

00:29:08 Matt

Whoa, this is.

00:29:08 Matt

Kind of. We're out there. We're not even at.

00:29:10 Matt

Our C yet, but OK, alright, good.

00:29:13 Matt

That makes sense now.

00:29:13 Sweeky

Yeah. Well, I think once we have RC out, I think it'll it'll feel safe enough to like, have I to go just because it's the migrations of the whole task altogether, right. You don't want to add too many more, right? You know variables into the mix is what I'd say. But yeah, no, like I said.

00:29:27

Right.

00:29:35 Sweeky

The workarounds, they know what the workarounds are. Everyone's been keeping track of it as soon as net aid comes in, go in, rip out all the workarounds and everything.

00:29:43 Sweeky

Should work as is.

00:29:44 Sweeky

So yeah, OK, they'll be exciting.

00:29:47 Matt

Good, good, good. Now, now I'm clear. Now I'm clear on everything good.

00:29:51 Sweeky

Yeah. Yeah, no, for sure. For sure. Yeah. No, I think I wanna make sure we spend some time.

00:29:56 Sweeky

Talking about the.

00:29:57 Sweeky

The the the big topic which was custom renderers I'm sure, and I think you had done quite a bit of the custom renderer migration. Do you wanna share some of the learnings? Maybe that you had for those?

00:30:09 Sweeky

Other people who are migrating their apps right now.

00:30:11 Amsuman

Yes, we can define.

00:30:14 Amsuman

So yeah, so we were using like decent number of renderers for almost every control Xamarin control we were using. So that was the main hard task for us migrating the net movie, migrating all of them to handlers. So luckily we provided.

00:30:33 Amsuman

With compatibility renderers which work exactly like the renderers and we could directly use them for some controls without having to move to handlers so that we can go into production as soon as possible, though it affected the performance like slowly, we'll be migrating everything to handlers.

00:30:52 Amsuman

Making it more efficient, but the compatibility framework really helped us because we were actually blocked. We couldn't make a release from our Xamarin code base, so just to save some time we were using the compatibility frameworks initially. So one major change we observed from moving renders to handlers.

00:31:14 Amsuman

Handlers are much more efficient and the performance both in like considering the performance, it was much faster rendering the control compared to the renders, but at the same time I would mention the compatibility renderers were also affecting the performance compared to the Xamarin renders so.

00:31:33 Amsuman

One suggestion we would say, unless anyone who is migrating from Xamarin to movies in a hurry to get out for prediction because of some issues, similar issues we have.

00:31:43 Amsuman

So I would say do not use the compatibility renders because that would just be a double work moving from renderer to compatibility renderer also needs some fixes, but that's a very minor work then moving to handlers. It would just double the effort so directly just remove the renderers, make the app build and run. Obviously like there will be UI issues.

00:32:04 Amsuman

Use, but try fixing those directly using the handler architecture instead of using the compatibility renders, so that would actually save a lot of time. Now whatever the renderers we were using, whatever the methods it had, everything was almost in say we were using effectively 2 methods in.

00:32:24 Amsuman

Custom renders on element change on element property.

00:32:27 Amsuman

So coming to handlers, all of this is broken into multiple methods. You can specifically map a property, use mappers. You can use the you can access the native control, so all the code we had in the single method in custom renderer we were using the similar logic but we just had to put it in different places.

00:32:48 Amsuman

So exactly map to which property that logic applied we had to map to subscribe to that event using the mappers. So on element changed actually created a created a native control, set all the properties. So that was happening in the render.

00:32:55 Sweeky

Right, right.

00:33:05 Amsuman

But still that I think that was also affecting the performance lattice coming to Maui. We can directly access the platform control and make the changes to that. So that is one thing that enhances the performance and on property change used to get called for every property change and the element it used to go through.

00:33:23 Sweeky

That's right.

00:33:25 Amsuman

Every code on element property change like, even though that was not relevant for that specific property. With handlers, we could just map that property to a specific method, so only that is invoked in that properties.

00:33:38 Amsuman

So that was one major advantage we observed with handlers and coming to 1 issue we face like initially the renderers both the Xamarin renderers and the custom. Sorry the compatibility renders framework, they use the Android styling from App Compact. So say for buttons.

00:33:58 Amsuman

Labels etc. So now coming to handlers or the Maui controls as such, by default they are using the material themes so initially.

00:34:09 Amsuman

So for like most of the controls, the materials team app compact themes, there was not much differences. So two major ones we observed were labels and buttons.

00:34:22 Amsuman

So that's a complete change like irrespective of renders and handlers from Xamarin to movie, we observe the theme change from app Compact to material. But if we use the custom renders it would still refer to the app compact themes by default. So you would get a similar experience as you had in Xamarin. But if we are not using any renderers or.

00:34:41 Amsuman

Hey we are using handlers so that.

00:34:43 Amsuman

Would be a new.

00:34:44 Amsuman

We'll the team. So I think we'll have to change our controls according to those teams to replicate the UI behavior. So some like some for some who are migrating, so there might not be any difference for some like because of any custom say spacing or layouts or alignments they're using that might cause an issue.

00:35:06 Sweeky

Good to know. Thanks. Yeah, thanks for that. Heads up for everyone listening. Yep.

00:35:12 Amsuman

So that was the main reason I was saying like unless you are in a hurry, try to directly move to.

00:35:17 Amsuman

Handlers instead of the customer and moving to compatibility renders and then to handlers.

00:35:23 Matt

Yeah. So I was just wondering what were just like an example of some of the controls that were being rendered as a custom renderer. What were you doing as a custom renderer just as as an example?

00:35:34 Amsuman

One major thing we were doing using the custom renderer was accessibility features. So as I said, we did not have semantics.

00:35:43 Amsuman

In Xamarin, so for a specific control, if we needed a more.

00:35:49 Amsuman

More effective control on the accessibility features we were doing all that in the custom renderers, say by default or for a control, say for buttons control we needed some action when a property changes so that we were doing in renderers.

00:36:03 Amsuman

Any colors or styling any like when a property changes. If we need the colors or styling.

00:36:10 Amsuman

Change. We were doing those in renders.

00:36:12 Amsuman

OK, say, uh, any animations we needed for search bar, so those were handled by the renders itself, yeah.

00:36:18 Sweeky

Yeah, it's. Yeah, there. Yeah. Just to give a little bit more context too. This is like a very this is a very like the the code base is kind of old. This app has been around for quite a while, like a lot of the UI was built actually C only like C.

00:36:38 Sweeky

1st so there was. That's why the.

00:36:43 Sweeky

A lot of the controls were written with. They ended up using a lot of custom renderers for that just to like just do basic. You know, setting up the control and styling it, making it look like they wanted to make it look also because they also have some like very particular UI requirements.

00:37:02 Sweeky

I will say, though, I think, Anshuman. Correct me if I'm wrong though. So the the in in the Xamarin version of the app. Accessibility is a huge requirement for this team and they've done an excellent job getting, you know, accessibility ratings on this app with the Xamarin form.

00:37:18 Sweeky

This version, but like we mentioned earlier, since they were stuck on Xamarin forms 4.6 a lot of the accessibility features were pulled into Xamarin forms five. So the only way this team could access a lot of those was through custom renderers and we had to put in a lot of like work around code for them. And so this is where correct me if I'm wrong, I believe the migration to Maui.

00:37:40 Sweeky

Should have helped significantly, especially in the accessibility space, because they are able to now actually get all of the default accessibility features that were lighting up in all of the Maui controls, and they don't have to like you know.

00:37:53 Sweeky

Implement them on their own. Have to use any like go down to the custom renderer level to do at least a lot of it. If not all of it. So anshuman. Correct me if I'm wrong, but I'm guessing getting to all of the accessibility features now must must be easier usingthe.net Mai controls.

00:38:10 Amsuman

Yes, Vicky, you are right. So all the custom code we had custom classes, custom extensions we had like we are not using like we are not using any of those right now. So just the semantics library or the enhanced.

00:38:24 Amsuman

Accessibility libraries that Maui provides, like we are able to replicate the exact same behavior by just using this.

00:38:30

Awesome. Awesome.

00:38:31 Amsuman

Wow. So though we are using like few we are setting few accessibility properties in the handlers right now as well. But we're not using any custom code. We are just using the semantic like this that that's just for if you need any default behavior instead of just configuring it every time we create that.

00:38:50 Amsuman

Role and setting that.

00:38:52 Sweeky

Matt, did he blow your mind with all the awesome accessibility features we have now in Hawaii?

00:38:56 Matt

You know what? That's super important to have, right? And it's even better that they're easy to get at right cause.

00:39:03 Sweeky

They're absolutely, absolutely.

00:39:04 Matt

You're not going to put men if it's hard to do right. And unfortunately, a lot of times accessibility is back of mind. As bad as that sounds, it is.

00:39:10 Sweeky

Yeah. No, for sure.

00:39:12 Sweeky

Sure. Yeah. And I'm just like if just some, I guess if anyone is curious like trends we're seeing with a lot of customers is like this was a great example. There was a lot of extra code that had to be written, extension methods and things like that to just have accessibility support in Xamarin forms, but now with.

00:39:32 Sweeky

Net, Maui with a lot of this coming out.

00:39:33 Sweeky

Of the box and to I will add using this new handler architecture it is. It is significantly easier.

00:39:41 Sweeky

Now to add just basic accessibility features and extend them to the degree that you require, it's not as crazy as it was before. It's much much simpler and just talking about like the.

00:39:54 Sweeky

Lesser amount of code being used, I was just talking to another customer and they were telling me how in the migration.

00:40:02 Sweeky

Process and they were also kind of doing like an audit of all their custom renderers because they reached that point to like, OK, now we have to move over to handlers. They actually found out that they of they had like maybe 12.

00:40:15 Sweeky

Like custom renderers and they were not even using four of those, they just had those code files as hanging around in their app and they were just like we just realized that we don't use this anymore and we didn't even know that. And so it was a good tech deck, clean up situation going on over there. So yeah, I highly recommend.

00:40:34 Sweeky

In this like what Anshuman suggested as part of the migration process, as much as you can.

00:40:39 Sweeky

Just, just just.

00:40:40 Sweeky

Pull that Band-Aid, go straight to handlers. You never know. Like it. It can be as it can simplify your handler code. Your your renderer code. Maybe you don't need it anymore, because maybe that feature is now available to you in net, Maui. So it's a good exercise to do right now. You know, go through it in your apps. Yeah.

00:41:01 Matt

And that's how we kind of touched on before we were talking with the Polaris people in our on our previous our customer upgrade update upgrade migration path was it when you're updating upgrading whatever we want to call this process, it's a good time to actually go through and do an inventory of your code and kind of just.

00:41:18 Matt

Do some basic.

00:41:20 Matt

First date on it I guess and pull that Band-Aid as he said sweetie and.

00:41:24 Matt

Just fix things that have been hanging out for a while that maybe you don't even know are there. Maybe you do know are there. Just just take care of it. You're in there anyway. So now's the time. And a lot of times things come out way better so.

00:41:38 Sweeky

Yep, Yep. Absolutely. Absolutely.

00:41:40 Matt

I'm sure, man. What we're.

00:41:42 Matt

All right, you hit F5 or command enter depending on what operating system you're building on here. What happened? Were there any major UI changes? The app is up and running.

00:41:55 Matt

What did you think? How did it look the very first time?

00:41:57 Matt

You had it running and and it deployed. What did you think?

00:42:01 Matt

Any major UI changes you had to go back and make or were you happy the way it looked and like were?

00:42:07 Matt

I guess what was your feeling, did you did?

00:42:11 Matt

I'll leave it there. How did you feel the first time you saw it actually up and running?

00:42:13 Amsuman

Yeah. Yeah. So yeah, so initially the right after we were able to build and deploy the app. So it was a completely different UI. Everything they started like because that was because we were not raising the renders initially. We were just using the controls.

00:42:33 Amsuman

So the UI was distorted a lot. There were different issues in the spacing, so I think that.

00:42:39 Amsuman

Was a change made by the mall itself. A few controls like grids, tags, etc. The default laying itself changed, so I think that everything all of that was included in the upgrade documentation back then itself.

00:42:54 Amsuman

So spacing alignments were the major issues. So few control like few properties that we were setting using the renderer. So app was crashing, the functionality was causing few issues. But right after we used the compatibility renders so it was everything was pretty much fixed like.

00:43:14 Amsuman

Not entirely, but most of the issues we were saying I think that would be similar in the Xamarin app as well. If we remove the.

00:43:23 Amsuman

Renders that, so I think except the spacing issues and the Android styling I mentioned that controls change from app combat to materials. I think everything else would remain the same.

00:43:35 Amsuman

Unless the control is deprecated or say whatever Sanjana was talking about, frames moving from frames to borders, that was one thing. So one more thing was stack layout. So initially we had different alignment options so but if we needed like whatever stack layout.

00:43:55 Amsuman

Was providing in XAML, so for the alignment that was not exactly possible.

00:44:00 Amsuman

In Xamarin, sorry in net mode because they were pushing for that specific requirement, we moved to crit and we moved from apps relative layout staff, solute layouts. So unless those those changes were made that was made by the net Mau itself just for pushing for better performance or.

00:44:21 Amsuman

Better controls. Everything else almost remains the same like, except the spacing for few control.

00:44:28 Sweeky

Nice, nice. Sanjana. Anything outside of like the frames that you talked about? Was there any other like you? I think you you remember that was different or any that was like hard to change or hard to fix rather.

00:44:42 Sanjana

I think 1 issue which I remember was with the line break mode.

00:44:48 Sanjana

I think with.

00:44:50 Sanjana

Break mode set as tail truncation. It was not taking up the Max line attribute, so that was again I think a bug which was fixed by Maui and.

00:45:02 Sanjana

Yeah. So that's that's one minor issue which I remember apart from the frames control and the renderers.

00:45:09 Amsuman

So yes, Vicky, so initially I would say we were facing few issues, not that it was perfectly everything was working perfect. But I think like I think like whatever issues we are facing right now that none of them are open, we either have a work around or it was pushed to dot net.

00:45:27 Amsuman

Right. So I think whoever is migrating now should be good in a good state.

00:45:31 Sweeky

Awesome. Yes, we did it.

00:45:34 Matt

I'm sure, man, I'm gonna put this one out to you to to kind of wrap all this up into a bowl into a with with a bowl. Any tips and tricks that you want to give our listeners as they embark on this journey or as they are on their journey to upgrade their apps to dot net Maui.

00:45:49 Matt

That they that you should think that.

00:45:51 Matt

The top two.

00:45:52 Matt

Points that they should drive home that you want to drive home with our listeners and what they should be doing are keeping in mind as they go through.

00:45:58 Amsuman

This process with their own apps, yeah, definitely so one the the first priority I would say is use the upgrade assistant. Do not try it manually.

00:46:09 Amsuman

Because that would be very helpful. It would ease out the migration process a lot. Apart from that, I think like most of.

00:46:20 Amsuman

Take a cut like other thing I mentioned previously, a tie to directly migrate to handlers. That is going to save a lot of effort.

00:46:30 Amsuman

It is going to enhance the performance as well for your app. So those are the two points that I would prioritize over others. So apart from these.

00:46:39 Amsuman

I would say like where one while we are migrating this we might like there might be some tech date that is still that was not possible to clear with the Xamarin. So I think that we can look at.

00:46:57 Amsuman

How we can clear that with the new Mavi technology? So maybe something that is deprecated your migrating to the Maui even though that is that support is still available. So Maui provides new methods, new functionalities for many such things. So I suggest like directly.

00:47:17 Amsuman

Like removing those deprecated methods or packages going to the new functionalities provided by movie using those directly, so that would directly enhance the performer.

00:47:29 Amsuman

And make your app future proof.

00:47:33 Matt

Cool. And then so Joanna, do you have anything else to add to that tips and tricks for our listeners as they go about in on their on their upgrade journey?

00:47:42 Sanjana

I think I'm Truman has majorly covered everything, so I think I will just come back to the frames issue again like that particular control element is kind of deprecated in Maui. So I think moving to border or any other.

00:48:00 Sanjana

Control like box view or shapes would be helpful.

00:48:03 Sanjana

There, apart from that, I think the yeah, the sync issues with the main page when when you're starting the app that is already fixed in net. So I guess people who are migrating with net eight will not see any issues.

00:48:23 Sanjana

There and yeah, one.

00:48:26 Sanjana

Another thing which we saw with the web view rendering was with the assets folder being created in Maui which is not happening earlier in Xamarin. So I think that is something you know people might need to take care of that we have as it's folder being created now with net Maui.

00:48:46 Amsuman

Yeah. Thanks and sorry. Yeah, I missed to mention one.

00:48:51 Amsuman

Point. So this was one exercise we took up in the very early stages of migration. So even though the upgrade assistant will do the namespace renaming and everything, so before we use that, I think it's better for anyone who is migrating. Just list down all the dependencies, all the new get packages they're using.

00:49:12 Amsuman

Just for look at the latest versions of those, see if it is that is supported in.net movie.net7.net 8. Otherwise what would be?

00:49:22 Amsuman

The better alternatives we can find many in the community toolkits for a specific use case, so try to make a note of that. So then once you upgrade anything that is missing, you will be able to. That will be easier to fix using those details.

00:49:40 Amsuman

And one more thing, if you are migrating on both Android and IIS.

00:49:47 Amsuman

I think the new Maui project structure is very well refined compared to Xamarin. So we can have all the assets, all the resources in the common project itself now. So in before this we we were having different matches with different resources for both Android and iOS and we had to specifically mention those to be included in the project.

00:50:07 Amsuman

I will send everything, but I think now my we.

00:50:12 Amsuman

By default, adds anything based on the folder structure. That is very well defined, so that can be made. Use.

00:50:17 Matt

Of alright. And it's squeaky. What are your words of wisdom that you want to leave everybody with?

00:50:26 Sweeky

Just be inspired by by them, like by this team. They have a very complex app and they just took it on head on and they did it and I think they are.

00:50:38 Sweeky

Enjoying the benefits?

00:50:40 Sweeky

Of living in the net, Maui world, so yeah.

00:50:44 Sweeky

You know, they shared great learnings, great, you know, insights and heads ups.

00:50:51 Sweeky

And yeah, the documentation is getting better, the tooling is getting better, there is no better day than today to migrate. So yeah.

00:51:01 Matt

Yeah, it's hard not to be inspired by even. It is a very complex app. It's an app used by thousands of people, 10s of thousands of people, if not more. And.

00:51:12 Matt

Yeah, it's gone from.

00:51:15 Matt

It's been around, as you mentioned, sweet here forever. Now it's up up to date and with itwith.net, Maui and running the latest and greatest so.

00:51:22 Matt

Congratulations and thank you very much, Sanjana and I'm Schumann and sweetie. You too. You were definitely involved and all our documentation people and obviously the project team to helping out and getting everything up and running. So amazing work.

00:51:37 Matt

All right, so that's this episodeofthe.net Maui podcast, so feel free to follow us everywhere you follow podcast. Follow us more than once, bump up our numbers. We're on iTunes. We're on Spotify. Where so we can. Where else can you follow podcast? Because we want to be followed there.

00:51:52 Sweeky

Yeah, everywhere. Yeah, Apple podcasts. Google podcast.

00:51:58 Matt

That's right, Google alright everywhere. Alright. Thank you, Sir. Joanna. Thank you. I'm Shannon. We really appreciate it this week. You as always. Thank you so much. And this is the.net Maui podcast.

00:51:58 Sweeky

Yeah, anyway.

Download Transcript