Upgrade to Pro — share decks privately, control downloads, hide ads and more …

External Accessory入門

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Trickart Trickart
September 02, 2023

External Accessory入門

iOSDC2023発表資料

Avatar for Trickart

Trickart

September 02, 2023
Tweet

More Decks by Trickart

Other Decks in Technology

Transcript

  1. ૣ଎࡞Δ ίʔυΛॻ͍͍ͯ͘&"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") }
  2. ૣ଎࡞Δ ίʔυΛॻ͍͍ͯ͘&"4FTTJPO w &"4FTTJPO͸JOQVU4USFBNͱ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()
  3. ૣ଎࡞Δ ίʔυΛॻ͍͍ͯ͘ /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)) }
  4. ૣ଎࡞Δ ίʔυΛॻ͍͍ͯ͘จࣈҹ࡮ 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)