SlideShare une entreprise Scribd logo
1  sur  19
Xamarin.iOS 開発者から見た Swift
Swift愛好会 vol35@G's Academy
2018年9月18日 鈴木友宏
興味無いとは思いますが‥自己紹介
鈴木友宏
Xamarin.iOS, Realmとかの技術支援をやってます。
車とドライブをこよなく愛するオッサンです。
ほそぼそとBlogもやっています。
http://hiro128.hatenablog.jp/
Twitter
@hiro128_777
2
ご質問
• Xamarin知ってるよ~ !
• Xamarin使ったことあるよ~!
3
4
って何?
• クロスプラットフォーム
• 完全なネイティブアプリを作成可能
• (iOS・Android・UWP) のAPI カバー率 100 %
• C# / .NET / Visual Studio のエコシステムを享受できる
Xamarin.iOSとは
5
Xamarin Native Xamarin Forms
ロジックのみ共通化
UIはネイティブで個別に作りこむ
ロジックとUIを共通化
UIは各プラットフォームの
同じ役割のUIが自動マッピング
Shared C# App Logic
(.NET Standard)
iOS
C# UI
Android
C# UI
Windows
C# UI
Shared C# App Logic
(.NET Standard)
Shared C# UI Code
(Xamarin.Forms)
ここが
Xamarin.iOS
なんで、Xamarin.iOS なんてイロモノを使ったの
• Objective-C が辛すぎて逃げたかった。(Swift はリリースの直前の時期‥)
• ずっと C# で Windows アプリを開発していた。
• Windows アプリの iOS への移植を依頼されたがロジックを全て作り直すの
は嫌だった。
6
ですが、最大の理由は!!
Miguel de Icaza
(mono, Xamarin
の産みの親)のファ
ンだから
7
Xamarin.iOS 使ってみると
• Xamarin.iOS の情報などほとんど見つからない。
• Swift の情報を調べまくり、C#に移植する日々。
8
あれ??だんだんSwiftが読めるようになってきたぞ!?
Swift のことをもっと知りたく
なってきました。
9
Xamarin.iOS 開発者から見た Swift
1
Xcode の方が圧倒的にビルドが早い!!
• Swift は余計なステップがなく直接コンパイルするので早い!
(当たり前ことですが(笑))
• Xamarin.iOS では、C#→IL→iOS ネイティブコードなので遅い。
1
Swift も C#もできること自体に差はない
• できることは基本的に一緒。
• だが、C#の文法に古さを感じてしまう。
• セミコロン必須。
• 言語レベルでのディクショナリサポートが無い。(クラスのインポートが必要)
• Optionalをサポートしない。
• Swift は世代が新しいので、モダンなコードが書けてカッコイイ。
12
Optional ってエレガント。C#にも早く欲しい
• 安全で、モダンな感じがカッコイイ。
• C#7 でも値型(struct) では Nullable を利用できる。
• C#8 で導入予定とのこと。
13
Swift
let string: String? = "Swift"
if let bindString = string
{
bindString = bindString.uppercaseString
}
C#
var text = "CSharp";
if (!string.IsNullOrEmpty(text))
{
var bindString = text.ToUpper();
}
その他、シンタックスシュガーが充実
• コードから冗長部分がなくなりスッキリする。
• エレガントなコードが書ける。
14
Swift
var c = { print("Swift") }
c()
var dictionary = ["one": 1, "two": 2]
for (key, value) in dictionary
{
print( "key = (key), value =
(value)" )
}
C#
Action c = () => Console.WriteLine("CSharp");
c();
var dic = new Dictionary<string, int>() { {"one",
1}, {"two", 2} };
foreach (var kvp in dic)
{
Console.WriteLine("key = {0}, value = {1}",
kvp.Key, kvp.Value);
}
プロトコトルのメソッドが区別ができない??
15
Swift
extension PhotoCaptureProcessor : AVCapturePhotoCaptureDelegate
{
func photoOutput(_ output: AVCapturePhotoOutput, willBeginCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings)
{
}
func photoOutput(_ output: AVCapturePhotoOutput, willCapturePhotoFor resolvedSettings: AVCaptureResolvedPhotoSettings)
{
}
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)
{
}
なぜ
メソッド名が一緒??
プロトコトルのメソッドが区別ができない??
16
C#
[Protocol]
[Register ("AVCapturePhotoCaptureDelegate", false)]
public class AVCapturePhotoCaptureDelegate : NSObject, IAVCapturePhotoCaptureDelegate, INativeObject, IDisposable
{
[Export("captureOutput:willBeginCaptureForResolvedSettings:")]
public virtual void WillBeginCapture(AVCapturePhotoOutput captureOutput, AVCaptureResolvedPhotoSettings resolvedSettings);
[Export("captureOutput:willCapturePhotoForResolvedSettings:")]
public virtual void WillCapturePhoto(AVCapturePhotoOutput captureOutput, AVCaptureResolvedPhotoSettings resolvedSettings);
[Export ("captureOutput:didFinishProcessingPhoto:error:")]
public virtual void DidFinishProcessingPhoto (AVCapturePhotoOutput output, AVCapturePhoto photo, NSError error);
メソッド名が Swift と違うExport 属性を見ると判断できる
Xamarin.iOSは気をつけないとすぐメモリリークする
• iOS の世界のオブジェクト(NSObject 派生のクラス)は、後始末をきちんとし
ないとすぐメモリリークする。
• WeakReference<T>を適切に使用する。
17
力技の弊害が出てしまっている。
まとめ
18
Swift は iOS, macOS が中心にあり、言語とプラット
フォームが密接に結びついている。
C# は mono の存在により、言語の独立性が高い。
Swift には覚えれば覚えるほど
ハマって行く魅力がある。
Swift ではなく iOS API にハ
マって行くのかも知れない。
C# はそのようなカリスマ的魅力は感
じないが、素人に優しくツールとして
万人に受け入れられやすい。
Apple と マイクロソフトの特徴がよく表れている。
ご静聴ありがとうございました。

Contenu connexe

Tendances

0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)
MasanoriSuganuma
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
takaya imai
 

Tendances (20)

0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)0から理解するニューラルネットアーキテクチャサーチ(NAS)
0から理解するニューラルネットアーキテクチャサーチ(NAS)
 
カルマンフィルタ入門
カルマンフィルタ入門カルマンフィルタ入門
カルマンフィルタ入門
 
DeNAにおける先端AI技術活用のチャレンジ
DeNAにおける先端AI技術活用のチャレンジDeNAにおける先端AI技術活用のチャレンジ
DeNAにおける先端AI技術活用のチャレンジ
 
[DL輪読会]Network Deconvolution
[DL輪読会]Network Deconvolution[DL輪読会]Network Deconvolution
[DL輪読会]Network Deconvolution
 
第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料
第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料
第34回CV勉強会「コンピュテーショナルフォトグラフィ」発表資料
 
点群深層学習 Meta-study
点群深層学習 Meta-study点群深層学習 Meta-study
点群深層学習 Meta-study
 
実務と論文で学ぶジョブレコメンデーション最前線2022
実務と論文で学ぶジョブレコメンデーション最前線2022実務と論文で学ぶジョブレコメンデーション最前線2022
実務と論文で学ぶジョブレコメンデーション最前線2022
 
Power Query Online
Power Query OnlinePower Query Online
Power Query Online
 
東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」(一部文字が欠けてます)
東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」(一部文字が欠けてます)東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」(一部文字が欠けてます)
東京大学2020年度深層学習(Deep learning基礎講座) 第9回「深層学習と自然言語処理」(一部文字が欠けてます)
 
CV分野におけるサーベイ方法
CV分野におけるサーベイ方法CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
 
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
 
自動運転サービスの認証認可
自動運転サービスの認証認可自動運転サービスの認証認可
自動運転サービスの認証認可
 
データサイエンティスト向け性能問題対応の基礎
データサイエンティスト向け性能問題対応の基礎データサイエンティスト向け性能問題対応の基礎
データサイエンティスト向け性能問題対応の基礎
 
SSII2019企画: 点群深層学習の研究動向
SSII2019企画: 点群深層学習の研究動向SSII2019企画: 点群深層学習の研究動向
SSII2019企画: 点群深層学習の研究動向
 
【論文読み会】Autoregressive Diffusion Models.pptx
【論文読み会】Autoregressive Diffusion Models.pptx【論文読み会】Autoregressive Diffusion Models.pptx
【論文読み会】Autoregressive Diffusion Models.pptx
 
音声感情認識の分野動向と実用化に向けたNTTの取り組み
音声感情認識の分野動向と実用化に向けたNTTの取り組み音声感情認識の分野動向と実用化に向けたNTTの取り組み
音声感情認識の分野動向と実用化に向けたNTTの取り組み
 
TIS 戦略技術センター AI技術推進室紹介
TIS 戦略技術センター AI技術推進室紹介TIS 戦略技術センター AI技術推進室紹介
TIS 戦略技術センター AI技術推進室紹介
 
【論文読み会】PiCO_Contrastive Label Disambiguation for Partial Label Learning.pptx
【論文読み会】PiCO_Contrastive Label Disambiguation for Partial Label Learning.pptx【論文読み会】PiCO_Contrastive Label Disambiguation for Partial Label Learning.pptx
【論文読み会】PiCO_Contrastive Label Disambiguation for Partial Label Learning.pptx
 
Vertica eonモードの活用シーン
Vertica eonモードの活用シーンVertica eonモードの活用シーン
Vertica eonモードの活用シーン
 

Similaire à Xamarin.iOS 開発者から見た Swift

Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
m ishizaki
 

Similaire à Xamarin.iOS 開発者から見た Swift (20)

Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
 
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
 
Xamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれXamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれ
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要
 
WPF開発者がXamarin.Macを触るその前に
WPF開発者がXamarin.Macを触るその前にWPF開発者がXamarin.Macを触るその前に
WPF開発者がXamarin.Macを触るその前に
 
JXUG ハンズオンもくもく会
JXUG ハンズオンもくもく会 JXUG ハンズオンもくもく会
JXUG ハンズオンもくもく会
 
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
Xamarin 概要 @ 2014/10/18 わんくま同盟 東京勉強会 #92
 
Xamarin Native vs Xamarin Forms
Xamarin Native vs Xamarin FormsXamarin Native vs Xamarin Forms
Xamarin Native vs Xamarin Forms
 
Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?
 
これから始めるXamarin開発
これから始めるXamarin開発これから始めるXamarin開発
これから始めるXamarin開発
 
20171202 Xamarinの歩き方
20171202 Xamarinの歩き方20171202 Xamarinの歩き方
20171202 Xamarinの歩き方
 
Xamarinを利用したアプリ開発
Xamarinを利用したアプリ開発Xamarinを利用したアプリ開発
Xamarinを利用したアプリ開発
 
Xamarin 概要
Xamarin 概要Xamarin 概要
Xamarin 概要
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめに
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
 
Xamarin の概要と活用事例
Xamarin の概要と活用事例Xamarin の概要と活用事例
Xamarin の概要と活用事例
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
 
Xamarin 実戦投入時の留意点再確認
Xamarin 実戦投入時の留意点再確認Xamarin 実戦投入時の留意点再確認
Xamarin 実戦投入時の留意点再確認
 
10分で分かるxamarin
10分で分かるxamarin10分で分かるxamarin
10分で分かるxamarin
 
Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2Xamarin で クラシックデスクトップ 2
Xamarin で クラシックデスクトップ 2
 

Plus de Tomohiro Suzuki

Visual Studio といえば 当然 Visual Studio for Mac だよね!
Visual Studio といえば当然 Visual Studio for Mac だよね!Visual Studio といえば当然 Visual Studio for Mac だよね!
Visual Studio といえば 当然 Visual Studio for Mac だよね!
Tomohiro Suzuki
 

Plus de Tomohiro Suzuki (13)

Net6 Overview
Net6 OverviewNet6 Overview
Net6 Overview
 
.NET Framework アプリケーションの NET 5 への 移行を考える
.NET Framework アプリケーションの NET 5 への 移行を考える.NET Framework アプリケーションの NET 5 への 移行を考える
.NET Framework アプリケーションの NET 5 への 移行を考える
 
Xamarin.iOS の仕組みを理解しよう!
Xamarin.iOS の仕組みを理解しよう!Xamarin.iOS の仕組みを理解しよう!
Xamarin.iOS の仕組みを理解しよう!
 
de:code2019 MW52 モバイルアプリ、SPA?ネイティブ? UX/UI の違いと技術選択のポイント
de:code2019 MW52 モバイルアプリ、SPA?ネイティブ?UX/UI の違いと技術選択のポイントde:code2019 MW52 モバイルアプリ、SPA?ネイティブ?UX/UI の違いと技術選択のポイント
de:code2019 MW52 モバイルアプリ、SPA?ネイティブ? UX/UI の違いと技術選択のポイント
 
Another Visual Studio - Visual Studio for Mac
Another Visual Studio - Visual Studio for MacAnother Visual Studio - Visual Studio for Mac
Another Visual Studio - Visual Studio for Mac
 
Visual Studio といえば 当然 Visual Studio for Mac だよね!
Visual Studio といえば当然 Visual Studio for Mac だよね!Visual Studio といえば当然 Visual Studio for Mac だよね!
Visual Studio といえば 当然 Visual Studio for Mac だよね!
 
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオンJXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
JXUG Windowsアプリを開発している皆さん、C#でスマホアプリ開発を試してみませんか?ハンズオン
 
JXUG Xamarin.iOS & Xamarin.Android App Center ハンズオン
JXUG Xamarin.iOS & Xamarin.Android App Center ハンズオンJXUG Xamarin.iOS & Xamarin.Android App Center ハンズオン
JXUG Xamarin.iOS & Xamarin.Android App Center ハンズオン
 
MacでiOSアプリの実機ビルドと実機テストを設定する際のつまづきポイント
MacでiOSアプリの実機ビルドと実機テストを設定する際のつまづきポイントMacでiOSアプリの実機ビルドと実機テストを設定する際のつまづきポイント
MacでiOSアプリの実機ビルドと実機テストを設定する際のつまづきポイント
 
Cocos sharpformsの使用例
Cocos sharpformsの使用例Cocos sharpformsの使用例
Cocos sharpformsの使用例
 
がんばれガンプ ソルバルウを倒せについて
がんばれガンプ ソルバルウを倒せについてがんばれガンプ ソルバルウを倒せについて
がんばれガンプ ソルバルウを倒せについて
 
がんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せがんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せ
 
Cocos sharpでゲーム開発してみました
Cocos sharpでゲーム開発してみましたCocos sharpでゲーム開発してみました
Cocos sharpでゲーム開発してみました
 

Xamarin.iOS 開発者から見た Swift