Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
iOS26時代の新規アプリ開発
Search
野瀬田 裕樹
May 20, 2026
Programming
280
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 野瀬田 裕樹
速習iPhone Duo対応
yuukiw00w
2
960
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
300
ネイティブiOSアプリだからできること
yuukiw00w
0
47
野瀬田とSwift愛好会
yuukiw00w
0
39
uhooiさん発ランダムタスクにチャレンジしよう!
yuukiw00w
1
83
ViewModelって200種類あんねん
yuukiw00w
0
60
Validate your App Intents adoption with AppIntentsTesting
yuukiw00w
0
58
App Intentsを実装しよう
yuukiw00w
0
59
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
400
Other Decks in Programming
See All in Programming
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
320
Heart of Swift Concurrency
koher
0
1.2k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.4k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
130
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
190
FreeBSDでZabbixを動かす
kenkino
0
350
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
120
The Rails Doctrine Decade
koic
2
490
setup-vp GitLab対応の裏側
naokihaba
0
150
Are APIs Still Relevant in the AI Era?
soyuka
0
420
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Scaling GitHub
holman
464
140k
So, you think you're a good person
axbom
PRO
2
2.2k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Code Reviewing Like a Champion
maltzj
528
40k
Fireside Chat
paigeccino
43
4k
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 ೝෛ࠴Λੜ·ͳ͍ͨΊͷΛΓࠐ͏