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
Androidエンジニア目線のKMM / iOSエンジニア目線のKMM
Search
watanave
May 19, 2021
Programming
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Androidエンジニア目線のKMM / iOSエンジニア目線のKMM
watanave
May 19, 2021
More Decks by watanave
See All by watanave
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
5.3k
Flutter実践開発に書かなかったこと
watanave
0
85
Flutterビギナーのための Widget完全攻略
watanave
0
48
決めず、語らずのリーダーシップ
watanave
0
580
複数プロジェクトを横断するゆめみテックリードの戦略
watanave
0
140
Why does Activity die soon?
watanave
0
370
Anko試食会
watanave
0
2.4k
Other Decks in Programming
See All in Programming
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
10
5.5k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.7k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.2k
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
Inside Stream API
skrb
1
730
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
5.2k
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
How to build a perfect <img>
jonoalderson
1
5.7k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Abbi's Birthday
coloredviolet
2
8.1k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
610
Navigating Team Friction
lara
192
16k
How to Ace a Technical Interview
jacobian
281
24k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
A Modern Web Designer's Workflow
chriscoyier
698
190k
So, you think you're a good person
axbom
PRO
2
2.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
"OESPJEΤϯδχΞઢͷ,.. J04ΤϯδχΞઢͷ,.. גࣜձࣾελσΟετºגࣜձࣾΏΊΈ߹ಉษڧձ :PIUB8BUBOBWF
"CPVUNF :PIUB8BUBOBWF גࣜձࣾΏΊΈJ04"OESPJE5FDI-FBE ւಓࡏॅͰࣇͷ 🕊XBUBOBWF !4VTBO@KBDLP 🐙XBUBOBWF XBUBOBWFY
,..ͱ
,..ͱ w ,PUMJO.VMUJQMBUGPSNGPS.PCJMF w ,PUMJOͰॻ͍ͨιʔε͕ "OESPJEͱJ04Ͱಈ͘ʂ IUUQTLPUMJOMBOHPSHEPDTNVMUJQMBUGPSNIUNM
'MVUUFSͱͲ͏ҧ͏ʁ IUUQTLPUMJOMBOHPSHEPDTNPCJMFBSDIJUFDULNNBQQIUNMUIBOLTUPDPOUSJCVUPST
"OESPJEΤϯδχΞઢͷ,.. J04ΤϯδχΞઢͷ,..
"OESPJEΤϯδχΞࢹͷ,.. w ීஈͷ"OESPJEΞϓϦ։ൃͱͲ͏ҧ͏ʁ w J04ͷྀඞཁʁ
։ൃڥʁ w "OESPJE4UVEJP ,..ϓϥάΠϯ w WFSTJPOPSIJHIFS w όʔδϣϯޓੑʹҙ w "OESPJE4UVEJP
w ,PUMJOϓϥάΠϯ w ,..ϓϥάΠϯ
"OESPJE(SBEMFQMVHJO w Ҏ্ඇରԠ w ͔͠͠ɺϫʔΫΞϥϯυͰར༻Մೳ w IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,5 w %SPJE,BJHJΞϓϦ͜ͷϫʔΫΞϥϯυΛ͍ͬͯΔ
ύοͱݟϚϧνϞδϡʔϧϓϩδΣΫτ w ςϯϓϨʔτͰ৽نϓϩδΣΫτ࡞Δͱʜ w "OESPJEΞϓϦϞδϡʔϧ w ,..ڞ௨Ϟδϡʔϧ w JPT"QQԼ9DPEFͷϓϩδΣΫτ w
ϚϧνϦϙδτϦՄ "OESPJEΞϓϦϞδϡʔϧ 9DPEFϓϩδΣΫτ ڞ௨Ϟδϡʔϧ
ڞ௨Ϟδϡʔϧͷத w DPNNPO.BJOʹڞ௨ίʔυ w ϓϥοτϑΥʔϜݻ༗ίʔυͦΕͧΕͷ σΟϨΫτϦԼʹ w DPNNPO.BJOʹએݴͨ͠JOUFSGBDFΛ֤ϓ ϥοτϑΥʔϜͰ࣮ w
FYQFDUBDUVBMͱ͍͏Έ "OESPJEݻ༗ίʔυ J04ݻ༗ίʔυ ڞ௨ίʔυ
ϥΠϒϥϦબఆ৻ॏʹ w 🙅+BWBϥΠϒϥϦ͑ͳ͍ w %BHHFSˠ,PJO ,PEFJO w 3FUSP fi Uˠ,UPS
w 3PPNˠ4RMEFMJHIU w IUUQTHJUIVCDPN""LJSB,PUMJO.VMUJQMBUGPSN-JCSBSJFT
$PSPVUJOFTͷѻ͍ʹҙ͕ඞཁ w J04 ,PUMJO/BUJWF ͷ$PSPVUJOFTγϯάϧεϨου w ϚϧνεϨουόʔδϣϯผϒϥϯν dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3-native-mt")
{ version { strictly("1.4.3-native-mt" ) } } }
$PSPVUJOFTͷѻ͍ʹҙ͕ඞཁ w J04 ,PUMJO/BUJWF ҆શͳฒྻॲཧͷͨΊʹGSP[FOͱ͍͏Έ͕ w "OESPJEΤϯδχΞ͕ීஈ௨Γʹڞ௨ίʔυΛ࣮͢Δͱ J04͚ͩΫϥογϡ💥ͷΑ͏ͳ͜ͱ͕ى͜ΓಘΔ MainScope().launch
{ var str = “string " withContext(Dispatchers.Main) { str = “main " } withContext(Dispatchers.Default) { str = "default " } )
J04ΤϯδχΞࢹͷ,.. w ීஈͷJ04ΞϓϦ։ൃͱͲ͏ҧ͏ʁ w ԿΛ֮͑ͳ͚ΕͳΒͳ͍ʁ w ,..ͷίʔυͲ͏ͬͯݺͼग़͢ͷʁ w ݴ͍͍ͨ͜ͱ͕ଟ͗͢ΔͷͰۦ͚Ͱ
։ൃڥʁ w ͍ͭ௨Γͷ9DPEF w WFSTJPOPSIJHIFS w ,PUMJOίʔυॻ͘ͳΒ"OESPJE4UVEJP ,..ϓϥάΠϯ
,PUMJOͱ4XJGUࣅͯΔʁ WBM⁶MFU GVOD⁶GVO 7PJE⁶6OJU QSPUPDPM⁶JOUFSGBDF TXJUDI⁶XIFO FOVN⁶TFBMEDMBTTʁ ͋Δఔͷֶशίετඞཁ͔ fun
test(str: String?) { str?.count() // ·͘͞͠OptionalνΣΠϯʂ str!!.count() // ڧ੍Unwra p if (str == null) retur n // ͜͜OptionalνΣΠϯ͍Βͳ͍ͷ⁉ str.count( ) } Ұݟɺҙຯෆ໌ͳεϚʔτΩϟετ
(SBEMFͱ͍͏ϏϧυγεςϜ val iosTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget =
if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true ) ::iosArm6 4 els e ::iosX6 4 iosTarget("ios") { binaries { framework { baseName = "shared " } } } ,..ͷϞδϡʔϧ⁶9DPEFͷλʔήοτʁʁʁ
J04ΤϯδχΞ͕֮͑Δඞཁ͋Δ͔ʁ IUUQTLPUMJOMBOHPSHEPDTNPCJMFPSHBOJ[FQSPDFTTBSPVOELNNIUNMBQQSPBDIFTUPPSHBOJ[JOHUFBNXPSLGPSNVMUJQMBUGPSNQSPKFDUT
,PUMJOίʔυΛͲ͏࣮ͬͯߦ͢Δʁ w J04ͷ,PUMJO ,PUMJO/BUJWF 0CK$ޓ w ,PUMJOίϯύΠϥGSBNFXPSLΛੜͯ͘͠ΕΔ w ,PUMJOͰ"'/FUXPSLJOH͕͑Δ w
"3$ͱ౷߹͞ΕͯΔ
,PUMJOίʔυΛͲ͏࣮ͬͯߦ͢Δʁ IUUQTLPUMJOMBOHPSHEPDTOBUJWFPCKDJOUFSPQIUNMVTBHF *OUFSPQFSBCJMJUZXJUI4XJGU0CKFDUJWF$
,PUMJOίʔυΛͲ͏࣮ͬͯߦ͢Δʁ w GSBNFXPSLΛJNQPSU͢Δ IUUQTLPUMJOMBOHPSHEPDTNPCJMFJOUFHSBUFJOFYJTUJOHBQQIUNMDPOOFDUUIFGSBNFXPSLUPZPVSJPTQSPKFDU val packForXcode by tasks.creating(Sync::class) { group
= "build " val mode = System.getenv("CONFIGURATION") ?: "DEBUG " val targetName = "ios " val framework = kotlin.targets.getByName<KotlinNative > inputs.property("mode", mode ) dependsOn(framework.linkTask ) val targetDir = File(buildDir, "xcode-frameworks" ) from({ framework.outputDirectory } ) into(targetDir ) }
,PUMJOίʔυΛͲ͏࣮ͬͯߦ͢Δʁ w GSBNFXPSLΛJNQPSU͢Δ IUUQTLPUMJOMBOHPSHEPDTNPCJMFJOUFHSBUFJOFYJTUJOHBQQIUNMDPOOFDUUIFGSBNFXPSLUPZPVSJPTQSPKFDU
ݟΒ͵Τϥʔ 'VODUJPOEPFTOUIBWFPSJOIFSJU!5ISPXTBOOPUBUJPOBOEUIVTFYDFQUJPOJTOU QSPQBHBUFEGSPN,PUMJOUP0CKFDUJWF$4XJGUBT/4&SSPS *UJTDPOTJEFSFEVOFYQFDUFEBOEVOIBOEMFEJOTUFBE1SPHSBNXJMMCFUFSNJOBUFE 6ODBVHIU,PUMJOFYDFQUJPO99999999 ,PUMJOίʔυͰ!5ISPXTΞϊςʔγϣϯΛ͚ͭΕͯΔ
J04 ,PUMJO/BUJWF ͚ͩϏϧυෆՄɾίʔυิෆೳʁ w IJFSBSDIJDBMQSPKFDUTUSVDUVSF IUUQTLPUMJOMBOHPSHEPDTNJHSBUJOHNVMUJQMBUGPSNQSPKFDUUPIUNMNJHSBUFUPUIFIJFSBSDIJDBMQSPKFDUTUSVDUVSF ͜Ε͕ ͜͏ͳΔ
J04 ,PUMJO/BUJWF ͚ͩϏϧυෆՄɾίʔυิෆೳʁ w IJFSBSDIJDBMQSPKFDUTUSVDUVSF IUUQTLPUMJOMBOHPSHEPDTNJHSBUJOHNVMUJQMBUGPSNQSPKFDUUPIUNMNJHSBUFUPUIFIJFSBSDIJDBMQSPKFDUTUSVDUVSF
·ͱΊ w "OESPJEΤϯδχΞࢹͰ w ,..ϚϧνϞδϡʔϧϓϩδΣΫτ w ϥΠϒϥϦબఆͱίϧʔνϯؾΛΔ͠ w J04ΤϯδχΞ w
,PUMJO(SBEMFͷֶशίετ͋Δ w ͦ͜"OESPJEΤϯδχΞʹͤΔͱ͍͏બࢶ͋Δ w ,PUMJOͷίʔυ0CK$ޓ w J04 ,PUMJO/BUJWF ͚ͩϏϧυෆՄɾίʔυิෆೳͨ·ʹ͋Δʁ