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
External Accessory入門
Search
Trickart
September 02, 2023
Technology
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
External Accessory入門
iOSDC2023発表資料
Trickart
September 02, 2023
More Decks by Trickart
See All by Trickart
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
290
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
460
Xcode MCPでスクリーンショット撮りを90%自動化する
trickart
0
210
日本語でもいい感じに改行したい!! / Split Japanese sentence for UILabel and SwiftUI Text
trickart
3
4.3k
Other Decks in Technology
See All in Technology
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
160
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
150
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
re:Invent初参加で変わったこと、2回目にやってみたいこと(JAWS-UG彩の国埼玉 #12)
mhrtech
2
220
Refining Active Record
shugo
0
150
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
100
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
420
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
940
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
590
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Skip the Path - Find Your Career Trail
mkilby
1
260
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Optimizing for Happiness
mojombo
378
71k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
ラッコキーワード サービス紹介資料
rakko
1
5.3M
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
990
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Transcript
USJDLBSU &YUFSOBM"DDFTTPSZೖ ެࣜ'SBNFXPSLΛͬͯϨγʔτϓϦϯλʔΛ੍ޚ͢Δʂ
ಥવͰ͕͢ Έͳ͞Μ
'SBNFXPSL ͬͯ·͔͢ʁ "QQMFϓϥοτϑΥʔϜ͚ͷͷ
ΞϓϦ։ൃʹ͔ܽͤͳ͍'SBNFXPSLͨͪ "QQMFެࣜͷ'SBNFXPSL͚ͩͰͨ͘͞Μ w 'PVOEBUJPO w 6*,JU w "QQ,JU w 4XJGU6*
w $PNCJOF w FUDʜ
ΞϓϦ։ൃʹ͔ܽͤͳ͍'SBNFXPSLͨͪ "QQMFެࣜ'SBNFXPSLԿݸ͋ΔͰ͠ΐ͏ʁ w "ݸ w #ݸ w $ݸ
ݸʂ ਖ਼ղ$
w 5FDIOPMPHJFTϖʔδ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOUFDIOPMPHJFT w 'SBNFXPSL͕ͨ͘͞Μ w ࠓճ͓͢Δ'SBNFXPSLͦͷҰͭ ΞϓϦ։ൃʹ͔ܽͤͳ͍ 'SBNFXPSLͨͪ
&YUFSOBM'SBNFXPSLͱʁ w "QQMF͕ϦϦʔε͢Δ'SBNFXPSLͷҰͭ w ͦͷ໊ͷ௨Γ֎෦ΞΫηαϦͱ௨৴͢Δࣄ͕Ͱ͖Δ w ରԠ͢Δ֎෦ΞΫηαϦ-JHIUOJOH#MVFUPPUIଓ ͷΞΫηαϦ w ࣮ϐϯ%PDLίωΫλଓʹରԠ͍ͯ͠Δ
ରԠ͢Δ#MVFUPPUI#MVFUPPUI#3ɻ#MVFUPPUI-PX&OFSHZ$PSF#MVFUPPUI͕ରԠɻ
w ͦͷ໊ͷ௨ΓϨγʔτΛҹ͢ ΔϓϦϯλʔ w αʔϚϧϓϦϯλʔͱݺΕΔ w จࣈਤܗΛҹͰ͖Δ ੍ޚ͢Δͷ ϨγʔτϓϦϯλʔ Ҿ༻IUUQTTUBSNKQXQDPOUFOUVQMPBETNDQSJOU@KQH
8IZSFDFJQUQSJOUFS w ͕ࣗϢϏϨδͱ͍͏104ϨδΞϓϦاۀʹۈΊͯΔ͔Β w ݸਓͰೖखՄೳ w ωοτ௨ൢͰߪೖՄೳ ສԁ ɻϑϦϚΞϓϦͰதݹग़͞Ε͍ͯΔ w
ൺֱత؆୯ʹ༷ॻ͕ೖखՄೳ w ௨৴σʔλྔ͕গͳ͘୯७ͰɺجຊతʹσʔλΛૹΔ͚ͩͰ͍͍
·ͣ४උ w J04ΞϓϦͷϓϩδΣΫτΛ࡞Δ w *OGPQMJTUʹҎԼͷ߲Λهड़͢ Δ w 6*4VQQPSUFE&YUFSOBM"DDFTTPSZ1SPUPDPMT w ػثͱͷ௨৴ϓϩτίϧ
w ϕϯμʔ͝ͱʹҟͳΔ ૣ࡞Δ
ૣ࡞Δ ίʔυΛॻ͍͍ͯ͘&""DDFTTPSZ w ֎෦ΞΫηαϦ&""DDFTTPSZΫϥεͰද͞ΕΔ w ଓࡁΈͷΞΫηαϦ&""DDFTTPSZ.BOBHFSͷDPOOFDUFE"DDFTTPSJFT ϓϩύςΟʹ֨ೲ͞Ε͍ͯΔ w ෳͷΞΫηαϦ͕͋Δ߹NPEFM/VNCFSQSPUPDPM4USJOHTϓϩύςΟ ΛΈͯఆ
ૣ࡞Δ ίʔυΛॻ͍͍ͯ͘&"4FTTJPO w ௨৴ηογϣϯͷ&"4FTTJPOΛ։࢝͢Δ w JOJUʹ௨৴͍ͨ͠&""DDFTTPSZͱQSPUPDPM4USJOHΛ͢ for accessory in EAAccessoryManager.shared().connectedAccessories
{ guard accessory.protocolStrings.contains("jp.star-m.starpro") else { continue } let session = EASession(accessory: accessory, forProtocol: "jp.star-m.starpro") }
ૣ࡞Δ ίʔυΛॻ͍͍ͯ͘&"4FTTJPO w &"4FTTJPOJOQVU4USFBNͱPVUQVU4USFBNΛ͍࣋ͬͯΔ w JOQVU4USFBN͔ΒσʔλΛಡΈग़ͯ͠ड৴ w PVUQVU4USFBNʹσʔλΛॻ͖ࠐΜͰૹ৴ w 4USFBNʹEFMFHBUFΛͯ͠3VO-PPQʹεέδϡʔϧͯ͠։͘
guard let session = EASession(accessory: accessory, forProtocol: protocolString), let outputStream = session.outputStream else { return nil } outputStream.delegate = self outputStream.schedule(in: .current, forMode: .default) outputStream.open()
ૣ࡞Δ ίʔυΛॻ͍͍ͯ͘ /4 4USFBN w 4USFBNੲͳ͕Βͷ/44USFBN w 0VUQVU4USFBNʹ6OTBGF1PJOUFS6*OUͱͯ͠όΠτྻΛ͢ // "0"ͱ͚ͩҹࣈͯ͠վߦ͠ϖʔύʔΧοτ͢Δ
var bytes: [UInt8] = [0x30, 0x0e, 0x0a, 0x1b, 0x64, 0x03] let length = outputStream.write(&bytes, maxLength: bytes.count) if length < 0 { print("error!") } else if length == 0 { print("full.") } else { if length != bytes.count { print("write data was split.") } // ॻ͖ࠐΜͩσʔλͷআ bytes = Array(bytes.dropFirst(length)) }
ૣ࡞Δ ίʔυΛॻ͍͍ͯ͘จࣈҹ w ελʔਫ਼ີϓϦϯλʔ4UBS13/5ͱ͍͏ϑΥʔϚοτ w 4IJGU+*4ͷςΩετͱ"4$**ͷ੍ޚจࣈͰఆٛ͞Ε੍ͨޚίϚϯυ͔ΒͳΔ w ຊޠͷςΩετҹՄೳʂ let hello
= Array("͜ΜʹͪɺiOSDC 2023!".data(using: .shiftJIS)!) var bytes: [UInt8] = hello + [0x0e, 0x0a, 0x1b, 0x64, 0x03] let length = outputStream.write(&bytes, maxLength: bytes.count)
ૣ࡞Δ ίʔυΛॻ͍͍ͯ͘ը૾ҹ w ը૾Λҹͯ͠ΈΔ w ͪΐͬͱσʔλྔଟ͍ͷͰ֓ཁ͚ͩ w ന͔ࠇ͔ͷϞϊΫϩը૾ w XJEUIͱIFJHIUΛϔομʹͯ͋͠ͱ
CJUͣͭന GBMTF ͔ࠇ USVF ͔ͷσʔλ Λ٧Ί͍ͯ͘
ΞϓϦͷϦϦʔεͱ1SPEVDU1MBO*% 11*% ݸਓͰΞϓϦΛϦϦʔε͢Δͷ͍͔͠ʜ w &YUFSOBM"DDFTTPSZΛͬͨΞϓϦΛϦϦʔε͢Δʹ11*%͕ඞཁ w 11*%༻͍ͨ͠ΞΫηαϦͷϕϯμʔʹґཔͯ͠औಘ͢Δඞཁ͕͋Δ w ΞΫηαϦϕϯμʔΣϒαΠτͰϑΥʔϜΛ༻ҙ͍ͯ͠Δ͕ձ໊ࣾͳͲΛ ٻΊΒΕΔ߹ଟ͍
w ݸਓͷΞϓϦΛରԠͯ͘͠ΕΔϕϯμʔ͕͋Δͷ͔ෆ໌ w खݩͰσόοάϏϧυͰ༡Ϳʹͳ͍
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ ࢀߟ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOFYUFSOBMBDDFTTPSZ w IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFGFBUVSFEBSUJDMFT &YUFSOBM"DDFTTPSZ15*OUSPEVDUJPO*OUSPEVDUJPOIUNMBQQMF@SFG EPDVJE51 w IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO$PDPB
$PODFQUVBM4USFBNT4USFBNTIUNMBQQMF@SFGEPDVJEJ αϯϓϧίʔυ IUUQTHJUIVCDPNUSJDLBSU&YUFSOBM"DDFTTPSZ1SJOUFS4BNQMF