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
顧客の声を集めて活かすリクルートPdMのVoC活用事例を徹底解剖!〜プロデザ!〜
recruitengineers
PRO
0
150
Tokyo RubyKaigi 12 - Scaling Ruby at GitHub
jhawthorn
2
170
信頼性を支えるテレメトリーパイプラインの構築 / Building Telemetry Pipeline with OpenTelemetry
ymotongpoo
9
4.4k
Microsoft Ignite 2024 最新情報!Microsoft 365 Agents SDK 概要 / Microsoft Ignite 2024 latest news Microsoft 365 Agents SDK overview
karamem0
0
180
例外処理を理解して、設計段階からエラーを「見つけやすく」「起こりにくく」する
kajitack
9
1.8k
プロダクト価値を引き上げる、「課題の再定義」という習慣
moeka__c
0
190
大学教員が押さえておくべき生成 AI の基礎と活用例〜より効率的な教育のために〜
soh9834
1
180
一人から始めたSREチーム3年の歩み - 求められるスキルの変化とチームのあり方 - / The three-year journey of the SRE team, which started all by myself
vtryo
7
5.1k
企業テックブログにおける執筆ネタの考え方・見つけ方・広げ方 / How to Think of, Find, and Expand Writing Topics for Corporate Tech Blogs
honyanya
0
720
教師なし学習の基礎
kanojikajino
4
320
20250129 Findy_テスト高活用化
dshirae
0
190
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
5k
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
192
16k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
590
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
It's Worth the Effort
3n
184
28k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Unsuck your backbone
ammeep
669
57k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
BBQ
matthewcrist
85
9.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
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ʹΑΔσϞ͋Γ·͢ɻ ͓༠͍߹Θͤͷ্͝ࢀՃ͍ͩ͘͞ɻ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ