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
札幌iPhone開発懇談会2020年11月資料
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
notoroid
November 23, 2020
Programming
390
1
Share
札幌iPhone開発懇談会2020年11月資料
iOS14で追加されたWidget/ウィジット設定ダイアログについての発表資料。
・ウィジット略史
・16ステップでできるウィジット設定ダイアログ
notoroid
November 23, 2020
More Decks by notoroid
See All by notoroid
New_features_in_Xcode26.3_to_Xcode26.4.pdf
notoroid
0
23
iOS26 オーディオ録音新機能 - iOS26 AVInputPickerInteraction
notoroid
0
80
Info.plist - after Xcode26.
notoroid
0
52
GeometryReader - SwiftUI
notoroid
0
90
iOS 26 SDKの新機能 (liquid抜き) - iOS26orLaterUpdateAndSceneForUIKit
notoroid
0
210
UIテスト自動化サポート- Testbed for XCUIAutomation practice
notoroid
0
220
UIViewController - Interactive PopGesture
notoroid
0
84
Xcodeショートカット 2025年版
notoroid
0
110
ZIPでくれ - Apple謹製 geocoding/ reverse geocoding
notoroid
0
160
Other Decks in Programming
See All in Programming
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
310
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.5k
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
260
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
290
Java 21/25 Virtual Threads 소개
debop
0
310
AI Assistants for YourAngular Solutions @Angular Graz, March 2026
manfredsteyer
PRO
0
130
20260320登壇資料
pharct
0
140
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
730
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
480
Claude Code Skill入門
mayahoney
0
450
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
720
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Code Reviewing Like a Champion
maltzj
528
40k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
270
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.5k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
210
[SF Ruby Conf 2025] Rails X
palkan
2
870
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.2k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
170
Transcript
ΟδοτઃఆμΠΞϩά 8JEHFU$POpHVSBUJPO$VTUPN*OUFOU
ࣗݾհ
ೳొཁ !OPUPSPJE w J04ΞϓϦ։ൃऀ w ߸͍Γ·͢ిࢉاը w !OPUPSPJE w !JSJNBTV
w ࠷ۙͷಈ w ϒϩά৽͠·ͨ͠
ॆిใࠂ͞Μ #BUUFSFDFJWFS w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ w ࠷େ ࣮ػ ϦϞʔτ
w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬ ೝՄೳ w ࣗʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ ೳ
ॆిใࠂ͞Μ #BUUFSFDFJWFS w "QQMF8BUDIରԠ w $PNQMJDBUJPOTରԠ w ॆిྃ௨ w ॆిྃΛ͑ͯ͘ΕΔ௨ΛՃ
w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔ ΛέΞ͢Δ͜ͱ͕Մೳ w Կ͔ͱߴ͍J1IPOFΛ࣋ͪͤ͞Δͷʹ༗ ༻
ॆిใࠂ͞Μ #BUUFSFDFJWFS /FX ΟδοτʹରԠ͠·ͨ͠ J04ʙ 4NBMM .FEJVN
ॆిใࠂ͞Μ #BUUFSFDFJWFS ΟδοτઃఆΛՃ͠·ͨ͠ W
͢͜ͱ w Οδοτུ࢙ w 8JEHFU,JU8JEHFU$POpHVSBUJPO w $VTUPN*OUFOU
͞ͳ͍͜ͱ w 4XJGU6*Λͬͨ8JEHFU,JUͷදࣔ
w Οδοτུ࢙ w ΟδοτઃఆμΠΞϩά w ΟδοτઃఆμΠΞϩάͷ࡞εςοϓ w ·ͱΊ
Οδοτུ࢙
J04ͰΟδοτରԠ Ճ͞Ε·ͨ͠
ͦͦΟδοτͬͯԿ J04ͷΟδοτʹͭͳ͕ΔΟδοτͱ
ḪΔ͜ͱ ,POGBCVMBUPS :BIPP8JEHFU&OHJOF
ḪΔ͜ͱ ,POGBCVMBUPS :BIPP8JEHFU&OHJOF
:BIPP8JEHFU&OHJOF
:BIPP8JEHFU&OHJOF Ξφϩά࣌ܭ σδλϧ࣌ܭ ϛϡʔδοΫ ϓϨΠϠʔ 8Jpڧ όοςϦʔྔ Ϛοϓ ఱؾ ΰϛശ
ΧϨϯμʔ ΧϨϯμʔ
"QQMF %BTICPBSE
%BTICPBSE 04ᶠ Ξφϩά࣌ܭ ఱؾ $BMDVMBUPS ΧϨϯμʔ
%BTICPBSEΟδοτͷߏ w εΩϡϞʔϑΟζϜ w 8FC༝དྷͷٕज़ w 9.- w &$."4DSJQUY w
σʔλιʔε w γεςϜʹΞΫηεՄೳ w ωοτϫʔΫͷΞΫηε
ॳJ1IPOFͷϧοΫεϥΠΫʹӨڹ J1IPOF( 04ᶠΞϓϦ 04ᶠ%BTICPBSE Οδοτ J1PE
ॳJ1IPOFͷϧοΫεϥΠΫʹӨڹ J1IPOF( 04ᶠΞϓϦ 04ᶠ%BTICPBSE Οδοτ J1PE ˞΄΅049ͷػೳ͔Βͷ࣋ͪग़͕ͩ͠ɺ ɹ࣌ܭɺఱؾͳͲΟδοτͷӨڹ͕େ͖͍
Կ͕ݴ͍͍͔ͨͱ͍͏ͱ
J1IPOF্ཱͪ͛ॳ ϑΝʔεταʔυύʔςΟؚΊͯ ΟδοτతΞϓϦͱΞϓϦ͕ࠞࡏ
ͦͷޙɺΞϓϦࢢ্ཱ͕ͪΓͱڞʹ ΟδοτతΞϓϦ৹ࠪͰ ػೳෆͱΈͳ͞ΕΔΑ͏ʹ
ΞϓϦͷ֦ுػೳͱͯ͠ 5PEBZ&YUFOTJPO͕ొ
ΞϓϦͷ֦ுػೳͱͯ͠ 5PEBZ&YUFOTJPO͕ొ &YUFOTJPOٕज़ΛΊ͍͚ͨͩͷΤα
8JEHFU,JUൃද ϚϧνϓϥοτϑΥʔϜΤωϧΪʔޮΛߟྀ
8JEHFU,JUൃද ϚϧνϓϥοτϑΥʔϜΤωϧΪʔޮΛߟྀ 4XJGU6**OUFOUٕज़ΛΊ͍͚ͨͩͷΤα
8JEHFU,JU 8JEHFU$POpHVSBUJPO
8JEHFU$POpHVSBUJPO ΟδοτઃఆμΠΞϩά
Οδοτઃఆ ԡ͠Ͱϝχϡʔදࣔ ઃఆ߲Ұཡ બࢶΛλοϓՄೳ
Οδοτઃఆ ԡ͠Ͱϝχϡʔදࣔ ઃఆ߲Ұཡ બࢶΛλοϓՄೳ $VTUPN*OUFOU QBSBNFUFS QBSBNFUFS
4JSJɺ4JSJ4IPSUDVUͰ ಋೖ͞Ε͍ͯͨ$VTUPN*OUFOUΛ ΟδοτઃఆμΠΞϩάͰ༻
$VTUPN*OUFOU $VTUPN*OUFOU)BOEMFS $VTUPN*OUFOU /46TFS"DUJWJUZ J04J1BE"QQ 1BSBNFUFST 04ͷհ *OUFOU໊ *OUFOUҾ͖ͯ *OUFOUެ։
$VTUPN*OUFOU $VTUPN*OUFOU)BOEMFS $VTUPN*OUFOU 1BSBNFUFST 04ͷհ J04J1BE8JEHFU 8JEHFUʹ$VTUPN*OUFOUΛख͠ *OUFOU໊ *OUFOUҾ͖ͯ *OUFOUެ։
None
ΟδοτઃఆμΠΞϩάͷ εςοϓຖͷखॱ
αϯϓϧίʔυ
IUUQTHJUIVCDPNOPUPSPJE 8JEHFU$POpHVSBUJPO%FNP
ΟδοτઃఆμΠΞϩάͷલఏ J04J1BEΞϓϦͷϓϩδΣΫτ ΟδοτλʔήοτΛՃ͢Δ w ઃఆμΠΞϩά͖ Οδοτઃఆ༻ʹΠϯςϯτ֦ுΛՃ͢Δ
બࢶ༻ͷఆٛ
enum DisplayTypeDefinition: String { case slot234 = "Slot2-3-4" case slot1
= "Slot1" case slot2 = "Slot2" case slot3 = "Slot3" case slot4 = "Slot4" func identifier() -> String { self.rawValue } func displayName() -> String { switch self { case .slot234: return "Stack(Slot2,3,4)" case .slot1: return "Slot1" case .slot2: return "Slot2" case .slot3: return "Slot3" case .slot4: return "Slot4" } } }
εςοϓͰऴΘΔ ΟδοτઃఆμΠΞϩά
̏ͭͷث "QQ 8JEHFU *OUFOU Λຬͨͤ
ΟδοτλʔήοτΛՃᶃ
ΟδοτλʔήοτΛՃᶄ
*OUFOUEFpOJUJPOΛઃఆ͢Δᶃ
*OUFOUEFpOJUJPOΛઃఆ͢Δᶄ
*OUFOUEFpOJUJPOΛઃఆ͢Δᶅ
*OUFOUEFpOJUJPOΛઃఆ͢Δᶆ
*OUFOUEFpOJUJPOΛઃఆ͢Δᶇ
*OUFOUEFpOJUJPOΛઃఆ͢Δᶈ
Οδοτઃఆ༻*OUFOUTΛՃ͢Δᶃ
Οδοτઃఆ༻*OUFOUTΛՃ͢Δᶄ
Οδοτઃఆ༻*OUFOUTΛՃ͢Δᶅ
4VQQPSUFE*OUFOUTΛઃఆ
ྻڍఆٛΛՃ
*OUFOU)BOEMFSΛஔ͖͑Δ
class IntentHandler: INExtension, ConfigurationIntentHandling { func provideDisplayTypeOptionsCollection(for intent: ConfigurationIntent, with
completion: @escaping (INObjectCollection<DisplayType>?, Error?) -> Void) { let displayTypeDefinitions: [DisplayTypeDefinition] = [ .slot234, .slot1, .slot2, .slot3, .slot4 ] let displayType = displayTypeDefinitions.map { (displayTypeDefinition) -> DisplayType in DisplayType(identifier: displayTypeDefinition.identifier(), display: displayTypeDefinition.displayName()) } completion(INObjectCollection(items: displayType), nil) } func defaultDisplayType(for intent: ConfigurationIntent) -> DisplayType? { return DisplayType(identifier: DisplayTypeDefinition.slot234.identifier(), display: DisplayTypeDefinition.slot234.displayName()) } }
8JEHFU͔ΒઃఆΛ͏ᶃ
8JEHFU͔ΒઃఆΛ͏ᶄ
struct GraphEntryView : View { var entry: Provider.Entry func displayType()
-> DisplayTypeDefinition { let defaultValue = DisplayTypeDefinition.slot234 let rawValue = entry.configuration.displayType?.identifier ?? defaultValue.identifier() return DisplayTypeDefinition(rawValue: rawValue) ?? defaultValue } var body: some View { switch self.displayType() { case .slot234: return Text("ελοΫදࣔ") default: return Text("ͦͷଞ") } } }
ΑΓৄ͘͠Γ͍ͨํ IUUQTJSJNBTVDPNUBHXJEHFULJU
·ͱΊ w Οδοτػೳ͕։ൃऀͷΤαͱͯ͠࠶ొ͠·ͨ͠ w "QQMF͕ͬͯ΄͍ٕ͠ज़4XJGU6*$VTUPN*OUFOUTͰ͢ w $VTUPN*OUFOTΛऔΓѻ͏ͨΊʹ׳Ε͕ඞཁͰ͢ w ͨͩ͠8JEHFUΛ࡞Δػձࠓͷͱ͜Ζͳ͍Ͱ͢
IUUQTJSJNBTVDPN <13>#MPHਵ࣌ߘத