Xamarin的优缺点

哈Ha! 今天,我们将告诉您用户对我们的跨平台移动应用开发工具Xamarin的看法。 此外,我们将介绍该平台的缺点。 顺便说一下,在剪切下,您会发现很多代码和说明性示例,而不仅仅是带有枚举的文本。 立即加入!



本文由我们的合作伙伴(来自EGO的人员)编写。

Xamarin是一个方便的工具包,用于使用.NET在C#中开发跨平台的移动应用程序。 它支持iOS,Android和Windows Phone。

要开发基于Xamarin的应用程序,您不需要完全了解各个平台的特定语言。 此外,在任何平台上使用时,您都可以完全访问其SDK的功能以及用于创建用户界面的内置机制。

因此,Xamarin允许您创建与本地应用程序几乎没有什么不同的应用程序,这意味着它们非常适合通过官方商店(例如Google Play和App Store)进行分发。

此外,据Xamarin的开发人员称,交钥匙解决方案在性能方面不会明显逊色。

考虑Xamarin的组件。

  • Xamarin.IOS是一个C#类库,为开发人员提供了对iOS SDK的访问权限。
  • Xamarin.Android是C#类库,可为开发人员提供对Android SDK的访问权限。
  • C#编译器。
  • .NET Framework
  • IDE工具(内置于Mac OS和Windows的Visual Studio中)。

本文详细说明了使用Xamarin进行跨平台开发的七个重要原因。



其他材料: Xamarin和PhoneGap的比较

1.易学


选择平台时首先要注意什么? 当然,其开发的复杂性。 不太可能有很多人想花时间来掌握语法(例如,为了相当有信心地拥有Angular,您需要研究此平台至少几个月)。 因此,如果高质量代码的创建需要非常认真的准备,那么许多初学者根本就无法完全掌握开发环境。 但是开始使用Xamarin很容易:您不必学习Xamarin语言或类似语言。

using Xamarin.Forms; RootPage.Children.Add(new ContentPage { Content = new Label { Text = "Sketches in Forms", BackgroundColor = Color.Yellow, TextColor = Color.Blue, Font = Font.SystemFontOfSize(NamedSize.Large), VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, } }); 

知道C#语言的命令式风格就足够了,可以在.NET环境中随意使用,还可以学习与特定平台相关的多个类。

 using System.Diagnostics; using Foundation; using UIKit; namespace NeonPlayerConcept.iOS { [Register("AppDelegate")] public class AppDelegate : UIApplicationDelegate { public override UIWindow Window { get; set; } public static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } } } 

来源

要为特定平台创建完全“本机”的应用程序,您需要具有足够的Java(对于Android)或Objective-C / Swift(对于iOS)的知识。 在某些情况下,这可能是一个严重的障碍。 让我们看看在Objective-C和C#中如何解决涉及创建属性字符串的相同任务。

在Objective-C中:

 CFStringRef stringKeys[] * { kCTFontAttributeName, kCTForegroundColorAttributeName }; CFTypeRef stringValues[] * { myListFontRef, COColorGetConstantColor(kCOColorWhite) }; attr = CFDictionaryCreate (kCGAllocatorDefault, (const void **) &stringKeys, (const void **) &stringValues, sizeof(stringKeys) / sizeof(stringKeys[0]), &kCFTypeDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallbacks); astr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR(“Hello from ego team!”), attr); 

在C#中:

 var stringAttributes = new CFStringAttributes { Font = myFont, ForegroundColor = UIColor.White.CGColor }; var myString = new NSAttributedString (“Hello from EGO team!”, attrs); 

如果您没有使用Xamarin的跨平台开发功能,那么要创建一个在两个平台上都具有足够性能的商业项目,您可能需要同时使用两种不同的方法。 这意味着成本几乎翻了一番。

2.降低项目成本


基于上述优点,可以注意到,与为每个平台创建单独的专用项目相比,使用Xamarin进行跨平台开发所需的时间(和金钱)减少约1.5倍。

当然,某些代码段(例如,实用程序组件)在两个版本中将是相同的,而其他一些代码段(尤其是不使用用户设备的专用功能的业务逻辑)仅需进行较小的更改。 但是,总体情况要复杂一些。 必须为每个操作系统从头开始编写应用程序的某些组件。 在两个平台上创建和部署两个应用程序时,几乎总是需要雇用两个开发团队。 使用Xamarin更简单:

由于平台无关的API,大约70%的代码将以通用格式编写。

在此示例中,MainPage类使用ITextToSpeech接口在特定平台上选择所需的功能:

 ITextToSpeech.cs: public interface ITextToSpeech { void Speak (string text); } TextToSpeech_Android.cs: [assembly: Dependency (typeof (TextToSpeech_Android))] namespace UsingDependencyService.Android { public class TextToSpeech_Android : Java.Lang.Object, ITextToSpeech { TextToSpeech speaker; string toSpeak; public TextToSpeech_Android () {} public void Speak (string text) { \\Android-specific code } } } TextToSpeech_iOS.cs: [assembly: Dependency (typeof (TextToSpeech_iOS))] namespace UsingDependencyService.iOS { public class TextToSpeech_iOS : ITextToSpeech { TextToSpeech speaker; string toSpeak; public TextToSpeech_Android () {} public void Speak (string text) { … \\iOS-specific code } } } MainPage.cs: public class MainPage : ContentPage { public MainPage [] { var speak = new Button { Text = “Hello, world!”, VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, }; speak.Clicked += (sender, e) => { DependencyService.Get<ITextToSpeech>().Speak("Hello from Xamarin Forms"); }; Content = speak; } } 

3.能够创建“本地”之类的用户界面


开发人员避免使用跨平台开发工具的主要原因之一是,此类工具不允许您使用特定环境的全部功能。 这主要涉及设计(iOS中的平面设计,Android中的Material Design)和用户设备的智能功能(访问联系人,相机,GPS数据等)。

最终的跨平台解决方案将不具有高性能(此缺点是使用跨平台Web工具创建的几乎所有应用程序所固有的),并且将无法利用特定平台(这意味着项目创建者最初计划的某些功能可能尚未完全实施)。

但是,使用Xamarin工具进行“本机”应用程序的跨平台开发时,一切都不同。 在这种情况下,您将不会遇到上述问题。 开发人员不仅可以使用标准的.NET类:它们还可以轻松连接特定移动平台支持的类(它们分别包含在Xamarin.Android和Xamarin.iOS的C#库中)。 这意味着当使用Xamarin开发适用于iOS和Android的应用程序时,您将可以使用这些平台的全部功能。 您不需要使用第三方(通常是付费的)工具。

4.最佳测试条件


测试准备发布的产品并非易事,尤其是在涉及Android平台时。 用户iOS设备的屏幕格式已明确定义并事先知道,但Android设备却大不相同。 如果尚未在特定设备上测试应用程序,则其界面在某些情况下可能“分散”。 Xamarin的创建者提出了解决此问题的方法。

特别是, Test Cloud还可供平台用户使用,它可以模拟2000多个设备。 这个决定不是免费的,但是费用是合理的。



其他材料: 九种针对iOS和Android的最佳移动应用程序测试工具

5.与物联网设备的完美兼容性


如果希望您的应用程序接收有关用户位置,陀螺仪,加速度计或其他内置传感器的数据,那么Xamarin将是一个不错的选择。

 private void Instance_Ranged(object sender, System.Collections.Generic.IEnumerable<IBeacon> e) { Try { var data = string.Empty; foreach (var beacon in e) { data = $@”region id: {beacon} } _labelContent.Text = data; LogStatus(@”Ranged”); } catch (Exception exception) { LogStatus(exception.ToString()); } } 

此开发环境与允许您接收位置数据的IoT设备(例如,与Estimote )完全兼容,这意味着您不必配置与第三方解决方案的集成(尤其是从原则上讲 ,这是不可能的)。

6.质量文件和庞大的社区


Xamarin提供了井井有条的文档 ,包括实用示例,代码段和分步说明。

当然,其中不能回答一些问题。 在这种情况下,在线社区将为您提供帮助。 Xamarin有两个官方社区:在平台的官方网站和StackOverflow门户上。

如果您仍然无法获得所需的信息(一些开发人员抱怨社区专家不是很活跃),则可以联系Xamarin商业许可证持有人可用的私人技术支持服务。 专家将在几个小时内回答您,不仅提供很少会完全解决问题的标准程序,还提供解决特定问题的详细分步说明。

7.与Microsoft Windows完美集成


几乎每个IT公司都在Windows平台上拥有使用软件的已开发基础结构。

自2016年春季以来,对于所有版本的Visual Studio(适用于Mac OS和Windows),Xamarin也作为订阅的一部分提供。 如果您已经使用Visual Studio进行开发,则无需支付额外费用。

Xamarin的缺点


我们试图详细讨论Xamarin的优势,并研究了Xamarin的许多明显优势。 但是,我们希望使这次审查更加客观,因此我们转向解决方案的弱点。 实际上,只有一个缺点值得关注:使用Xamarin编写的应用程序的大小通常略超过本机副本的大小。 然而,优化绝不是多余的。

那么Xamarin有多有效?


Xamarin具有多个优点,非常适合大型项目开发跨平台应用程序,这些应用程序在架构方面非常复杂,类似于本机解决方案。

Source: https://habr.com/ru/post/zh-CN415833/


All Articles