рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЖрдЬ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдБрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЛрдмрд╛рдЗрд▓ рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреВрд▓ Xamarin рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рдХрдорд┐рдпреЛрдВ рдХреЛ рднреА рджреЗрдЦреЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдФрд░ рдЪрд┐рддреНрд░рдг рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗрдВрдЧреЗ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рдкрд╛рдаред рдЕрдм рд╕рдореНрдорд┐рд▓рд┐рдд рд╣реЛрдВ!
рдпрд╣ рд▓реЗрдЦ рд╣рдорд╛рд░реЗ рднрд╛рдЧреАрджрд╛рд░реЛрдВ, рдИрдЬреАрдУ рдХреЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редXamarin .NET рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C # рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдЯреВрд▓рдХрд┐рдЯ рд╣реИред рдпрд╣ рдЖрдИрдУрдПрд╕, рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдЬрд╝рдорд╛рд░рд┐рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдПрд╕рдбреАрдХреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрдВрддреНрд░ рдХреА рдкреВрд░реА рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд╝рд╛рдорд░реАрди рдЖрдкрдХреЛ рдРрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рдореВрд▓ рд╕рдордХрдХреНрд╖реЛрдВ рд╕реЗ рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрдЯреЛрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google Play рдФрд░ рдРрдк рд╕реНрдЯреЛрд░) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╝рдорд╛рд░рд┐рди рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╣реАрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЬрд╝рдорд╛рд░рд┐рди рдХреЗ рдШрдЯрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
- Xamarin.IOS рдПрдХ C # рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ iOS SDK рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
- Xamarin.Android рдПрдХ рд╕реА # рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
- рд╕реА # рд╕рдВрдХрд▓рдХред
- .NET рдлреНрд░реЗрдорд╡рд░реНрдХ
- рдЖрдИрдбреАрдИ рдЙрдкрдХрд░рдг (рдореИрдХ рдУрдПрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд)ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╝рдорд╛рд░рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА: Xamarin рдФрд░ PhoneGap рдХреА рддреБрд▓рдирд╛ ред1. рд╕реАрдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдирддреЗ рд╕рдордп рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЬрдЯрд┐рд▓рддрд╛ред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕реЗ рдХрдИ рд▓реЛрдЧ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдгреАрдп рдХреЗ рдХрд╛рдлреА рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдХрдмреНрдЬреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрдИ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдордВрдЪ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдВрдд рдЧрдВрднреАрд░ рддреИрдпрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХрдИ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧ рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди 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, } });
рд▓реЗрдЦрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдЕрдкрдиреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢реИрд▓реА рдХреЗ рд╕рд╛рде рд╕реА # рднрд╛рд╖рд╛ рдХреЛ рдЬрд╛рдирдирд╛, .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"); } } }
рд╕реНрд░реЛрдд ред
рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рджреЗрд╢реА" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ (рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА / рд╕реНрд╡рд┐рдлреНрдЯ (рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рдмрд╛рдзрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдХ рд╣реА рдХрд╛рд░реНрдп, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдФрд░ рд╕реА # рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдореЗрдВ:
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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрд╡рддрдВрддреНрд░ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рдЧрднрдЧ 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. "рджреЗрд╢реА" рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреВрд▓реНрд╕ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди (рдЖрдИрдУрдПрд╕ рдореЗрдВ рдлреНрд▓реИрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдбрд┐рдЬрд╝рд╛рдЗрди) рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдмреМрджреНрдзрд┐рдХ рдХреНрд╖рдорддрд╛рдУрдВ (рд╕рдВрдкрд░реНрдХ, рдХреИрдорд░рд╛, рдЬреАрдкреАрдПрд╕ рдбреЗрдЯрд╛, рдЖрджрд┐ рддрдХ рдкрд╣реБрдВрдЪ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдЕрдВрддрд┐рдо рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдпрд╣ рдХрдореА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡реЗрдм рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рд▓рдЧрднрдЧ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ) рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдореЗрдВ рдирд┐рдпреЛрдЬрд┐рдд рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, "рджреЗрд╢реА" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╝рдорд╛рд░рд┐рди рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдорд╛рдирдХ .NET рдХрдХреНрд╖рд╛рдПрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рд╡реЗ рдХреНрд░рдорд╢рдГ Xamarin.Android рдФрд░ Xamarin.iOS рдХреЗ рд▓рд┐рдП C # рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд╛рдорд░реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдЗрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрдЧреАред рдЖрдкрдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП) рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
4. рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╕реНрдерд┐рддрд┐
рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЖрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ iOS рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕реНрдХреНрд░реАрди рдкреНрд░рд╛рд░реВрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВред рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рдлреИрд▓" рд╕рдХрддрд╛ рд╣реИред рдЬрд╝рдорд╛рд░рд┐рди рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рдЙрдб рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ 2000 рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдгрдп рдореБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдЧрдд рдЙрдЪрд┐рдд рд╣реЛрдЧреАред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА:
iOS рдФрд░ Android рдХреЗ рд▓рд┐рдП рдиреМ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдореЛрдмрд╛рдЗрд▓ рдРрдк рдкрд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг ред
5. IoT рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╕рдВрдЧрддрддрд╛
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрдерд╛рди, рдЧрд╛рдпрд░реЛрд╕реНрдХреЛрдк, рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдпрд╛ рдЕрдиреНрдп рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реЗрдВрд╕рд░ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗ, рддреЛ рдЬрд╝рдорд░реАрди рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
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 рдЙрдкрдХрд░рдгреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрд╕реНрдЯрд┐рдореЛрдЯ рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред
6. рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг, рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдФрд░ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд
рдкреНрд░рд▓реЗрдЦрди рдЬрд╝рд╛рдорд░реАрди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рдмреЗрд╢рдХ, рдХреБрдЫ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдСрдирд▓рд╛рдЗрди рд╕рдореБрджрд╛рдп рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред рджреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Xamarin рд╕рдореБрджрд╛рдп рд╣реИрдВ: рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ StackOverflow рдкреЛрд░реНрдЯрд▓ рдкрд░ред
рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИрдВ), рддреЛ рдЖрдк рдЬрд╝рд╛рдорд░реАрди рд╡реНрдпрд╡рд╕рд╛рдп рд▓рд╛рдЗрд╕реЗрдВрд╕ рдзрд╛рд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд┐рдЬреА рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЖрдкрдХреЛ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ рдФрд░ рди рдХреЗрд╡рд▓ рдорд╛рдирдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреА рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢ред
7. рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЛрд╖ рдПрдХреАрдХрд░рдг
рд▓рдЧрднрдЧ рд╣рд░ рдЖрдИрдЯреА рдХрдВрдкрдиреА рдХреЗ рдкрд╛рд╕ рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рдПрдХ рд╡рд┐рдХрд╕рд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИред
2016 рдХреЗ рд╡рд╕рдВрдд рдХреЗ рдмрд╛рдж рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ (рдореИрдХ рдУрдПрд╕ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд╝рдорд░реАрди рдХреЛ рднреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
Xamarin рдиреБрдХрд╕рд╛рди
рд╣рдордиреЗ рдЬрд╝рдорд░реАрди рдХреА рддрд╛рдХрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдкрд╖реНрдЯ рд▓рд╛рднреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рдЕрдзрд┐рдХ рдЙрджреНрджреЗрд╢реНрдпрдкреВрд░реНрдг рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдорд╛рдзрд╛рди рдХреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рджреЛрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: Xamarin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдЖрдорддреМрд░ рдкрд░ рджреЗрд╢реА рд╕рдордХрдХреНрд╖реЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдлрд┐рд░ рднреА, рдЕрдиреБрдХреВрд▓рди рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рддреЛ рдЬрд╝рдорд╛рд░рд┐рди рдХрд┐рддрдирд╛ рдкреНрд░рднрд╛рд╡реА рд╣реИ?
рдЬрд╝рд╛рдорд░реАрди рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ рдФрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЬреЛ рдореВрд▓ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИрдВред