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
4k
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
What's new in OpenShift 4.19
redhatlivestreaming
1
450
Workflows から Agents へ ~ 生成 AI アプリの成長過程とアプローチ~
belongadmin
3
170
初めてのAzure FunctionsをClaude Codeで作ってみた / My first Azure Functions using Claude Code
hideakiaoyagi
1
160
Кто отправит outbox? Валентин Удальцов, автор канала Пых
lamodatech
0
210
AI技術トレンド勉強会 #1MCPの基礎と実務での応用
nisei_k
1
230
Agentic DevOps時代の生存戦略
kkamegawa
0
720
原則から考える保守しやすいComposable関数設計
moriatsushi
3
490
CI/CDとタスク共有で加速するVibe Coding
tnbe21
0
220
自分を理解するAI時代の準備 〜マイプロフィールMCPの実装〜
edo_m18
0
110
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
140
Azure AI Foundryでマルチエージェントワークフロー
seosoft
0
130
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
210
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Raft: Consensus for Rubyists
vanstee
140
7k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
123
52k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Side Projects
sachag
455
42k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Automating Front-end Workflow
addyosmani
1370
200k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Fireside Chat
paigeccino
37
3.5k
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ʹΑΔσϞ͋Γ·͢ɻ ͓༠͍߹Θͤͷ্͝ࢀՃ͍ͩ͘͞ɻ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ