Great article, we have a similar story but only used Xamarin for 1 iOS app. If I had option to go back I would not chose Xa marin, we would have used native. Main reason being that we now need to add 3 SDKs to our app and none of them are supported in Xamarin, it seems it will be cheaper and more predictable to rewrite to native than implementing SDKs. Porting libraries to Xamarin is possible in theory but in practic…
Some thoughts after (almost) a year of real Xamarin use
11–20 of 113 posts
Re: Some thoughts after (almost) a year of real Xamarin use
#12Now that we are at it, if you have experience / recommendations on developing for multiple mobile platforms please share it here. As far as I understand it, if you are big and have the resources, your best bet is still to develop separate native apps for each platform. Right?
Did a project at work with Cordova, it works, but it is only usable for CRUD type of applications.
As for hobby projects, a few multimedia ones with SDL, which was ok since nothing more was being used besides OpenGL and touch input.
Tried to use Qt/C++, only to discover it kind of works, but even with all these years of talking about mobile support, Qt is pretty raw. Lots of native API wrapping is required or only available in the commercial version.
Xamarin is quite appealing, and even with the usual HN complaints about their prices, they are actually not much different from other commercial solutions for the mobile market.
Personally, I am using C++ for portable logic, together with the native UIs in Java, C#, C++/CX. However due to the pain it is to use the NDK, specially now that Google dropped the ball, I am thinking about focusing on just one platform.
If I would be doing this at work, maybe Xamarin would be the solution to go.
Re: Some thoughts after (almost) a year of real Xamarin use
#13Now that we are at it, if you have experience / recommendations on developing for multiple mobile platforms please share it here. As far as I understand it, if you are big and have the resources, your best bet is still to develop separate native apps for each platform. Right?
I use Unity3D to develop for multiple platforms and can't recommend it enough -- it is a 3D game engine so it may be too heavy for some applications, but it can do anything you want it to. Everything is written in C#/.net on your end, Unity cross-compiles to other platforms. Unfortunately, the built-in IDE for Unity is MonoDevelop, which has all the problems Xamarin does, You don't have to use Mono though, you can us…
Re: Some thoughts after (almost) a year of real Xamarin use
#14I've been working for half a year with Xamarin Forms. I Think using Xamarin is the way to go, there is no need to re-code something for 3 different platforms when you can just have a shared codebase. Tools like Cordova and Phonegap don't work. They produce a very crappy experience that doesn't use the native OS functions, doesn't look and feel native, feels slow and has many bugs (for example they can't use the hardware back button).
So Xamarin can create real native apps, which is a HUGE advantage over Cordova/Phonegap/others, but there are also serious downsides:
1) It's BUGGY. Many components have bugs, and the code often behaves in very very weird ways (I had exceptions not being caught by catch blocks for example), many debugger functions don't work properly with mono (like locals) and very, very often exceptions are thrown without ANY indication what caused them or where they occurred exactly.
2) You a limited in the features you can use because it's a wrapper (as mentioned in OPs post).
3) Documentation sucks and is very limited. It's getting better (mostly because of StackOverflow), but it's still not sufficient.
4) It has XAML which is very nice combined with MVVM, but the XAML implementation sucks. It doesn't have intellisense and it's just generally very awkward.
I don't think the 'big cost' is a valid argument against Xamarin. If you can develop 1 app for $40k where you would normally have to develop 2 or 3 apps for $30k each, that's a BIG win and Xamarin's costs are negligible.
Re: Some thoughts after (almost) a year of real Xamarin use
#15Earlier quoted context omitted.
I wonder if RubyMotion is much better when it comes to memory management. According to the website, RubyMotion objects are platform native objects (ObjC objects for iOS/Mac, java objects for Android), so each platform's native memory management scheme applies, rather than having two GC's or GC plus reference counting. I'd probably use RubyMotion for an upcoming project at work if it had a port to WinRT for Windows un…
Judging by the docs [1], RubyMotion does indeed not seem to use a GC on iOS but instead relies on ref counting, reusing auto-release pools. That means cyclic refs are an issue. You have to explicitely use weak references throughout your code. They are not on Android, where RubyMotion uses the Dalivk/ART GC. So, your cross-platform Ruby code has to deal with two different types of memory management systems. I'm not su…
Re: Some thoughts after (almost) a year of real Xamarin use
#16Re: Some thoughts after (almost) a year of real Xamarin use
#17Great article, we have a similar story but only used Xamarin for 1 iOS app. If I had option to go back I would not chose Xa marin, we would have used native. Main reason being that we now need to add 3 SDKs to our app and none of them are supported in Xamarin, it seems it will be cheaper and more predictable to rewrite to native than implementing SDKs. Porting libraries to Xamarin is possible in theory but in practic…
I've often been surprised at how easy it is to create bindings to libraries written in Obj-C even if no one else has before. Usually it requires extracting the compiled library from the framework, and then translating each declaration from the library's header into the C# binding definition. In many cases it's a couple of hours work (or less).
That said, libraries that are provided as source files, with the instructions "just copy them into your project," can be incredibly frustrating. Our designer would love to use github.com/MengTo/Spring but I have yet to find a way to use it in Xamarin easily.
Re: Some thoughts after (almost) a year of real Xamarin use
#18Now that we are at it, if you have experience / recommendations on developing for multiple mobile platforms please share it here. As far as I understand it, if you are big and have the resources, your best bet is still to develop separate native apps for each platform. Right?
I work in enterprise world, as such, my mobile development experience is mostly on side projects, across all the three major platforms. Did a project at work with Cordova, it works, but it is only usable for CRUD type of applications. As for hobby projects, a few multimedia ones with SDL, which was ok since nothing more was being used besides OpenGL and touch input. Tried to use Qt/C++, only to discover it kind of wo…
Re: Some thoughts after (almost) a year of real Xamarin use
#19Earlier quoted context omitted.
Judging by the docs [1], RubyMotion does indeed not seem to use a GC on iOS but instead relies on ref counting, reusing auto-release pools. That means cyclic refs are an issue. You have to explicitely use weak references throughout your code. They are not on Android, where RubyMotion uses the Dalivk/ART GC. So, your cross-platform Ruby code has to deal with two different types of memory management systems. I'm not su…
Doesn't seem like a problem to me. The occasional weak reference to break cycles wouldn't hurt anything on Android, would it?
Re: Some thoughts after (almost) a year of real Xamarin use
#20Great article, we have a similar story but only used Xamarin for 1 iOS app. If I had option to go back I would not chose Xa marin, we would have used native. Main reason being that we now need to add 3 SDKs to our app and none of them are supported in Xamarin, it seems it will be cheaper and more predictable to rewrite to native than implementing SDKs. Porting libraries to Xamarin is possible in theory but in practic…
First of all, in December we released a new tool called Objective Sharpie that can automatically bind Objective-C libraries into C#:
http://forums.xamarin.com/categories/ObjectiveSharpie
If you're skilled enough to build the Objective-C library, then you'll be able to use Objective Sharpie to create a C# binding. We also have docs on doing this for Java on developer.xamarin.com.
Some of our customers don't have the time or skill to do this themselves, and so we've recently created a bindings team that wraps third-party native libraries for our customers. Many of these end up published on http://components.xamarin.com/ (there are over 300 components now). But some of them we can't immediately publish because we need to get permission from the original library author to redistribute their library. This is especially true for commercial SDKs. But if you contact us directly, we might be able to give you something.
We also do custom bindings through our support team. This is something that unfortunately we haven't made very obvious. But you can just email support@xamarin.com and we can create a binding for you.
Like I said, this is an area we're pretty focused on. If you have any feedback, please feel free to let me know directly: nat@xamarin.com.