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
20211015 Mac CatalystでmacOS用アプリを作る
Search
Kei Ito
October 15, 2021
Programming
4.6k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20211015 Mac CatalystでmacOS用アプリを作る
Kei Ito
October 15, 2021
More Decks by Kei Ito
See All by Kei Ito
20210219 Flutterに入門してみた
itok
1
4.1k
20201009 iOS 14 ウィジェットをつくってみた
itok
1
2.6k
20191206 Property Wrappers 入門
itok
0
1.8k
20190920 iOS 13 対応ではまった話
itok
1
2.6k
20190726 Background App Refresh Taskがやってきた
itok
0
2.4k
20190722 Firebase Remote Configでアドネットワークを管理する
itok
0
1.8k
20190419 iOSアプリで証明書の情報を参照する
itok
0
1.6k
20190412 Android TV向けアプリを作ってみる
itok
0
1.2k
20190215 iOS/Androidでドキュメントスキャナーを作ってみた
itok
0
1.9k
Other Decks in Programming
See All in Programming
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
620
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
110
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
250
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
360
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
160
AI-Powered Domain-Driven Design
ziobrando
0
400
AmebaブログはKMPから卒業します
kmars0605
0
330
Spec-driven Development with AI
simas
PRO
0
2.3k
Railsバージョンを4倍にした話
optim
0
940
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
530
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
220
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.2k
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Site-Speed That Sticks
csswizardry
13
1.6k
How to Ace a Technical Interview
jacobian
280
24k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
450
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
610
Docker and Python
trallard
47
4.3k
We Are The Robots
honzajavorek
0
440
How to train your dragon (web standard)
notwaldorf
96
6.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
RailsConf 2023
tenderlove
30
1.6k
Transcript
.BD$BUBMZTUͰ NBD04༻ΞϓϦΛ࡞Δ .PCJMF"DU0/-*/& JUPL!ͦΒ͔ͥ
JUPL!ͦΒ͔ͥ w ͍ͱ͏͚͍ʢJUPLʣ w ɹɹɹɹɹɹͷதͷਓ w ϞόΠϧΞϓϦΤϯδχΞ݉$&0 w ෭ۀͰϑϦʔϥϯεత w
IUUQTJUPLKQ IUUQTTPSBLB[FDPKQ !JUPLKQ
ॴࡏɿژࢢதژ۠ ࣾһਓࣗ
࣮ डୗ ࣗࣾ
J04"OESPJENBD048JOEPXTαʔό ҰਓͰͬͯ·͢ʢσβΠϯҎ֎ʣ
.BD$BUBMZTUͱ
J1BEΞϓϦΛNBD04্Ͱಈ͔͢Έ 6*,JUΛNBD04্Ͱಈ͔͢Έ
6*,JU "QQ,JU NBD04 J04 J1BE04 XBUDI04 UW04 6*ͷϑϨʔϜϫʔΫผ
J1BEΞϓϦΛNBD04Ͱಈ͔͢ w "QQMF4JMJDPO.BDݶఆ Ұ෦ͷϢʔβͷΈɺJ1BEΞϓϦͱ·ͬͨ͘ಉ͡ w 4XJGU6*Ͱڞ௨Խ ৽ن࡞ʢPSϑϧεΫϥονʣ w
.BD$BUBMZTU طଘͷϦιʔεΛ༗ޮ׆༻ʁ
ͨͱ͑
J04J1BE04ΞϓϦ
NBD04Ͱಈ͔͢ ։ൃத
.BD$BUBMZTUͷߏ
$BUBMZTUͷߏ "QQ,JU NBD04 6*,JU ɿΠϝʔδ ࣮ͱͯ͠6*,JUଆ͕ϝΠϯ "QQ,JUͷΨϫΛ͔Ϳͬͯಈ͍͍ͯΔ
Ϋϥεؒͷؔ "QQ,JU NBD04 6*,JU 6*7JFX$POUSPMMFS /48JOEPX /4"QQMJDBUJPO 6*"QQMJDBUJPO 6*4DFOF 6*8JOEPX
Ϋϥεؒͷؔ "QQ,JU NBD04 6*,JU 6*7JFX$POUSPMMFS /48JOEPX /4"QQMJDBUJPO 6*"QQMJDBUJPO 6*4DFOF 6*8JOEPX
͓͕͍ͨͷ͜ͱ ͍ؔͯ͠ͳ͍
࣮ࡍʹͬͯΈΔ
͡Ί͔ͨ
খωλू
.VMUJQMFXJOEPXT 8JOEPXΛด͡ΔͱΞϓϦऴྃ͢Δ ऴྃͤͨ͘͞ͳ͍߹NVMUJQMFXJOEPXTʹରԠ͢Δ ˠ6*4DFOF6*4DFOF%FMFHBUF
.VMUJQMFXJOEPXT ։ൃத
6*ύʔπ 6*4XJUDIUJUMF #JH4VSҎ߱
6*ύʔπ button.menu = UIMenu(title: "", options: .displayInline, children: [ UIAction(title:
"item1", handler: { _ in }), UIAction(title: "item2", handler: { _ in }), UIAction(title: "item3", handler: { _ in }), UIAction(title: "item4", handler: { _ in }) ]) button.showsMenuAsPrimaryAction = true
৭ IUUQTEFWFMPQFSBQQMFDPNEFTJHOIVNBOJOUFSGBDFHVJEFMJOFT NBDDBUBMZTUPWFSWJFXWJTVBMEFTJHO J1BE04 NBD04
"QQ,JU͞ΘΓ͍ͨ
"QQ,JUͷԸܙ
#VOEMFܦ༝Ͱ "QQ,JUʹΞΫηε "QQ,JU NBD04 6*,JU 6*7JFX$POUSPMMFS /48JOEPX /4"QQMJDBUJPO 6*"QQMJDBUJPO 6*4DFOF
6*8JOEPX #VOEMF
#VOEMFͷߏ "QQ,JU NBD04 6*,JU 7JFX$POUSPMMFS #VOEMF "QQ,JU1MVHJO 1MVHJOQSPUPDPM
#VOEMF࡞
1MVHJOTXJGU import Foundation @objc(Plugin) protocol Plugin: NSObjectProtocol { init() func
doSomethingWithAppKit() } 6*,JUଆʹݟͤΔQSPUPDPMΛఆٛ
"QQ1MVHJOTXJGU import AppKit class AppKitPlugin: NSObject, Plugin { required override
init() { } func doSomethingWithAppKit() { let bar = NSStatusBar.system statusItem = bar.statusItem(withLength: 100) statusItem?.button?.title = "..." } } "QQ,JUΛ࣮ͬͨ
*OGPQMJTU <key>NSPrincipalClass</key> <string>AppKitPlugin</string> Ϋϥε໊ΛӅ͍ ʢ6*,JUଆ͔Β۩ΫϥεΛΔඞཁ͕ͳ͘ͳΔʣ
7JFX$POUSPMMFSTXJGU import UIKit class ViewController: UIViewController { func loadPlugin() {
let bundleFileName = "AppKitPlugin.bundle" guard let bundleURL = Bundle.main.builtInPlugInsURL?.appendingPathComponent(bundleFileName), let bundle = Bundle(url: bundleURL) else { return } guard let pluginClass = bundle.principalClass as? Plugin.Type else { return } let plugin = pluginClass.init() plugin.doSomethingWithAppKit() } }
·ͱΊ w .BD$BUBMZTU w NBD04༻ΞϓϦΛ࡞ΔબࢶͷҰͭͱͯ͠ w طଘϦιʔεΛ׆༻ͭͭ͠ ɹɹɹɹɹɹɹɹNBD04Ͱಉ͡ϢʔβମݧΛ w 8JEHFUΛͬͯ͘Β͏ͨΊʹศར͔
w J1BEΞϓϦͷҠ২Λݕ౼ͯ͠Έͯʁ