Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NativeアプリをXamarin.Formsに移植してみた話
Search
Masaaki Yoshida
May 07, 2016
Technology
0
3.9k
NativeアプリをXamarin.Formsに移植してみた話
2016年5月7日にJapan Xamarin User Group Conference #13でお話ししたスライドです。
Masaaki Yoshida
May 07, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
190
APIとはなにか
mikanichinose
0
110
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
380
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
120
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
1.4k
podman_update_2024-12
orimanabu
1
280
React Routerで実現する型安全なSPAルーティング
sansantech
PRO
2
190
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
130
ハイテク休憩
sat
PRO
2
170
サーバーなしでWordPress運用、できますよ。
sogaoh
PRO
0
120
私なりのAIのご紹介 [2024年版]
qt_luigi
1
120
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
200
Featured
See All Featured
Music & Morning Musume
bryan
46
6.2k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
How STYLIGHT went responsive
nonsquared
96
5.2k
What's in a price? How to price your products and services
michaelherold
243
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
A better future with KSS
kneath
238
17k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Transcript
NativeΞϓϦΛ Xamarin.FormsʹҠ২ͯ͠Έͨ 20165݄7 ઌٕज़ࣄۀ෦ εϚʔτιϦϡʔγϣϯηϯλʔ ٢ాক໌ Xamarin User Group Conference
#13
All Rights Reserved. Copyright © CRESCO LTD. 2 ࣗݾհ ٢ాক໌ʢΑͩ͠
·͖͋͞ʣ ܦྺ ࢈ۀܥSE→ࠂཧళ Ӧۀˠݱࡏ .NETɺC#͔ͬΓͬͯͨࢲɻ͍͖ͳΓεϚϗܥͷ෦ॺʹɻ →ϠόΠɺ͓ݺͼͰͳ͍ɻɻɻ Xamarinͷग़ձ͍ ͦΜͳதɺ2014/5/29,30ʹߦΘΕͨde:codeʹࢀՃ →࣌XamarinΤόͩͬͨล༑ଠ͞ΜͷxamarinηογϣϯΛௌߨ →C#ͰεϚϗ࡞ΕΔΜͩʂʂ͔͠ΫϩεϓϥοτϑΥʔϜɻ →ࣾͰܒ׆ಈΛ։࢝ →΄ͲࣾษڧձΠϕϯτͰܒ׆ಈΛͨ݁͠Ռɻɻɻ
Xamarin.FormsͰ ΈΜͳͰͯΜ͜ʂ 201510݄3 ٢ా ক໌ ୈ̒ճ Japan Xamarin User Group
Conference @౦ژ ઌٕज़ࣄۀ෦
All Rights Reserved. Copyright © CRESCO, LTD. 4 ʮΈΜͳͷͯΜ͜ʯͷ͘͠Έ αʔόʔ
18 ɹ/20 50 45 ใরձʗ࿈བྷࢦࣔ Bluetooth πΞʔࢀՃऀใऔಘ Ի௨ SMS σʔλೖྗ πΞʔࢀՃऀ ఴһ Ϗʔίϯόοδ ݺઐ༻ iPadΞϓϦ πΞʔཧऀ
All Rights Reserved. Copyright © CRESCO LTD. 5 ΈΜͳͷͯΜ͜ͷཪଆΛͬͱΓ͍ͨํ SlideShareͰެ։த
http://www.slideshare.net/ma-yoshida/xamarinforms-53721105
All Rights Reserved. Copyright © CRESCO LTD. 6 ΫϨείͷIoTͷऔΓΈΛͬͱΓ͍ͨํ ΫϨείͷIoTಛઃαΠτʂ
http://service.cresco.co.jp/iot/
All Rights Reserved. Copyright © CRESCO LTD. 7 ࠓͷຊ ͢Ͱʹ͋ΔiOSɺAndroidωΟςΟϒͰ
࡞ΒΕͨΞϓϦΛXamarin.FormsʹҠ২ ͢Δ࣮ͬͯࡍͷͱ͜ΖɺͲ͏ͳͷʁ
All Rights Reserved. Copyright © CRESCO LTD. 8 Ξϓϩʔν iOS,Android͚ͷି݅ݕࡧΞϓϦΛ
Xamarin.FormsʹҠ২ͯ͠Έ·ͨ͠
All Rights Reserved. Copyright © CRESCO LTD. 9 ି݅ݕࡧΞϓϦͷXamarin.FormsԽ ը໘ߏ
ɾτοϓϖʔδ ɾࢢொଜҰཡϖʔδ ɾ݅Ұཡϖʔδ ɾ݅ৄࡉϖʔδ ɾMAPϖʔδ
All Rights Reserved. Copyright © CRESCO LTD. 10 τοϓϖʔδ iOS൛ͱAndroid൛ͰUI༷͕ҟͳΔɻ
ᶃϝχϡʔ ɹiOSɿλϒόʔίϯτϩʔϧͰը໘Լ෦ʹɻ ɹAndroidɿϋϯόʔΨʔϝχϡʔͰը໘্෦ʹɻ ᶄهจݴ ɹiOSɿ͋Γ ɹAndroidɿͳ͠ ᶃ ᶃ ᶄ Google͞ΜϋϯόʔΨʔϝχϡʔ͕ େ͖ͰɺApple͞Μ৹͕ࠪݫ͘͠ ಠࣗରԠ͕ඞཁͳΜͯ͜ͱ Α͋͘Δ͓ ͊͞Ͳ͏͠Α͏ɻ
All Rights Reserved. Copyright © CRESCO LTD. 11 τοϓϖʔδ<ϝχϡʔ> Xamarin.Formsͷඪ४ίϯτϩʔϧʹTabbedPage͕͋Δ
iOS͍͍ײ͡ ϋϯόʔΨʔϝχϡʔɾɾɾ Xamarin.Formsඪ४ίϯτϩʔϧͰ ༷Λຬͨͤͳ͍߹ɺ࣮ෆՄೳʁ ͦΜͳ͜ͱ͋Γ·ͤΜɻ ϓϥοτϑΥʔϜ͝ͱʹ ݸผUIΛ࣮ݱ͢Δํ๏ͱͯ͠ɺ Custom Renderer͕༻ҙ͞Ε͍ͯ·͢ɻ
All Rights Reserved. Copyright © CRESCO LTD. 12 τοϓϖʔδ<Custom Rendererͷ࣮ྫ>
<ContentPage.Content> ɹɹ<StackLayout Spacing="0" Padding="0" BackgroundColor="#EEEEEE"> ɹɹɹɹ<ContentView VerticalOptions="Start" > ɹɹɹ<local:HamburgerMenuView /> ɹ</ContentView> ɹ<ContentView VerticalOptions="FillAndExpand" > ɹɹɹɹɹɹ<local:TopScrollView x:Name="MyScrollView" /> ɹ</ContentView> ɹ<ContentView VerticalOptions="End" > ɹɹ<local:GlobalMenuView /> ɹɹɹɹ</ContentView> ɹɹ</StackLayout> </ContentPage.Content> ᶃPCLଆͰViewΛఆٛ(TopPage.Xaml) ᶄViewΛ3ͭͷཁૉʹׂ ɹ1.HambugerMenuView ɹ2.TopScrollView ɹ3.GlobalMenuView ᶅiOS Custom RedererͰHambugerMenuViewΛඇදࣔʹ ᶆAndroid Custom RendererͰGlobalMenuViewΛඇදࣔʹ TopPage.Xaml
All Rights Reserved. Copyright © CRESCO LTD. 13 τοϓϖʔδ<Custom Rendererͷ࣮ྫ>
[assembly:ExportRenderer (typeof(HamburgerMenuView), typeof(HamburgerMenuView_iOS))] namespace HogeHoge.iOS { public class HamburgerMenuView_iOS : ViewRenderer<ContentView, UIView> { public HamburgerMenuView_iOS () { } /** * Delete Hamburger Menu */ protected override void OnElementChanged (ElementChangedEventArgs<ContentView> e){ base.OnElementChanged (e); if (e.OldElement != null || Element == null) { return; } e.NewElement.Content = null; } } } iOSϨϯμϦϯάΫϥεͰɺassembly:ExportRendererఆٛͰForms HamburgerMenuViewΫϥεϨϯμϦϯάޙɺiOS HamburgerMenuView_iOSΫϥεΛϨϯμϦϯά͢ΔΑ͏ʹઃఆ͠·͢ɻ OnElementChangedͰe.NewElement ͕ Forms ContentView ʹͳΓ·͢ɻ͜ͷContentʹnullΛೖ͢Δͱɺแ͢ΔΠϝʔδ ͕ফڈ͞Ε·͢ɻ Forms ϨΠΞτͰɺফڈ͢ΔContentΛแ͢ΔContentView ʹߴ͞ࢦఆ͕͋Δͱɺதফڈ͞ΕͯྖҬ͚͕ͩͬͯ͠·͍· ͢ɻফڈ͢Δίϯςϯπ͕ࣗߴ͞Λܾఆ͢ΔϨΠΞτΛ࡞͓ͯ͘͠ඞཁ͕͋Γ·͢ɻ HumburgerMenuView_iOS.cs
All Rights Reserved. Copyright © CRESCO LTD. 14 τοϓϖʔδ<Custom Rendererͷ࣮ྫ>
[assembly:ExportRenderer (typeof(GlobalMenuView), typeof(GlobalMenuView_Droid))] namespace HogeHoge.Droid { public class GlobalMenuView_Droid : ViewRenderer<ContentView, Android.Views.View> { public GlobalMenuView_Droid () { } /** * Delete Global Menu */ protected override void OnElementChanged (ElementChangedEventArgs<ContentView> e){ base.OnElementChanged (e); if (e.OldElement != null || Element == null) { return; } e.NewElement.Content = null; } } } GlobalMenuView_Droid.cs AndroidϨϯμϦϯάΫϥεͰiOSಉ༷ɺassembly:ExportRendererఆٛͰForms HamburgerMenuViewΫϥεϨϯμϦϯάޙɺ Android GLobalMenuView_DroidΫϥεΛϨϯμϦϯά͢ΔΑ͏ʹઃఆ͠·͢ɻ iOSͷΈදࣔ͢Δهจݴʹؔͯ͠ɺಉ༷ʹAndroidͷϨϯμϦϯάΫϥεͰඇදࣔʹ͍ͯ͠·͢ɻ
All Rights Reserved. Copyright © CRESCO LTD. 15 ʲTips :
Ϧιʔεͷཧʳ ɾEmbedded Resource<PCLଆʹڞ௨Ϧιʔεͱͯ͠ཧ> ϝϦοτ ϓϥοτϑΥʔϜ͝ͱʹϦιʔεΛ༻ҙ͠ͳͯ͘ྑ͍ ϏϧυΞΫγϣϯΛEmbededResource ͱͯ͠ઃఆ͢Δ σϝϦοτ ෳղ૾ʹରͯ͠ɺ֦େɺॖখͷΈରԠɻ ͍Ͳ͜Ζ ݻఆαΠζͷը૾ ը૾͕ॏཁͳཁҼͰͳ͍ΞϓϦ ɾLocal Resource<֤ϓϥοτϑΥʔϜ͝ͱʹϦιʔεΛཧ> ϝϦοτ ֤ϓϥοτϑΥʔϜͷ༷ʹଇΔ͜ͱͰɺෳղ૾ʹରԠɻ iOS : BundleResource ͱͯ͠ϦιʔεΛఆٛ͢Δ͜ͱͰɺRetina / ඇRetinaΛࣝผՄೳ AndroidɿAndroidResourceͱͯ͠ϦιʔεΛఆٛ͢Δ͜ͱͰɺෳDPʹରԠɻ σϝϦοτ ϓϥοτϑΥʔϜ͝ͱʹཧ͕ඞཁ ͍Ͳ͜Ζ ͢ͰʹiOS / AndroidͷϦιʔε͕༻ҙ͞Ε͍ͯΔ߹ ը૾͕ॏཁͳཁҼͰ͋ΔΞϓϦ
All Rights Reserved. Copyright © CRESCO LTD. 16 ʲTips :
Ϧιʔεͷཧʳ ɾEmbedded Resource<PCLଆʹڞ௨Ϧιʔεͱͯ͠ཧ> var image = Xamarin.Forms.ImageSource.FromResource ("HogeHoge.Embeded.common.k_bg_select_area_row.png"); PCLͷC#ίʔυ͔Β༻͢Δ߹ ImageSource.FromResource ( ϦιʔεID )ɻϦιʔεIDϑΝΠϧͷϓϩύςΟ͔Β֬ೝՄೳɻ XAML͔Β༻͢Δ߹ [ContentProperty ("Source")] public class ImageResource : IMarkupExtension { public string Source { get; set; } public object ProvideValue (IServiceProvider serviceProvider) { if (Source == null) return null; var imageSource = ImageSource.FromResource(Source); return imageSource; } } <Image Source="{local:ImageResource HogeHoge.Embeded.top.k_img_top.png}" /> ͦͷ··ͰXAML͔Βݺͼग़͢͜ͱ͕Ͱ͖ͳ͍͕ɺMarkup֦ுΛఆٛ͢Δͱݺͼग़ͤΔΑ͏ʹͳΔɻ ImageResource.cs
All Rights Reserved. Copyright © CRESCO LTD. <!---Bukken List -->
<ListView ɹɹx:Name="BukkenList" ɹɹHorizontalOptions="FillAndExpand"> ɹɹ<ListView.ItemTemplate> ɹɹɹ<DataTemplate> ɹɹɹɹ<ViewCell> ɹɹɹɹɹ<ViewCell.View> ɹɹɹɹɹɹ<AbsoluteLayout Padding="0"> ɹɹɹɹɹɹɹ<ContentView Padding="0" ɹɹɹɹɹɹɹɹɹAbsoluteLayout.LayoutBounds="0,0,1,1" ɹɹɹɹɹɹɹɹɹAbsoluteLayout.LayoutFlags=“All"> ɹɹɹɹɹɹɹɹ<Image Source="{Binding CellBgImage}" Aspect="Fill" /> </ContentView> <ContentView Padding="0" ɹɹɹɹɹɹɹɹɹAbsoluteLayout.LayoutBounds="0,0,1,1" ɹɹɹɹɹɹɹɹɹAbsoluteLayout.LayoutFlags=“All"> ɹɹɹɹɹɹɹ<!---Bukken View --> <StackLayout ɹOrientation="Horizontal" ɹSpacing="0" ɹPadding="5,15,0,15" ɹVerticalOptions="FillAndExpand" ɹHorizontalOptions="FillAndExpand"> ɹɹɹɹɹɹɹɹ<!---Bukken Image --> ɹ<ContentView VerticalOptions="FillAndExpand"> ɹɹ<Image Source="{Binding LeftArrowImage}" Aspect="AspectFit" /> ɹ</ContentView> ɹ<ContentView WidthRequest="60"> ɹɹ<Image Source="{Binding BukkenImage}" Aspect="AspectFit" /> ɹ</ContentView> ɹ<ContentView VerticalOptions="FillAndExpand"> ɹɹ<Image Source="{Binding RightArrowImage}" Aspect="AspectFit" /> ɹɹɹɹɹɹɹɹ</ContentView> ɾɾɾɾ 17 ݅Ұཡϖʔδ Xamarin.Formsඪ४ίϯτϩʔϧͷΈͰ࣮
All Rights Reserved. Copyright © CRESCO LTD. 18 ݅ৄࡉϖʔδ UI෦Formsඪ४ίϯτϩʔϧͷΈͰ࣮
ϓϥοτϑΥʔϜݸผ࣮ͱͯ͠ɺ ɾϝʔϧ࿈ܞػೳΛ Dependency ServiceͰ࣮ ɾి࿈ܞػೳΛ Custom RendererͰ࣮
All Rights Reserved. Copyright © CRESCO LTD. 19 ݅ৄࡉϖʔδ<ϝʔϧ࿈ܞػೳ iOS>
PCLଆʹϝʔϧػೳͷΠϯλʔϑΣʔεΛ࣮ public interface IMailOpener { void OpenMail(object context, string to, string subject, string body); } iOSଆʹDependencyServiceΛܦ༝ͯ͠ݺͼग़͞ΕΔOpenMailϝιουΛఆٛ [assembly: Dependency (typeof (MailOpener_iOS))] namespace HogeHoge.iOS { public class MailOpener_iOS : IMailOpener { public MailOpener_iOS (){} public void OpenMail(object context, string to, string subject, string body){ var escSubject = new NSString(subject); escSubject = escSubject.CreateStringByAddingPercentEscapes (NSStringEncoding.UTF8); var escBody = new NSString(body); escBody = escBody.CreateStringByAddingPercentEscapes (NSStringEncoding.UTF8); var mailUrl = string.Format("mailto://{0}?subject={1}&body={2}",to, escSubject, escBody); var url = NSUrl.FromString (mailUrl); if (UIApplication.SharedApplication.CanOpenUrl (url)) { UIApplication.SharedApplication.OpenUrl (url); } } } } PCLଆͰͷݺͼग़͠ྫ void OnMailButtonClicked(object sender, EventArgs args) { ɹɹobject context = MailButton.myContext; ɹɹDependencyService.Get<IMailOpener>().OpenMail(context, myToAddress, mySubject, myBody); }
All Rights Reserved. Copyright © CRESCO LTD. 20 ݅ৄࡉϖʔδ<ϝʔϧ࿈ܞػೳ Android>
PCLଆʹϝʔϧػೳͷΠϯλʔϑΣʔεΛ࣮ public interface IMailOpener { void OpenMail(object context, string to, string subject, string body); } AndroidଆʹDependencyServiceΛܦ༝ͯ͠ݺͼग़͞ΕΔOpenMailϝιουΛఆٛ [assembly: Dependency (typeof (MailOpener_Droid))] namespace HogeHoge.Droid { public class MailOpener_Droid : IMailOpener { public MailOpener_Droid (){} public void OpenMail(object context, string to, string subject, string body){ Intent intent = new Intent(Intent.ActionSend); intent.SetType("text/html"); intent.PutExtra(Intent.ExtraEmail,new String[]{to}); intent.PutExtra(Intent.ExtraSubject, subject); intent.PutExtra(Intent.ExtraText, body); var currentActivity = context as Activity; currentActivity.StartActivity(Intent.CreateChooser(intent, "Send Email")); } } } PCLଆͰͷݺͼग़͠ྫ void OnMailButtonClicked(object sender, EventArgs args) { ɹɹobject context = MailButton.myContext; ɹɹDependencyService.Get<IMailOpener>().OpenMail(context, myToAddress, mySubject, myBody); }
All Rights Reserved. Copyright © CRESCO LTD. 21 ݅ৄࡉϖʔδ<ి࿈ܞػೳ iOS>
PCLଆʹి࿈ܞ༻ϘλϯΫϥεΛ࡞ public class TelephoneButton : Button { ɹɹpublic TelephoneButton () ɹɹ{ ɹTextColor = Color.Blue; ɹVerticalOptions = LayoutOptions.FillAndExpand; ɹHorizontalOptions = LayoutOptions.FillAndExpand; ɹFontSize = 12; ɹɹ} } iOSଆʹΧελϜϨϯμϥʔͰϘλϯΫϦοΫ࣌ͷಈ࡞ΛΧελϚΠζ [assembly:ExportRenderer (typeof(TelephoneButton), typeof(TelephoneButton_iOS))] namespace HogeHoge.iOS { public class TelephoneButton_iOS : ButtonRenderer { public TelephoneButton_iOS (){} protected override void OnElementChanged (ElementChangedEventArgs<Xamarin.Forms.Button> e) { base.OnElementChanged (e); // ΫϦοΫ࣌ͷಈ࡞ॻ͖͑ UIButton button = this.Control; button.AddTarget (OpenTelephone, UIControlEvent.TouchUpInside); } void OpenTelephone(object sender, EventArgs args){ UIButton button = sender as UIButton; var text = string.Format("telprompt://{ 0}", button.TitleLabel.Text); var urlText = Uri.EscapeUriString (text); System.Diagnostics.Debug.WriteLine ("OpenTelephone:{0}",urlText); var url = new NSUrl (urlText); UIApplication.SharedApplication.OpenUrl (url); } } }
All Rights Reserved. Copyright © CRESCO LTD. 22 ݅ৄࡉϖʔδ<ి࿈ܞػೳ Android>
PCLଆ ి࿈ܞ༻ϘλϯΫϥε public class TelephoneButton : Button { ɹɹpublic TelephoneButton () ɹɹ{ ɹTextColor = Color.Blue; ɹVerticalOptions = LayoutOptions.FillAndExpand; ɹHorizontalOptions = LayoutOptions.FillAndExpand; ɹFontSize = 12; ɹɹ} } [assembly:ExportRenderer (typeof(TelephoneButton), typeof(TelephoneButton_Driod))] namespace HogeHoge.Droid { public class TelephoneButton_Driod : ButtonRenderer { Activity myActivity; string myDialText; public TelephoneButton_Driod (){} protected override void OnElementChanged (ElementChangedEventArgs<Xamarin.Forms.Button> e) { base.OnElementChanged (e); // ΫϦοΫ࣌ͷಈ࡞ॻ͖͑ myActivity = this.Context as Activity; myDialText = e.NewElement.Text; var button = this.Control; button.Click += OnClickButton; } void OnClickButton(object sender, EventArgs e) { var urlText = Android.Net.Uri.Parse ("tel:" + myDialText); var intent = new Intent (Intent.ActionView, urlText); myActivity.StartActivity(intent); } } } AndroidଆʹΧελϜϨϯμϥʔͰϘλϯΫϦοΫ࣌ͷಈ࡞ΛΧελϚΠζ
All Rights Reserved. Copyright © CRESCO LTD. 23 Mapػೳͱ͔·ͩ·ͩ͋Γ·͕͢ɺɺɺ ͦΖͦΖ·ͱΊ·͢
All Rights Reserved. Copyright © CRESCO LTD. 24 ࠓͷຊ ͢Ͱʹ͋ΔiOSɺAndroidωΟςΟϒͰ
࡞ΒΕͨΞϓϦΛXamarin.FormsʹҠ২ ͢Δ࣮ͬͯࡍͷͱ͜ΖɺͲ͏ͳͷʁ
All Rights Reserved. Copyright © CRESCO LTD. 25 UIɾɾɾʁ Native
iOS Xamarin.Forms iOS Native Android Xamarin.Forms Android Xamarin.Formsͷඪ४෦͚ͩͰ͋Δఔ࠶ݱՄೳɻ ϓϥοτϑΥʔϜ͝ͱʹಠࣗͷ༷͕͋Δ߹Custom RendererͰ࣮ɻ ಠ༷͕ࣗଟ͍߹ɺXamarin NativeͰ࣮͢Δํ͕ྑ͍߹ɻ
All Rights Reserved. Copyright © CRESCO, LTD. 26 ϩδοΫɺϦιʔεɾɾɾʁ #
ػೳ ڞ௨ ݸผ උߟ 1 ϝΠϯϝχϡʔ ʢάϩʔόϧϝχϡʔʣػೳ ݸผ ֤OSͷUXʹै͍ݸผ࣮ 2 ը૾ૉࡐ ڞ௨ େ͖ΊͷαΠζը૾Λ४උɺΞεϖΫτൺΛอͪͭͭॖখͯ͠දࣔ͢Δ͜ͱͰڞ௨ԽՄೳ 3 ը໘ϨΠΞτ ΄΅ڞ௨ άϩʔόϧϝχϡʔɾϋϯόʔΨʔϝχϡʔҎ֎ڞ௨Ͱ࣮ 4 Ϛοϓදࣔػೳʗ ϚοϓΞϓϦ࿈ܞ ʑ Xamarin.Forms.Mapʹͯ΄΅ڞ௨ԽͰ͖͍ͯΔɻ ϚοϓΞϓϦݺͼग़͠෦ͷΈݸผ࣮ 5 ిΞϓϦػೳ࿈ܞ ʑ ֤OSిΞϓϦݺͼग़͠෦ͷΈݸผ࣮ ̒ ϝʔϧΞϓϦػೳ࿈ܞ ʑ ֤OSϝʔϧΞϓϦݺͼग़͠෦ͷΈݸผ࣮ ɾը໘ભҠɺ௨৴ɺϏδωεϩδοΫͳͲجຊڞ௨ԽՄೳʂ ɾిɺϝʔϧͳͲσόΠεݻ༗ػೳDependency ServiceͰݸผ࣮ʂ ɾXamarin PluginͳͲ͕ॆ࣮ͯ͘͠Δͱݸผ࣮͕ෆཁʹͳΔέʔεɻ ɾEnbedded ResourceͰϦιʔεڞ௨Խ͕Մೳɻ UIʹͩ͜ΘΒͳ͍ͳΒXamarin.FormsͰ؆୯ʹ࡞Εͯ͠·͍·͢ʂ
All Rights Reserved. Copyright © CRESCO LTD. 27 ڞ௨Խׂ߹ɾɾɾʁ UIΛ΄΅ڞ௨Խ͠ɺϩδοΫσόΠεݻ༗ػೳҎ֎ڞ௨Խ
→7ׂ͘Β͍ڞ௨ԽͰ͖Δʂ
All Rights Reserved. Copyright © CRESCO, LTD. 28 ·ͱΊ <UI؍>
ɹɾXamarin.FormsͰඪ४తͳUIͳΒରԠՄೳɻ ɹɾXamarin.Forms PreviewerͰXAMLϓϨϏϡʔαϙʔτ^^ ɹɾUIಠ༷͕ࣗଟ͍߹Xamarin.NativeΛݕ౼͖͢ɻ <Ϧιʔε؍> ɹɾEnbedded ResourceͰڞ௨ԽՄೳɻ ɹɾ͢Ͱʹ֤ϓϥοτϑΥʔϜղ૾͝ͱͷϦιʔε͕͋ΔͳΒ ɹɹϓϥοτϑΥʔϜ͝ͱʹ༻ҙ͢Δํ͕͍͍ɻ ʻϩδοΫ؍ʼ ɹɾը૾ՃܥσόΠεݻ༗ػೳΛ͝Γ͝Γ͏ͷͰͳ͚Ε ɹɹXamarin.FormsͰ͋Δఔڞ௨ԽͰ͖Δɻ ʻ࠶ར༻ੑʼ ɹɾFormsͳΒUIεΫϥονͱಉ ɹɾΞϧΰϦζϜ͋Δఔ͍·ΘͤΔ͕ɺC#Ͱॻ͖͕͠ඞཁɻ ɹɾͦΕͳΓʹॳظίετ͔͔Δ͕ɺอकӡ༻අ༻Լ͕Δɻ
All Rights Reserved. Copyright © CRESCO, LTD. 29 Xamarin.Forms։ൃͷϓϩδΣΫτମ੍ Xamarin.FormsΛ༻͢Δ͜ͱͰɺඪ४తͳUIσόΠεʹґଘ͠ͳ͍ػೳεϚϗະܦݧͰ”։ൃ”
Մೳͱ͍͑·͢ɻ͔͠͠ɺڽͬͨUIσόΠεݻ༗ͷػೳɺͦͷଞϏϧυϦϦʔεʹؔͯ͠ɺͦ ΕͧΕͷOSͷಛੑΛཧղ͢Δඞཁ͕͋Γ·͢ɻϨϕϧͷΞϓϦΛ։ൃ͢Δʹɺ֤ϓϥοτ ϑΥʔϜͷ։ൃܦݧऀΛΞαΠϯͤ͞Δඞཁ͕͋Γ·͢ɻฐࣾͰɺ֤ϓϥοτϑΥʔϜ։ൃऀަ͑ ͯϓϩδΣΫτମ੍ΛΉ͜ͱ͕ՄೳͰ͢ɻ ϓϩδΣΫτ Ϛωʔδϟ ITΞʔΩςΫτ Android Developer .NET Developer iOS Developer ։ൃϦʔμʔ
All Rights Reserved. Copyright © CRESCO, LTD. 30 ৄ͘͠ฉ͖͍ͨํɺɺɺ 5/18(ਫ)ʹΤΫηϧιϑτ͞·ɺΫϨείͷ߹ಉओ࠵ͷXamarinϏδωεηϛφʔΛ࣮ࢪ͠·͢ɻ
http://service.cresco.co.jp/seminar_event.shtml PepperʹΑΔσϞ͋Γ·͢ɻ ͓༠͍߹Θͤͷ্͝ࢀՃ͍ͩ͘͞ɻ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ