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
iOS26時代の新規アプリ開発
Search
野瀬田 裕樹
May 20, 2026
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOS26時代の新規アプリ開発
DMM.swift #5での発表資料
野瀬田 裕樹
May 20, 2026
More Decks by 野瀬田 裕樹
See All by 野瀬田 裕樹
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
330
Human Interface Guidelines 2
yuukiw00w
0
64
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
270
HIG学習用スライド
yuukiw00w
0
190
FlutterKaigi 2025: What is iOS Assistive Access? UI considerations for Flutter
yuukiw00w
0
62
Swift6.2時代のconcurrencyを考える会
yuukiw00w
2
1.7k
実践!App Intents対応
yuukiw00w
1
500
App Intents再入門
yuukiw00w
0
87
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
290
Other Decks in Programming
See All in Programming
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
2
670
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.5k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
760
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
4.1k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
130
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
540
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
3
560
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
110
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.3k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
810
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Scaling GitHub
holman
464
140k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
The Curse of the Amulet
leimatthew05
1
13k
Paper Plane
katiecoart
PRO
1
51k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
250
Building an army of robots
kneath
306
46k
Un-Boring Meetings
codingconduct
0
310
Transcript
J04࣌ͷ৽نΞϓϦ։ൃ ాɹ༟थʢ!ZOPTFEBʣ
4QFBLFS ాɹ༟थʢ!ZOPTFEBʣ ϞόΠϧશൠͬͯ·͢ ʢJ04"OESPJE'MVUUFSʣ
J04࣌ͱͲΜͳ࣌ʁ w -JRVJE(MBTT࣌Ͱʮ6*ͷ04ࠩʯ͕࠶֦େͨ͠ w 9DPEF4XJGU͕"*ओಋ։ൃͰ͍͍͢ͷʹͳ͖ͬͯͨ
-JRVJE(MBTT࣌ w J04ͱ"OESPJEͰશʹผ6*ͷํੑͱͳͬͨ w -JRVJE(MBTTίϯςϯπΛॏࢹͯ͠ φϏήʔγϣϯपΓΛཱͨͳͤ͘͞Δ w Ұํɺ.BUFSJBM%FTJHO&YQSFTTJWFͰൃݟ༰қੑͷͨΊ φϏήʔγϣϯཱ͕ͭ͠ɺಈ͖ϙοϓͰܹ͍͠
04ʹدΓఴͬͨ 6*࣮ͷॏཁੑ্͕͕ͬͨ
"*࣌ w ެࣜඇެࣜΘ༷ͣʑͳ"*ओಋ։ൃͷͨΊͷπʔϧ͕ἧ͖ͬͯͨ w 9DPEF#VJME.$1 YDPEFUPPMT.$1ͳͲͷศརͳ.$1 w 9DPEFͷ$PEJOH*OUFMMJHFODFػೳ w "WE-FF4XJGU6*"HFOU4LJMMͳͲͷศརͳ4LJMM
"*࣌ w "*͕͍ͬͯ͡յΕʹ͍͘ඇಉظॲཧͷ࣮ݱ͕༰қʹ w 4XJGUͰ"QQSPBDIBCMF$PODVSSFODZ͕ͱͯศར w 4XJGUͳΒྫ֎ͷѻ͍࿙Εͳ͍͠ɺ Ϗϧυ͕௨͍ͬͯͯมͳ࣮ʹͳ͍ͬͯͳ͚Ε ͋Δఔ҆৺Ͱ͖Δڥ͕͍ͬͯΔ
࣮ίετ͕Լ͕Γɺ ମݧͷٻ͕͘͢͠ͳͬͨ
ͦΜͳ࣌ʹ ৽نΞϓϦΛ࡞ΔͳΒʁ
J04࣌ͷ՝ w ࣮͕"*ʹΑΓࢦؔతʹ্ w ࣌ؒతʹਓ͕ؒϘτϧωοΫʹͳΓɺ ҰํͰ"*Λ͏΄Ͳ͓͕ۚඈΜͰ͍࣌͘ w ਓ͕ؒཧղɺೝ͢Δ্ͤ͞ʹ͍ͨ͘Ίɺ VOLOPXOVOLOPXOྖҬ͕ࢦؔతʹ૿େ
"*ͱਓؒͷ྆ํʹͱͬͯ ΑΓྑ͍ڠۀڥΛߏங͢Δ
"*ͷಛੑ w "*ඇܾఆੑΛ࣋ͭͨΊɺҰఆͷ֬Ͱϛε͕͋Δ w "*ͱରͭͭ͠ࡉ͔͘ਓ͕ཧ͢Ε੍ޚͰ͖Δ͕εέʔϧ͠ͳ͍ w ҰํͰ"*ʹҕୗ͢Δܗʹͯ͠λεΫαΠζΛେ͖͍ͯ͘͘͠ͱɺ εέʔϧ͢Δ͕ޡΓͷࠞೖϦεΫ͕૿େɺৄࡉͷѲ߹͍͕Լ w ޡΓͷݮͱཧղͷଅਐΛଅ͢Έڥ͕"*ʹඞཁ
J04࣌ͷઃܭͷཁ w "*͕҆શʹมߋͰ͖Δ w ਓ͕ؒཧղΛҡ࣋͠ɺೝෛ࠴ΛݮͰ͖Δ w ΨʔυϨʔϧઃܭͱཧղ༰қੑ͕ઃܭͷཁʹͳͬͨ
ཧղͷෆʢʹೝෛ࠴ʣ w ཧղෛ࠴ɿઃܭΛཧղͤͣͱେྔͷ࣮͕Ͱ͖ΔΑ͏ʹͳͬͨ w ҙਤෛ࠴ɿͦ͏ͯ͠ੜ͞Ε࣮͚͕ͨͩ͞ΕΔͱɺ ɹɹɹɹɹจ຺͕ফ͑ͯͦͷഎܠʹ͋ΔҙਤΛѲͰ͖ͳ͘ͳΔ
ཧղͷෆʢʹೝෛ࠴ʣ w "*ͷࣗ༝ʹͤ͞Δͱɺ ҉͕ࣦΘΕɺ ΤϯδχΞͷ಄ͷதͷϝϯλϧϞσϧߏங͞Εͣɺ ίʔυͷΛ࣋ͯΔਓ͕͍ͳ͘ͳΓɺ ࣭ͷίʔυ͕େྔੜ࢈͞ΕΔՄೳੑ͕͋Δ
"*ͱਓͱͷׂ୲ w ཧղ͕༰қͳখ͍͞λεΫ"*ʹҕୗ w ཧղίετͷߴ͍λεΫ"*ͱڠಇ w "*ϨϏϡʔʹΑΔඇ੩తͳ࣭ήʔτ ʢ͓Αͼ$*ʹΑΔ੩తͳ࣭ήʔτʣ w ਓؒϨϏϡʔʹΑΔҙਤৄࡉͷѲɺϝϯλϧϞσϧߏஙͱडೖ
࣭ήʔτɿޡΓͷରࡦ w ੩తͳ࣭ήʔτɿϏϧυ$*໘ͷڧԽ ɹɹɹɹɹɹɹɹɹʢઃఆؔɺ-JOUɺΧόϨοδ੍ͳͲʣ w ඇ੩తͳ࣭ήʔτɿ"*ϨϏϡʔͷڧԽʢ؍ͷཧͳͲʣ
Ϗϧυ$*໘ͷڧԽ w ઃఆ໘Ͱͷ࠷దԽʢ"*͕ࡶͳฒߦॲཧΛॻ͖ʹ͍͘ઃఆʹͰ͖Δʣ w TXJGU-BOHVBHF.PEF W w 4XJGUͷ"QQSPBDIBCMF$PODVSSFODZઃఆͷ༗ޮԽ w
USFBU"MM8BSOJOHT BTFSSPS ͰܯࠂΛΤϥʔԽ
ઃఆͷྫ extension SwiftSetting { static let existentialAny: Self = .enableUpcomingFeature("ExistentialAny")
static let internalImportsByDefault: Self = .enableUpcomingFeature("InternalImportsByDefault") static let memberImportVisibility: Self = .enableUpcomingFeature("MemberImportVisibility") static let inferIsolatedConformances: Self = .enableUpcomingFeature("InferIsolatedConformances") static let nonisolatedNonsendingByDefault: Self = .enableUpcomingFeature("NonisolatedNonsendingByDefault") static let immutableWeakCaptures: Self = .enableUpcomingFeature("ImmutableWeakCaptures") /// ਪͷઃఆҰࣜΛఆٛͯͦ͠ΕͧΕͷtargetͰࢦఆ͢Δ static let defaultSettings: [Self] = [ .existentialAny, .internalImportsByDefault, .memberImportVisibility, .inferIsolatedConformances, .nonisolatedNonsendingByDefault, .immutableWeakCaptures, .swiftLanguageMode(.v6), .treatAllWarnings(as: .error) ] }
Ϗϧυ$*໘ͷڧԽ w -JOUܥͷઃఆʢTXJGUGPSNBUMJOU4XJGU-JOUͷ׆༻ʣ w TXJGUGPSNBUͰϑΥʔϚοτΛڧ੍ w TXJGUGPSNBUMJOU͋Δ͍4XJGU-JOUͰઃܭͷڧ੍
Ϗϧυ$*໘ͷڧԽ w ϚϧνϞδϡʔϧԽʹΑΔࢀরํͷڧ੍ w "QQ%PNBJO%BUB4PVSDF֎෦ґଘ܈ͷߏͷ MBZFSFENPEVMFߏʹ͢ΔͱࢀরํΛڧ੍Ͱ͖Δ w ςετ༰қੑͷͨΊͳΒ %BUB4PVSDF֎෦ґଘؒͰ͚ͩґଘੑٯసͤ͞Δ͚ͩͰ͍͍ w
6*ܥҰͭͷϞδϡʔϧʹ·ͱΊΔͱɺ BTTFU౷߹͕ෆཁͰΫϦʔϯϏϧυ͕࣌ؒ͘ͳ͍͍ͬͯײ͡
Ϗϧυ$*໘ͷڧԽ w ֎෦ґଘ6*Λআ͘UBSHFUͷίʔυΧόϨοδͷ੍ w ֎෦ґଘΛഉআͨ͠%PNBJO %BUB4PVSDFͷϞδϡʔϧ ίʔυΧόϨοδ͕ҰఆҎ্Ͱͳ͍ͱ$*͕མͪΔΑ͏ʹઃఆ w %PNBJO %BUB4PVSDF͔Β֎෦ґଘΛഉআ͢Δͱɺ
-JOVYڥͰTXJGUCVJMEͰ͖ΔΑ͏ʹߏஙͰ͖Δ w %FWJO(JU)VC$PQJMPUͷBHFOUͳͲ-JOVYڥͷ"*Ͱɺ ϩδοΫपΓͷݕূ͕Ͱ͖ΔΑ͏ʹͳΔ
Ϟδϡʔϧߏͷ࣮ͷྫ let appleTargets: [PackageDescription.Target] = [ .target( name: Target.firebaseClient.name, dependencies:
[ Target.dataSource.dependency, ], ), .target( name: Target.app.name, dependencies: [ Target.dataSource.dependency, Target.domain.dependency, Target.firebaseClient.dependency, ], resources: [ .process("Resources/Assets.xcassets"), .process("Resources/Localizable.xcstrings") ], ), ]
Ϟδϡʔϧߏͷ࣮ͷྫ let commonTargets: [PackageDescription.Target] = [ .target(name: Target.api.name), .target(name: Target.dataSource.name,
dependencies: [Target.api.dependency]), .target(name: Target.domain.name, dependencies: [Target.dataSource.dependency]), .testTarget( name: TestTarget.dataSourceTests.name, dependencies: [Target.dataSource.dependency, Target.api.dependency], ), .testTarget( name: TestTarget.domainTests.name, dependencies: [Target.domain.dependency], ), ]
Ϟδϡʔϧߏͷ࣮ͷྫ let isApplePlatform: Bool = { #if os(macOS) ProcessInfo.processInfo.environment["DISABLE_APPLE_TARGETS"] !=
"1" #else false #endif }() let appCoreProduct: Product = .library( name: "AppCore", type: .dynamic, targets: [Target.api.name, Target.dataSource.name, Target.domain.name] )
Ϟδϡʔϧߏͷ࣮ͷྫ let package = Package( name: "AppPackages", defaultLocalization: "ja", platforms:
[.iOS(.v26)], products: [appCoreProduct] + (isApplePlatform ? [appProduct] : []), dependencies: isApplePlatform ? [.package(...)] : [], targets: commonTargets + (isApplePlatform ? appleTargets : []) )
"*ϨϏϡʔͷڧԽ w $PEF3BCCJU$PQJMPUͳͲ"*Λ׆༻ͯ͠ޡΓΛݕ w ઃܭ࣮໘ͷϨϏϡʔɺٕज़తͳෛ࠴ͷݕͳͲ w ༷໘ͷϨϏϡʔɺΞΫηγϏϦςΟ༷ͱͷᴥᴪͷݕͳͲ w 2"؍ͷϨϏϡʔɺҟৗܥ੬ऑੑ؍ͳͲͷߟྀ࿙ΕݕͳͲ
ਓؒϨϏϡʔͷ࠶ߏங w ࣭ήʔτͱͯ͠ͷϨϏϡʔ͔Βɺ VOLOPXOVOLOPXOྖҬΛݮ͢Δ ཧղͷͨΊͷϨϏϡʔͱͯ͠࠶ߏங͢Δ w ઃܭҙਤͷཧղ࣮ͷཧղʹΑΔϝϯλϧϞσϧ֫ಘ w ཁ݅ͷѲड͚ೖΕɺ"%3ʹΑΔҙਤจ຺ͷܧঝ
·ͱΊ w J04࣌ΨʔυϨʔϧઃܭͱཧղ༰қੑͷͨΊͷઃܭ͕ඞཁ w 4XJGUͷ҆શੑΛ࠷େݶʹ׆͔ͨ͠ΨʔυϨʔϧઃܭΛߦ͓͏ w ೝෛ࠴Λੜ·ͳ͍ͨΊͷΛΓࠐ͏