Xamarin Forms: it works
sharpnado.com
sharpnado.com
Not to mention the need for additional components such as horizontal scroll, carousel view etc.
If you look at Flutter, most of this app could be done with just the Flutter SDK. Haven't really played much with RN, so not sure how that compares.
I think it's a reasonable strategy to say "hey, we're not going to be able to solve all the problems, and it's probably not the right way to spend our time even if we could. What we will do is make integration with other solutions straightforward so we're not the bottleneck". Making a strategic choice not to be the bottleneck seems like a good call regardless. That said, the things I've found to be a hassle are things like getting OpenGL working on UWP from C# (tractable, but that's really not how I want to be spending my time).
But yeah, wow what a difference it's made having Microsoft throw their resources at it. My current codebase lets me build for iOS, Mac & UWP at present (I'll get to Android at some point), with really not very much effort. Being able to debug on the Mac version rather than waiting for iOS deploys is just about enough to repay the time investment on its own. I'm anxiously awaiting them getting their web platform support up to snuff -- I'd dearly love to never have to JavaScript again. :)
Given past experiences, I am sceptical of using languages not part of platform SDKs for production code.
When I do use such third party languages then the eco-system plays a major role in the decision, and for .NET vs a language clinging for survival, the decision is obvious if I care about having the same code in production in the next couple of years.
As for Dart, its similar to C# in a lot of ways and certainly is gaining traction. I didn't have any difficulty writing Dart code.
When comparing programming languages one always must look beyond grammar and language semantics.
Flutter is trying to be Dart's Rails, it remains to be seen if it will actually accomplish it.
How are pure Ruby projects doing in the market outside plain Rails apps?
I took them a long time to restructure the project after Jason Smith's leave of absence, but I think David Ortinau is doing a stellar job and the GitHub project is an exemplary open source project. It needs more community involvement, and the F100 stuff you helped drive was very, very good. Next to better components and adding more resources this is another challenge for the project at hand.
I agree it is a bit of a Linux on the Desktop story, "next year", but taken the task at hand (so many platforms), the pace is not that bad. In the mean time I can produce good apps with a few extra libraries, so what...
I put a lot of effort into XF, and at the time, it was the best x-plat development environment (for my usage) around. But Flutter has really highlighted its shortcomings and I don't hold much faith that Shell is going to bring it to the front again.
> SkiaSharp, Lottie, and native platform code
So a healthy ecosystem and easy bridging to native is now a downside? This is like blaming React Native for having a useful ecosystem of components.
But this article is saying look how awesome XF is at all these pretty animations and functions, which are mostly done by other components or custom native code.
And they aren't quick and easy to implement either. But you then compare it to Flutter, and you could do most of it right off the Flutter SDK.
To me it highlights where XF lacks in a cross platform development. Especially when you think of the knowledge you have to know to bring in to use all these components. ActionScript, Skia, and each platforms native API usage.
But that’s what every platform does. You only notice it when it doesn’t work.
I often get the feeling that what has happened in "the last year" is that the developer saying it has gotten to know Xamarin well enough to avoid the warts.
In the morning, visual studio crashed first thing with a ‘non-fatal’ error.
Then I was making a bug fix in a Xamarin.Forms app - changing a string in the UI. I deploy the app, but the change isn’t there. So I clean and rebuild. Then I redeploy. Change isn’t there. I uninstall the app from the simulator. I delete the output directory. I redeploy - still the change isn’t there. Xamarin was deploying cached packages and I had no idea. Imagine verifying a bug fix or change, which causes a crash, and not knowing because the updated package never gets deployed.
Every once in a while I accidentally double-click a xaml file - big mistake. I get to watch visual studio turn white and not respond for about 35 seconds - time to check email and try not to break something.
In the afternoon, I wanted to connect to my mac while doing work in the background - connecting to the Mac takes ages. Unfortunately that’s not an option - connecting to a server is a modal operation. I have no idea why and it frustrates the heck out of me. Even worse, they have flow problems. If you fail to connect to a Mac, you have to close and re-open the dialog before you can add a new one. You have to do this every single time Visual Studio crashes. Visual Studio crashes at least 5 times a day with even moderate use. Xamarin is a big culprit for the instability, but Visual Studio has its share of fuckups, including mainstream releases that will just stop you from running unit tests until they ship a patch. Or just break your build altogether.
Xamarin Forms is uniquely frustrating because it, for the last ~12 months of my active use, always had a bug in the latest version that affects my product. Every time I upgrade, one bug gets fixed, but another one is added. Their QA is nonexistent and it really shows. And it’s not little things- think controls just don’t render on some platforms, or toolbars are busted on iOS. The newest version has some long-awaited features, but I’m afraid to upgrade. Visual Studio is also really bad nowadays - I really, really, really avoid upgrading; it is usually painful and more than once I’ve had to totally uninstall and reinstall.
The build system is a nightmare. There’s a lot of complexity in Forms and a lot of room for things to go wrong. People come to me with build errors all the time, and the first thing I say is, did you hit the green button again? Because failing once doesn’t mean there’s a problem with your app. There’s all sorts of nonsense that happens with caching, msbuild instances interfere with each other - I’ve had to painfully run builds in serial because yes, running msbuild on two projects simultaneously will break both.
I’ve got a lot more complaints but I’m tired and want to keep it brief.
Xamarin.Forms is (and I recognize that much of the pain I described is really problems with other supporting tools) painful enough that I wonder if it’s worth the benefit of writing C#, and this is coming from a militant C# fanboy.
I was really hoping the Microsoft acquisition would lead to more robust QA efforts, but clearly not.
Also has the benefit of being substantially the same on Windows and Mac, so you can use a Mac directly for Mac / iOS development and everything works pretty much the way it did on Windows. VS on Mac is unfortunately pretty dissimilar to VS on Windows.
If this sounds cumbersome... it is. I find it workable right now but I'm regularly annoyed. Build + deploys fail when I fire them off too soon after changing an .axml file. Builds fail as a rule, not an exception, when there are Xamarin or Android SDK updates. iOS is actually mostly fine, except for the hell that is the designer. All in all none of these things are show stoppers, but I don't think I could wholeheartedly recommend Xamarin for new apps.
But at least Xcode doesn't crash any more.
I think it will make quite a difference; I know it does for me as I use it for everything, but within the confines of what I could implement in my free time.
Wish Krueger [1] would open source his interpreter as his has many bugs but far far less than mine and it could be a good effort fixing bugs and getting a better project on the iPad at the same time.
A propos ; Continuous is great for playing around with Forms and Xamarin iOS in a fast and responsive environment on an iPad Pro with keyboard. For just getting the screens perfect fast it is pretty good. Not sure why he doesn't have XAML support (or he has but I could not find it so I assumed not) as that is pretty trivial to implement.
[0] https://www.mono-project.com/news/2017/11/13/mono-interprete...
If JavaScript is involved it is either a mobile web site or Ionic.
Otherwise Xamarin is the usual option when not going native or betting on JS.
But I abandoned it because its too big of a project for a one person side project.
Doing UI work in Xamarin is incredibly verbose while at the same time being underpowered. It certainly does not just work. To give you a better idea of the real state of Xamarin we are JUST NOW getting the ability to underline text https://xamarinhelp.com/hyperlink-in-xamarin-forms-label/.
But Xamarin is chock full of other gotchas. A few off the top of my head:
- there is no real file picker (even third party) let alone a great file picker that can pick files locally and remotely (like from google drive).
- there are a surprisingly limited number of controls available and native or not they often look terrible.
- build times average one to two minutes and the debugger doesn't work about 50% of the time.
- a lot of APIs that you think are supported are not. for example, they say System.Drawing is supported but it's not. So what you end up doing is writing custom implementations for each platform.
I could go on but suffice it to say developing in Xamarin is not something that just works. It ONLY works because developers spend a great deal of time making sure that it works.
As an aside, for my next Xamarin project I am considering doing the UI in a WebView while using C# as the back end. It would be more like a web application than a Xamarin application which would hopefully mean a nicer UI while still being able to leverage C#.
Why not Xamarin + MvvmCross + native UIs? I just finished an iOS + Android app like that and while learning Android UIs on the go was a bit painful (build times are longer when you modify resources), I had no issues except for Visual Studio for Mac quirks.
I have to ask, why not just do a mobile web app?
In my particular case I do need some C#/Backend functionality that I don't want to have to call a server for.
No, It's a steganography application so I don't want to do any of it in a browser which I imagine could be an attack vector.
Doing everything in JS is so common now that I didn't even think about hiding the source code. I haven't considered it as a factor in a long time, but I do remember it being considered somewhat of a disadvantage for Javascript around 2010.