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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
野瀬田 裕樹
May 20, 2026
Programming
250
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
350
Human Interface Guidelines 2
yuukiw00w
0
71
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
280
HIG学習用スライド
yuukiw00w
0
200
FlutterKaigi 2025: What is iOS Assistive Access? UI considerations for Flutter
yuukiw00w
0
64
Swift6.2時代のconcurrencyを考える会
yuukiw00w
2
1.8k
実践!App Intents対応
yuukiw00w
1
510
App Intents再入門
yuukiw00w
0
96
Flutterで備える!Accessibility Nutrition Labels完全ガイド
yuukiw00w
0
290
Other Decks in Programming
See All in Programming
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
320
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
470
FDEが実現するAI駆動経営の現在地
gonta
2
250
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
130
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
210
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
130
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
120
メールのエイリアス機能を履き違えない
isshinfunada
0
210
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.8k
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
160
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
108
250k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
It's Worth the Effort
3n
188
29k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
How GitHub (no longer) Works
holman
316
150k
Product Roadmaps are Hard
iamctodd
55
12k
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 ೝෛ࠴Λੜ·ͳ͍ͨΊͷΛΓࠐ͏