Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
NativeアプリをXamarin.Formsに移植してみた話
Search
Masaaki Yoshida
May 07, 2016
Technology
4.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NativeアプリをXamarin.Formsに移植してみた話
2016年5月7日にJapan Xamarin User Group Conference #13でお話ししたスライドです。
Masaaki Yoshida
May 07, 2016
Other Decks in Technology
See All in Technology
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
920
USB PDを使ってスマホを労わりたい
raspython3
0
180
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
Local CI × GitHub Actions
gogutan
2
190
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
110
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
330
大型犬好きによるPugの紹介
yamanoku
1
160
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
190
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
100
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
430
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
360
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Deep Space Network (abreviated)
tonyrice
0
370
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
Paper Plane
katiecoart
PRO
5
54k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
How to Talk to Developers About Accessibility
jct
2
580
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Building the Perfect Custom Keyboard
takai
2
910
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
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ʹΑΔσϞ͋Γ·͢ɻ ͓༠͍߹Θͤͷ্͝ࢀՃ͍ͩ͘͞ɻ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ