Episode 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.
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.