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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
310
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
490
Xcode MCPでスクリーンショット撮りを90%自動化する
trickart
0
230
日本語でもいい感じに改行したい!! / Split Japanese sentence for UILabel and SwiftUI Text
trickart
3
4.3k
Other Decks in Technology
See All in Technology
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
640
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
110
新卒エンジニア、 介護士になる
ryu1013
1
690
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
デザインレビューは自動化できるのか?─ Flutter × Figma で UI 品質保証を考える
techiro
2
820
Kiro IDE 入門 (画面の各部から、頼み方、任せ方、戻し方まで) | 目指せ Kiro マスター 02
inariku
PRO
3
100
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
620
Deep Data Security 機能解説
oracle4engineer
PRO
3
1k
試験勉強はGrokBotでやれ
maigo999
0
110
会社説明資料_最新版
demaecan
0
32k
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
980
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Embracing the Ebb and Flow
colly
88
5.2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
560
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
Building AI with AI
inesmontani
PRO
1
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Tell your own story through comics
letsgokoyo
1
1.1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
680
Music & Morning Musume
bryan
48
7.5k
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