Xamarin.Forms のこれまでとこれ
から
2018/11/15(木)
iOSコンソーシアムTech WG 定例会#40
Japan Xamarin User Group
田淵義人
Twitter: @ytabuchi
facebook: ytabuchi.xlsoft
営業(セールスエンジニア) 兼 新規事業開発室 室長
Xamarin コミュニティエバンジェリスト
Microsoft MVP
コミュニティ
Japan Xamarin User Group 主宰
Twitter: @ytabuchi
facebook: ytabuchi.xlsoft
Blog: Xamarin 日本語情報
2
田淵義人@エクセルソフト
Xamarin とは
C#/.NET/Visual Studio
フル “ネイティブ” アプリ
API 100% 移植
iOS は Alpha/Beta を経て当日アップデート
コード共通化
4
Xamarin
2つの開発手法
5
共通ロジック (C#)
(PCL/.NET Standard/Shared)
共通の XAML/C# の UI コード
(Xamarin.Forms)
iOS
C# UI
共通ロジック (C#)
(PCL/.NET Standard/Shared)
Android
C# UI
Windows
C# UI
Xamarin.FormsXamarin ネイティブ
ロジックのみ共通化
UIはネイティブで個別に作りこむ
Xamarin.iOS(Xamarin ネイティブ)
UI は個別
ネイティブ API は個別
PCL/.NET Standard or
Shared
計算処理
ネットワーク処理
Json, XML などの処理
SQL、ストレージなどの処理
7
Xamarin ネイティブ
iOS
C# UI
共通ロジック (C#)
(PCL/.NET Standard/Shared)
Android
C# UI
Windows
C# UI
Xamarin ネイティブ
ロジックのみ共通化
UIはネイティブで個別に作りこむ
8
Storyboard
9
@IBAction func SampleButton_TouchUpInside(_ sender: Any) {
//アラート作成
let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.alert)
//アクション作成
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { (_) in
//Some Action
}))
//アラートを表示
present(alert, animated: true, completion: nil)
}
ViewController
void SampleButton_TouchUpInside(object sender, EventArgs e)
{
//アラート作成
var alert = UIAlertController.Create(title: "Title", message: "Message", preferredStyle: UIAlertControllerStyle.Alert);
//アクション作成
alert.AddAction(UIAlertAction.Create(title: "OK", style: UIAlertActionStyle.Default, handler: null));
//アラート表示
PresentViewController(alert, animated: true, completionHandler: null);
}
Xamarin.Forms
抽象化UIライブラリ
最大公約数
ワンソース・ネイティブUI/UX
XAML/MVVM
拡張可能
Custom Renderer/Dependency
Services
11
Xamarin.Forms
共通ロジック (C#)
(PCL/.NET Standard/Shared)
共通の XAML/C# の UI コード
(Xamarin.Forms)
Xamarin.Forms
XAML/C#
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="App1.Views.XamlPage"
...
Title="Login Page">
<StackLayout Padding="8" Spacing="4">
<Image Source="/Images/Xamagon.png"
HeightRequest="300"
WidthRequest="300" />
<Label FontSize="Large"
Text="Xamarin.Forms Login Page" />
<Entry x:Name="entry"
Text="{Binding Name}" />
<Button x:Name="loginButton"
Clicked="LoginButton_Clicked"
Text="Login" />
</StackLayout>
</ContentPage>
public class CSharpPage : ContentPage
{
public CSharpPage()
{
var image = new Image { ... };
var label = new Label {... };
var entry = new Entry { ... };
var loginButton = new Button {... };
loginButton.Clicked += LoginButton_Clicked;
Title = "Login Page";
Content = new StackLayout
{
Children =
{
image,
label,
entry,
loginButton
},
};
}
}
12
Xamarin.Forms のいままでとこれから
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-1.0/
基本的なすべての機能
Xamarin.Forms 1.0 (2014/5/28)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-1.3/
Grid のデフォルトが * に
MasterDetailPage.ShouldShowToolbarButton を追加
VisualElement.Navigation にアニメーションを enable/disable にするオーバーロード
INavigation により複雑なナビゲーションシナリオに対応するメソッド追加
XAML でコンテントノードのテキストをサポート <Label>Hello World</Label>
Styles が Behaviors と Triggers をサポート
DataTrigger と MultiTrigger を追加
15
Xamarin.Forms 1.3 (2014/12/24)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-1.4/
ScrollView
current scroll offset を取得する scrollX, scrollY プロパティ
ListView
Separatorのプロパティ
Header/Footer のプロパティ
Pull To Refresh プロパティ
Forms.Application
ModalPushed/ModalPopped/ModalPushing/ModalPopping イベント
16
Xamarin.Forms 1.4 (2015/03/09)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-1.5/
Xamarin.Forms 依存関係のアップデート
Xamarin.Android.Support.v4 22.2.1.0
Xamarin.Forms.Maps 依存関係のアップデート
Xamarin.Android.Support.v7.AppCompat 22.2.1.0
Xamarin.Android.Support.v7.MediaRouter 22.2.1.0
Xamarin.GooglePlayServices.Maps 25.0.0.0
17
Xamarin.Forms 1.5 (2015/09/16)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-2.0/
SearchBar に FontAttributes, FontFamily, FontSize プロパティ
Xalign が HorizontalTextAlignment、YAlign が VerticalTextAlignment に(破
壊的変更)
PinchGestureRecognizer 追加
PanGestureRecognizer 追加
18
Xamarin.Forms 2.0 (2015/11/17)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-2.1/
UWP サポート(マップ以外)
ControlTemplates。ContentPage, ContentView のもとになる TemplatedPage
と TemplatedView が用意された。自由に Page や View を作成できる
DataTemplateSelector で ListView の ItemsSource の内容により選択ができる
Effects でより簡単にレンダリング
HasUnevenRows で動的セルサイズサポート
19
Xamarin.Forms 2.1 (2016/03/01)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-2.2/
Open Source になった!
https://github.com/xamarin/Xamarin.Forms/tags?after=beta-2.2.0-pre2
GooglePlayServices バージョンアップ
Margin プロパティ
UWP のマップ
共有プロジェクトに各PFのコントロールを置けるように
2D ScrollView(ScrollOrientation.Both)サポート
20
Xamarin.Forms 2.2 (2016/04/27)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-2.3/
Bindable picker
UWP の OnIdiom が Desktop サポート
CornerRadius が Frame に追加
WPF の Colors class と同じ色名をサポート
21
Xamarin.Forms 2.3 (2016/06/16)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-2.4/
.NET Standard サポート!
Fast Renderers(Image, Button, and Label)
22
Xamarin.Forms 2.4 (2017/09/27)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-2.5/
Custom Renderer が破壊的変更(Android のレンダリング)
ViewRenderer ではなく ViewRenderer(Context)
Forms では Context ではなく、ローカルの context
対応フレームワークアップデート
Android Target Framework 7.0 (monoAndroid70)
Android Support Libraries 25.4.0.2
Google Play Services 42.1024.0
Firebase 42.1024.0
Forms Embedding
23
Xamarin.Forms 2.5 (2015/11/17)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-3.0/
他のプラットフォームサポート
macOS/Tizen/WPF/GTK など
FlexLayout
ResourceDictionary の改善
右から左のレイアウトサポート
StyleSheets
Visual State Manager
24
Xamarin.Forms 3.0 (2018/05/15)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-3.1/
Android Bottom Tabs
25
Xamarin.Forms 3.1 (2018/06/29)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-3.2/
TitleView
ScaleX と ScaleY
CSS で border-color サポート
SwipeGestureRecognizer
26
Xamarin.Forms 3.2 (2018/09/08)
https://developer.xamarin.com/releases/xamarin-
forms/xamarin-forms-3.3/
Android で新しい IImageViewHandler API
Label の下線/取り消し線サポート
iOS で WKWebView
MultiView で TabStop/TabIndex サポート
Label の MaxLines サポート
27
Xamarin.Forms 3.3 (2018/11/02)
Feature Roadmap ·
xamarin/Xamarin.Forms Wiki
Xamarin.Forms Feature Roadmap —
Xamarin Forums
Xamarin.Forms (GitHub)
NuGet Gallery | Xamarin.Forms
(Nuget.org)
Xamarin.Forms Releases (リリース情報)
28
ロードマップ/リリース
Help Wanted
Check out our guide on
submitting proposals.
Please join the discussion
by visiting the Roadmap
forum thread.
29
Proposal/Discussion
デモ
30
まとめ
C#/.NET/Visual Studio
フル “ネイティブ” アプリ
API 100% 移植
コード共通化
32
Xamarin
2つの開発手法
33
共通ロジック (C#)
(PCL/.NET Standard/Shared)
共通の XAML/C# の UI コード
(Xamarin.Forms)
iOS
C# UI
共通ロジック (C#)
(PCL/.NET Standard/Shared)
Android
C# UI
Windows
C# UI
Xamarin.FormsXamarin ネイティブ
ロジックのみ共通化
UIはネイティブで個別に作りこむ
Help Wanted
Check out our guide on
submitting proposals.
Please join the discussion
by visiting the Roadmap
forum thread.
34
Proposal/Discussion
ありがとうございます
Japan Xamarin User Group
田淵義人
Twitter: @ytabuchi
facebook: ytabuchi.xlsoft
35

Xamarin.Forms のこれまでとこれから