Hardware

RSS for tag

Delve into the physical components of Apple devices, including processors, memory, storage, and their interaction with the software.

Posts under Hardware subtopic

Post

Replies

Boosts

Views

Created

NEHotspotConfiguration apply returns userDenied error without user interaction
I’m encountering an unexpected issue while using NEHotspotConfigurationManager.shared.apply(...) to connect to a Wi-Fi network. Specifically, I’m receiving a userDenied error, even though the user did not interact with any system prompt. Here’s a version of the code I’m using: let config = NEHotspotConfiguration(ssid: ssid, passphrase: passphrase, isWEP: false) // config.joinOnce = true NEHotspotConfigurationManager.shared.apply(config) { error in if let err = error { let nsErr = err as NSError mlog("err.code:\(nsErr.code)") if nsErr.code == NEHotspotConfigurationError.alreadyAssociated.rawValue { self.findWiFiListAndConnect(ssid, passphrase, overtimeSec, timeStart) } else { self.cmdDelegateQueue.async { self.delegate?.wifiClose(nsErr.code) } } } } The error returned is: wifiClose status: 7 Which corresponds to NEHotspotConfigurationError.userDenied. According to the official Apple documentation, this error should only occur when the user explicitly cancels the system dialog. However, in my case: • No system dialog appears. • The user does nothing, yet the error is still returned. • This issue does not happen every time, but it has been observed across multiple devices. Additional info: • iOS version: 18.5 • Device model: iPhone • joinOnce is not set (defaults to false) • Existing configuration is removed using removeConfiguration(...) before applying Is it possible that under certain system states (e.g. backgrounded, network restrictions, or app permissions), iOS silently fails without showing the prompt? Has anyone else encountered this issue, or does anyone know what could cause this behavior? Any help is greatly appreciated!
6
0
333
Jun ’25
How can I get a cover-art image via Bluetooth BIP
I want to get Cover-Art Image over Bluetooth. From the SDP Discover iPhoneSE, it support Cover-Art Feature. I connect and config OBEX Channel with L2CAP ERTM, it is successful. I send connect_request the OBEX Connect, the iPhone always no any response, and l2cap s-frame response from iPhone always failed. From the Apple Developer, it need Apple Authentication Chip. Is it still necessary now? Are there any other ways to obtain album pictures?
0
0
217
Jun ’25
Is it possible to communicate with peripherals through the TypeC port of Apple 15 or above mobile phones?
I need to implement an app that exchanges data with peripherals through TypeC on Apple 15 phones, but I have two questions that I need to ask for help: Which library is used to communicate with peripherals through the TypeC port of the Apple mobile phone? Do peripherals need to pass MFi authentication before they can communicate with the App?
1
0
109
May ’25
Confused by what is allowed for System Level Apple Watch Bluetooth Connection. Does it require MFi or are there only some BLE chips allowed?
Hello. I am building a BLE device that is Activity Fitness based and would like a "System Level" BLE connection on WatchOS using an ESP32 (I have built a test of this on the firmware side). Meaning I do not want my iOS app to pass the BLE connection to the WatchOS app. It seems like these App Level connections do not get as many background updates as a System Level connection, and also requires the WatchOS app to be launched to connect to the BLE device The System Level BLE connection (WatchOS Settings > BLE > Health Devices) allows for auto connection in the background, and gets more reliable background communication between the BLE device and the Apple Watch On the Apple MFi Page it only mentions iOS: From Apple MFi Page: :: Who does NOT need to join - Developers and manufacturers of accessories that connect to an Apple device using only Bluetooth Low Energy, Core Bluetooth, or standard Bluetooth profiles supported by iOS Does this apply to WatchOS as well? So, if I am making an BLE device that is Activity Based, and has one of the allowable Health Device UUIDs, is the BLE System Connection allowed using any BLE chip? Including say an ESP32 I have built a test BLE firmware that is a Health Device UUID, and the WatchOS sees it as a health device Is this fine then? No need for MFi application and also no need to worry about which BLE chip is used? thanks
3
0
222
May ’25
XPC Connection Error
I have an accessory with MFi authenticaiton passed(got 0xAA05) and identification accepted (got 0x1D02). But when I try to open the target stream by using iAP2 EA session framework, I always enounter the same error looking like: XPC connection error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.accessories.externalaccessory-server was invalidated from this process." UserInfo={NSDebugDescription=The connection to service named com.apple.accessories.externalaccessory-server was invalidated from this process.} anybody can tell me what it related with? And what can I do to go through it quickly? Thank you much in advance.
1
0
182
May ’25
Find My Network System
Hey everyone, how’s it going? I’d like to know if, by enrolling in Apple’s MFi program, I’ll gain access to develop my own tags and my own app to track them using Apple’s Find network. I also read that there’s an estimated cost of $4 per device—does that apply to each device produced, or only at the time of registering the device, with no fee for additional units?
2
0
324
May ’25
NSLocalizedDescription = \"Peer removed pairing information\";
After hardware and mobile phone hid mode pairing, the first connection is successful, after a while disconnect and reconnect,APP monitoring Bluetooth error NSLocalizedDescription = "Peer removed pairing information"; Failed to connect Hardware engineers detect the pairing information and find that the local pairing information of the iPhone has changed, which is a non-mandatory phenomenon
3
0
338
Apr ’25
Error 561145187 - Recording audio from keyboard extension
Hi, as other threads have already discussed, I'd like to record audio from a keyboard extension. The keyboard has been granted both full access and microphone access. Nonetheless whenever I attempt to start a recording from my keyboard, it fails to start with the following error: Recording failed to start: Error Domain=com.apple.coreaudio.avfaudio Code=561145187 "(null)" UserInfo={failed call=err = PerformCommand(*ioNode, kAUStartIO, NULL, 0)} This is the code I am using: import Foundation import AVFoundation protocol AudioRecordingServiceDelegate: AnyObject { func audioRecordingDidStart() func audioRecordingDidStop(withAudioData: Data?) func audioRecordingPermissionDenied() } class AudioRecordingService { weak var delegate: AudioRecordingServiceDelegate? private var audioEngine: AVAudioEngine? private var audioSession: AVAudioSession? private var isRecording = false private var audioData = Data() private let targetFormat = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: 16000, channels: 1, interleaved: false)! private func setupAudioSession() throws { let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .spokenAudio, options: [.mixWithOthers, .allowBluetooth, .defaultToSpeaker]) try session.setPreferredIOBufferDuration(0.005) try session.setActive(true, options: .notifyOthersOnDeactivation) audioSession = session } func checkMicrophonePermission(completion: @escaping (Bool) -> Void) { switch AVAudioApplication.shared.recordPermission { case .granted: completion(true) case .denied: delegate?.audioRecordingPermissionDenied() completion(false) case .undetermined: AVAudioApplication.requestRecordPermission { [weak self] granted in if !granted { self?.delegate?.audioRecordingPermissionDenied() } completion(granted) } @unknown default: delegate?.audioRecordingPermissionDenied() completion(false) } } func toggleRecording() { if isRecording { stopRecording() } else { checkMicrophonePermission { [weak self] granted in if granted { self?.startRecording() } } } } private func startRecording() { guard !isRecording else { return } do { try setupAudioSession() audioEngine = AVAudioEngine() guard let engine = audioEngine else { return } let inputNode = engine.inputNode let inputFormat = inputNode.inputFormat(forBus: 0) audioData.removeAll() guard let converter = AVAudioConverter(from: inputFormat, to: targetFormat) else { print("Failed to create audio converter") return } inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputFormat) { [weak self] buffer, _ in guard let self = self else { return } let frameCount = AVAudioFrameCount(Double(buffer.frameLength) * 16000.0 / buffer.format.sampleRate) guard let outputBuffer = AVAudioPCMBuffer(pcmFormat: self.targetFormat, frameCapacity: frameCount) else { return } outputBuffer.frameLength = frameCount var error: NSError? converter.convert(to: outputBuffer, error: &error) { _, outStatus in outStatus.pointee = .haveData return buffer } if error == nil, let channelData = outputBuffer.int16ChannelData { let dataLength = Int(outputBuffer.frameLength) * 2 let data = Data(bytes: channelData.pointee, count: dataLength) self.audioData.append(data) } } engine.prepare() try engine.start() isRecording = true delegate?.audioRecordingDidStart() } catch { print("Recording failed to start: \(error)") stopRecording() } } private func stopRecording() { audioEngine?.inputNode.removeTap(onBus: 0) audioEngine?.stop() isRecording = false let finalData = audioData audioData.removeAll() delegate?.audioRecordingDidStop(withAudioData: finalData) try? audioSession?.setActive(false, options: .notifyOthersOnDeactivation) } deinit { if isRecording { stopRecording() } } } Granting the deprecated "Inter-App Audio" capability did not solve the problem either. Is recording audio from a keyboard extension even possible in general? If so, how do I fix it? Related threads: https://developer.apple.com/forums/thread/108055 https://developer.apple.com/forums/thread/742601
7
1
934
Feb ’25
ESP32 USB-C to iPhone 16 USB-C communication
Hi everyone, I am seeking clarification regarding the communication capabilities between an ESP32 microcontroller and Apple's latest devices, specifically the iPhone 16 Pro Max and iPad Pro, both equipped with USB-C ports. Background: MFi Certification: Historically, establishing communication between external devices and iOS devices required MFi (Made for iPhone/iPad) certification. But I remember this being necessary in the Lightning Cable to USB era. With the introduction of USB-C ports in recent iPhone and iPad models, there is an indication that MFi certification may no longer be necessary for certain peripherals. Perhaps I'm not confident on the terminology here: https://mfi.apple.com/en/who-should-join Project Requirements: I am working on a sensor research project that necessitates the collection of low-latency time-series data from an ESP32 microcontroller, which features a USB-C port. The data needs to be transmitted to an iPhone 16 Pro Max or iPad Pro. Bluetooth communication has proven insufficient due to its limited data transfer rates (~1.2 Mbps with L2CAP). While NEHotspot could be an alternative, it restricts the iPad's internet connectivity. Therefore, establishing a direct USB-C connection between the ESP32 and the iOS device appears to be the most viable solution. Questions: MFi Certification Necessity: Is MFi certification still required for an ESP32 microcontroller to communicate with iPhone 16 Pro Max or iPad Pro via USB-C? USB-C Communication Support: Do the iPhone 16 Pro Max and iPad Pro natively support serial communication over USB-C with microcontrollers like the ESP32? If not, are there recommended protocols or interfaces to facilitate this communication? App Development Considerations: Would developing a custom iOS application be necessary to handle data transmission from the ESP32 over USB-C? If so, are there specific APIs or frameworks provided by Apple to support this functionality? Data Transfer Rates: Considering the need for high-speed data transfer, are there any limitations or considerations regarding the data transfer rates achievable through a USB-C connection between the ESP32 and iOS devices? Thank you!
5
1
1.8k
Jan ’25
The impact of MicrophoneMode on my Mac application.
I have a 4-input, 4-output hardware device and an 8-input, 8-output virtual device, which I combine into an aggregate device. I am using the SimplyCoreAudio library to get the channel count. The code is as follows: aggregationDevice!.channels(scope: .input) =>> 12 aggregationDevice!.channels(scope: .output) =>> 12 When the program's MicrophoneMode is set to standard, the channel count is correct. However, when I set the MicrophoneMode to voiceIsolation, the channel count is incorrect: aggregationDevice!.channels(scope: .input) =>> 4 aggregationDevice!.channels(scope: .output) =>> 12 Below is the code for creating the aggregate device: func createAggregateDevice(mainDevice: AudioDevice, secondDevice: AudioDevice?, named name: String, uid: String) -> AudioDevice? { guard let mainDeviceUID = mainDevice.uid else { return nil } var deviceList: [[String: Any]] = [ [ kAudioSubDeviceUIDKey: mainDeviceUID, kAudioSubDeviceDriftCompensationKey:1 ] ] // make sure same device isn't added twice if let secondDeviceUID = secondDevice?.uid, secondDeviceUID != mainDeviceUID { deviceList.append([ kAudioSubDeviceUIDKey: secondDeviceUID, kAudioSubDeviceDriftCompensationKey:1, kAudioSubDeviceInputChannelsKey:8 ]) } let desc: [String: Any] = [ kAudioAggregateDeviceNameKey: name, kAudioAggregateDeviceUIDKey: uid, kAudioAggregateDeviceSubDeviceListKey: deviceList, kAudioAggregateDeviceMainSubDeviceKey: mainDeviceUID, kAudioAggregateDeviceIsPrivateKey:false, ] var deviceID: AudioDeviceID = 0 let error = AudioHardwareCreateAggregateDevice(desc as CFDictionary, &deviceID) guard error == noErr else { return nil } return AudioDevice.lookup(by: deviceID) } I hope someone can tell me the reason Thank you!
1
0
689
Dec ’24
EASession return nil on iOS18
On iOS 18.x when try to create EASession we get nil, but on iOS 17.x everything works. We have app which use USB cable for connecting external accessories. Scenario is when we have fresh instal, connecting with accessory work fine, EASession is created, streams are opened. When we unplug USB, we close streams, remove any reference to session and accessory, remove accessory delegate. When plug it again, creating EASession is returning nil. Only after restarting iPhone, we can create new EASession with appropriate protocol and accessory. Every next attempt without reseting iPhone is failing. Logs from accessory is following: 00:05:51.811000 : onUSBDeviceFound(pDevice=0xffc818)) iPhone USB device already in the device list w/id=1 -> update status now[21;1H 00:05:51.830000 : setConnectionStatus(status=connected) [devId=1] state updated -> forward[21;1H Capabilities indicate HostMode possibility => role switch is triggered 00:05:52.848000 : updateDIPODeviceConnections() iPhoneUSB w/caps=5 (=CarPlay or HostMode), deviceTag=2 in Device mode -> request role switch[21;1H Role switch seems to be successful 00:05:54.914000 : setSwitching('stable') changed[21;1H 00:05:54.915000 : updateDIPODeviceConnections() iPhoneUSB w/caps=2, id=1, deviceTag=2 and native transport -> request app launch and call connectUSB[21;1H 00:05:54.967000 : ConnectiAP2(05ac:12a8, s/n='00008101000160921E90801E', writeFD='/dev/ffs/ep3', readFD='/dev/ffs/ep4', hostMode){3}[21;1H Native transport should become available but does not (the following line is not present for failed case. Taken from successful case) 00:05:24.983000 : OnDBusPropChanged_NativeTransport(): deviceId=2, started=1, iAP2iOSAppIdentifier=1, sinkEndpoint=3, sourceEndpoint=4, TransactionID=1 EAP Start event not received (trace line from success try) 00:05:25.057000 : EAPSessionStart(ctx=0x74e0b800){2} called[21;1H Is there any braking change on iOS 18 considering EASession? Also what is strange is that it works on fresh instal/restart iPhone, but not working on second attempt?
14
7
1.4k
Oct ’24
Bluetooth Connectivity Issues
Since 17.4 Dev Beta 2, I have been having Bluetooth issues. I had hoped it would have cleared up but even in 17.4.1 it continues. Airpod and Echo Auto are the only 2 audio devices I have. The audio will become chopping, rubber band or sound robotic and sometime completely disconnect. While driving it will occur on both audio devices. Sometimes I'm stopped at red light and the issue occurs. The phone is less than 3 feet from the device at all times. I have read forums and removed and readded the devices but that did not help. I really do not want to have to reset my phone since my 2FA apps do not recover in a restore. Anyone have any suggestions?
4
0
1.6k
Mar ’24
NEHotspotConfiguration apply returns userDenied error without user interaction
I’m encountering an unexpected issue while using NEHotspotConfigurationManager.shared.apply(...) to connect to a Wi-Fi network. Specifically, I’m receiving a userDenied error, even though the user did not interact with any system prompt. Here’s a version of the code I’m using: let config = NEHotspotConfiguration(ssid: ssid, passphrase: passphrase, isWEP: false) // config.joinOnce = true NEHotspotConfigurationManager.shared.apply(config) { error in if let err = error { let nsErr = err as NSError mlog("err.code:\(nsErr.code)") if nsErr.code == NEHotspotConfigurationError.alreadyAssociated.rawValue { self.findWiFiListAndConnect(ssid, passphrase, overtimeSec, timeStart) } else { self.cmdDelegateQueue.async { self.delegate?.wifiClose(nsErr.code) } } } } The error returned is: wifiClose status: 7 Which corresponds to NEHotspotConfigurationError.userDenied. According to the official Apple documentation, this error should only occur when the user explicitly cancels the system dialog. However, in my case: • No system dialog appears. • The user does nothing, yet the error is still returned. • This issue does not happen every time, but it has been observed across multiple devices. Additional info: • iOS version: 18.5 • Device model: iPhone • joinOnce is not set (defaults to false) • Existing configuration is removed using removeConfiguration(...) before applying Is it possible that under certain system states (e.g. backgrounded, network restrictions, or app permissions), iOS silently fails without showing the prompt? Has anyone else encountered this issue, or does anyone know what could cause this behavior? Any help is greatly appreciated!
Replies
6
Boosts
0
Views
333
Activity
Jun ’25
How can I get a cover-art image via Bluetooth BIP
I want to get Cover-Art Image over Bluetooth. From the SDP Discover iPhoneSE, it support Cover-Art Feature. I connect and config OBEX Channel with L2CAP ERTM, it is successful. I send connect_request the OBEX Connect, the iPhone always no any response, and l2cap s-frame response from iPhone always failed. From the Apple Developer, it need Apple Authentication Chip. Is it still necessary now? Are there any other ways to obtain album pictures?
Replies
0
Boosts
0
Views
217
Activity
Jun ’25
Is it possible to communicate with peripherals through the TypeC port of Apple 15 or above mobile phones?
I need to implement an app that exchanges data with peripherals through TypeC on Apple 15 phones, but I have two questions that I need to ask for help: Which library is used to communicate with peripherals through the TypeC port of the Apple mobile phone? Do peripherals need to pass MFi authentication before they can communicate with the App?
Replies
1
Boosts
0
Views
109
Activity
May ’25
Confused by what is allowed for System Level Apple Watch Bluetooth Connection. Does it require MFi or are there only some BLE chips allowed?
Hello. I am building a BLE device that is Activity Fitness based and would like a "System Level" BLE connection on WatchOS using an ESP32 (I have built a test of this on the firmware side). Meaning I do not want my iOS app to pass the BLE connection to the WatchOS app. It seems like these App Level connections do not get as many background updates as a System Level connection, and also requires the WatchOS app to be launched to connect to the BLE device The System Level BLE connection (WatchOS Settings > BLE > Health Devices) allows for auto connection in the background, and gets more reliable background communication between the BLE device and the Apple Watch On the Apple MFi Page it only mentions iOS: From Apple MFi Page: :: Who does NOT need to join - Developers and manufacturers of accessories that connect to an Apple device using only Bluetooth Low Energy, Core Bluetooth, or standard Bluetooth profiles supported by iOS Does this apply to WatchOS as well? So, if I am making an BLE device that is Activity Based, and has one of the allowable Health Device UUIDs, is the BLE System Connection allowed using any BLE chip? Including say an ESP32 I have built a test BLE firmware that is a Health Device UUID, and the WatchOS sees it as a health device Is this fine then? No need for MFi application and also no need to worry about which BLE chip is used? thanks
Replies
3
Boosts
0
Views
222
Activity
May ’25
Removing Matter device artefacts.
How to remove Matter accessory connection artefacts? This appears after connecting and then removing a Matter test accessory. Please see attached screenshot:
Replies
2
Boosts
0
Views
242
Activity
May ’25
How to display the manufacturer's APP in the device information in the Home APP
We are developing a matter device. How can we display our own APP under the Home device information?
Replies
1
Boosts
0
Views
129
Activity
May ’25
Core NFC UI issue
Hi I am implement my app with Core NFC , I found the module have their own UI , can I implement without the UI? we want the NFC scanning in background , not blocking the UI.
Replies
1
Boosts
0
Views
107
Activity
May ’25
XPC Connection Error
I have an accessory with MFi authenticaiton passed(got 0xAA05) and identification accepted (got 0x1D02). But when I try to open the target stream by using iAP2 EA session framework, I always enounter the same error looking like: XPC connection error: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service named com.apple.accessories.externalaccessory-server was invalidated from this process." UserInfo={NSDebugDescription=The connection to service named com.apple.accessories.externalaccessory-server was invalidated from this process.} anybody can tell me what it related with? And what can I do to go through it quickly? Thank you much in advance.
Replies
1
Boosts
0
Views
182
Activity
May ’25
Find My Network System
Hey everyone, how’s it going? I’d like to know if, by enrolling in Apple’s MFi program, I’ll gain access to develop my own tags and my own app to track them using Apple’s Find network. I also read that there’s an estimated cost of $4 per device—does that apply to each device produced, or only at the time of registering the device, with no fee for additional units?
Replies
2
Boosts
0
Views
324
Activity
May ’25
Find_My Requirement
Dear Sir, I have some questions of IC firmware development of Find My. Any rule request that item must include dual bank feature in IC? I am using Nordic SDK_Connect SDK, Apple has own SDK? If yes, can I download it to use? In Find-My, Apple has service UUID in bluetooth IC? Thank you. Best regards, Sam Ng
Replies
2
Boosts
0
Views
189
Activity
May ’25
develop Find-My in product.
I am developing the electronic part of product, it includes a Find-My features. I saw some forum that testing Find-My feature needs a CSR and testing token. Can anyone teach me how to apply CSR and testing token step by step? Thank you very much. Best regards Sam Ng
Replies
4
Boosts
1
Views
461
Activity
Apr ’25
NSLocalizedDescription = \"Peer removed pairing information\";
After hardware and mobile phone hid mode pairing, the first connection is successful, after a while disconnect and reconnect,APP monitoring Bluetooth error NSLocalizedDescription = "Peer removed pairing information"; Failed to connect Hardware engineers detect the pairing information and find that the local pairing information of the iPhone has changed, which is a non-mandatory phenomenon
Replies
3
Boosts
0
Views
338
Activity
Apr ’25
PTT with MFi headset as trigger
Our company is developing an MFi headset with a button that we would like to use for initiating PTT. We can detect the button press and initiate PTT successfully, even when the app is not in the foreground, using the ExternalAccessory framework. But I wonder if this is a coincidence, or a scenario that should reliably work with Push to Talk?
Replies
1
Boosts
1
Views
714
Activity
Mar ’25
Error 561145187 - Recording audio from keyboard extension
Hi, as other threads have already discussed, I'd like to record audio from a keyboard extension. The keyboard has been granted both full access and microphone access. Nonetheless whenever I attempt to start a recording from my keyboard, it fails to start with the following error: Recording failed to start: Error Domain=com.apple.coreaudio.avfaudio Code=561145187 "(null)" UserInfo={failed call=err = PerformCommand(*ioNode, kAUStartIO, NULL, 0)} This is the code I am using: import Foundation import AVFoundation protocol AudioRecordingServiceDelegate: AnyObject { func audioRecordingDidStart() func audioRecordingDidStop(withAudioData: Data?) func audioRecordingPermissionDenied() } class AudioRecordingService { weak var delegate: AudioRecordingServiceDelegate? private var audioEngine: AVAudioEngine? private var audioSession: AVAudioSession? private var isRecording = false private var audioData = Data() private let targetFormat = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: 16000, channels: 1, interleaved: false)! private func setupAudioSession() throws { let session = AVAudioSession.sharedInstance() try session.setCategory(.playAndRecord, mode: .spokenAudio, options: [.mixWithOthers, .allowBluetooth, .defaultToSpeaker]) try session.setPreferredIOBufferDuration(0.005) try session.setActive(true, options: .notifyOthersOnDeactivation) audioSession = session } func checkMicrophonePermission(completion: @escaping (Bool) -> Void) { switch AVAudioApplication.shared.recordPermission { case .granted: completion(true) case .denied: delegate?.audioRecordingPermissionDenied() completion(false) case .undetermined: AVAudioApplication.requestRecordPermission { [weak self] granted in if !granted { self?.delegate?.audioRecordingPermissionDenied() } completion(granted) } @unknown default: delegate?.audioRecordingPermissionDenied() completion(false) } } func toggleRecording() { if isRecording { stopRecording() } else { checkMicrophonePermission { [weak self] granted in if granted { self?.startRecording() } } } } private func startRecording() { guard !isRecording else { return } do { try setupAudioSession() audioEngine = AVAudioEngine() guard let engine = audioEngine else { return } let inputNode = engine.inputNode let inputFormat = inputNode.inputFormat(forBus: 0) audioData.removeAll() guard let converter = AVAudioConverter(from: inputFormat, to: targetFormat) else { print("Failed to create audio converter") return } inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputFormat) { [weak self] buffer, _ in guard let self = self else { return } let frameCount = AVAudioFrameCount(Double(buffer.frameLength) * 16000.0 / buffer.format.sampleRate) guard let outputBuffer = AVAudioPCMBuffer(pcmFormat: self.targetFormat, frameCapacity: frameCount) else { return } outputBuffer.frameLength = frameCount var error: NSError? converter.convert(to: outputBuffer, error: &error) { _, outStatus in outStatus.pointee = .haveData return buffer } if error == nil, let channelData = outputBuffer.int16ChannelData { let dataLength = Int(outputBuffer.frameLength) * 2 let data = Data(bytes: channelData.pointee, count: dataLength) self.audioData.append(data) } } engine.prepare() try engine.start() isRecording = true delegate?.audioRecordingDidStart() } catch { print("Recording failed to start: \(error)") stopRecording() } } private func stopRecording() { audioEngine?.inputNode.removeTap(onBus: 0) audioEngine?.stop() isRecording = false let finalData = audioData audioData.removeAll() delegate?.audioRecordingDidStop(withAudioData: finalData) try? audioSession?.setActive(false, options: .notifyOthersOnDeactivation) } deinit { if isRecording { stopRecording() } } } Granting the deprecated "Inter-App Audio" capability did not solve the problem either. Is recording audio from a keyboard extension even possible in general? If so, how do I fix it? Related threads: https://developer.apple.com/forums/thread/108055 https://developer.apple.com/forums/thread/742601
Replies
7
Boosts
1
Views
934
Activity
Feb ’25
ESP32 USB-C to iPhone 16 USB-C communication
Hi everyone, I am seeking clarification regarding the communication capabilities between an ESP32 microcontroller and Apple's latest devices, specifically the iPhone 16 Pro Max and iPad Pro, both equipped with USB-C ports. Background: MFi Certification: Historically, establishing communication between external devices and iOS devices required MFi (Made for iPhone/iPad) certification. But I remember this being necessary in the Lightning Cable to USB era. With the introduction of USB-C ports in recent iPhone and iPad models, there is an indication that MFi certification may no longer be necessary for certain peripherals. Perhaps I'm not confident on the terminology here: https://mfi.apple.com/en/who-should-join Project Requirements: I am working on a sensor research project that necessitates the collection of low-latency time-series data from an ESP32 microcontroller, which features a USB-C port. The data needs to be transmitted to an iPhone 16 Pro Max or iPad Pro. Bluetooth communication has proven insufficient due to its limited data transfer rates (~1.2 Mbps with L2CAP). While NEHotspot could be an alternative, it restricts the iPad's internet connectivity. Therefore, establishing a direct USB-C connection between the ESP32 and the iOS device appears to be the most viable solution. Questions: MFi Certification Necessity: Is MFi certification still required for an ESP32 microcontroller to communicate with iPhone 16 Pro Max or iPad Pro via USB-C? USB-C Communication Support: Do the iPhone 16 Pro Max and iPad Pro natively support serial communication over USB-C with microcontrollers like the ESP32? If not, are there recommended protocols or interfaces to facilitate this communication? App Development Considerations: Would developing a custom iOS application be necessary to handle data transmission from the ESP32 over USB-C? If so, are there specific APIs or frameworks provided by Apple to support this functionality? Data Transfer Rates: Considering the need for high-speed data transfer, are there any limitations or considerations regarding the data transfer rates achievable through a USB-C connection between the ESP32 and iOS devices? Thank you!
Replies
5
Boosts
1
Views
1.8k
Activity
Jan ’25
The impact of MicrophoneMode on my Mac application.
I have a 4-input, 4-output hardware device and an 8-input, 8-output virtual device, which I combine into an aggregate device. I am using the SimplyCoreAudio library to get the channel count. The code is as follows: aggregationDevice!.channels(scope: .input) =>> 12 aggregationDevice!.channels(scope: .output) =>> 12 When the program's MicrophoneMode is set to standard, the channel count is correct. However, when I set the MicrophoneMode to voiceIsolation, the channel count is incorrect: aggregationDevice!.channels(scope: .input) =>> 4 aggregationDevice!.channels(scope: .output) =>> 12 Below is the code for creating the aggregate device: func createAggregateDevice(mainDevice: AudioDevice, secondDevice: AudioDevice?, named name: String, uid: String) -> AudioDevice? { guard let mainDeviceUID = mainDevice.uid else { return nil } var deviceList: [[String: Any]] = [ [ kAudioSubDeviceUIDKey: mainDeviceUID, kAudioSubDeviceDriftCompensationKey:1 ] ] // make sure same device isn't added twice if let secondDeviceUID = secondDevice?.uid, secondDeviceUID != mainDeviceUID { deviceList.append([ kAudioSubDeviceUIDKey: secondDeviceUID, kAudioSubDeviceDriftCompensationKey:1, kAudioSubDeviceInputChannelsKey:8 ]) } let desc: [String: Any] = [ kAudioAggregateDeviceNameKey: name, kAudioAggregateDeviceUIDKey: uid, kAudioAggregateDeviceSubDeviceListKey: deviceList, kAudioAggregateDeviceMainSubDeviceKey: mainDeviceUID, kAudioAggregateDeviceIsPrivateKey:false, ] var deviceID: AudioDeviceID = 0 let error = AudioHardwareCreateAggregateDevice(desc as CFDictionary, &deviceID) guard error == noErr else { return nil } return AudioDevice.lookup(by: deviceID) } I hope someone can tell me the reason Thank you!
Replies
1
Boosts
0
Views
689
Activity
Dec ’24
EASession return nil on iOS18
On iOS 18.x when try to create EASession we get nil, but on iOS 17.x everything works. We have app which use USB cable for connecting external accessories. Scenario is when we have fresh instal, connecting with accessory work fine, EASession is created, streams are opened. When we unplug USB, we close streams, remove any reference to session and accessory, remove accessory delegate. When plug it again, creating EASession is returning nil. Only after restarting iPhone, we can create new EASession with appropriate protocol and accessory. Every next attempt without reseting iPhone is failing. Logs from accessory is following: 00:05:51.811000 : onUSBDeviceFound(pDevice=0xffc818)) iPhone USB device already in the device list w/id=1 -> update status now[21;1H 00:05:51.830000 : setConnectionStatus(status=connected) [devId=1] state updated -> forward[21;1H Capabilities indicate HostMode possibility => role switch is triggered 00:05:52.848000 : updateDIPODeviceConnections() iPhoneUSB w/caps=5 (=CarPlay or HostMode), deviceTag=2 in Device mode -> request role switch[21;1H Role switch seems to be successful 00:05:54.914000 : setSwitching('stable') changed[21;1H 00:05:54.915000 : updateDIPODeviceConnections() iPhoneUSB w/caps=2, id=1, deviceTag=2 and native transport -> request app launch and call connectUSB[21;1H 00:05:54.967000 : ConnectiAP2(05ac:12a8, s/n='00008101000160921E90801E', writeFD='/dev/ffs/ep3', readFD='/dev/ffs/ep4', hostMode){3}[21;1H Native transport should become available but does not (the following line is not present for failed case. Taken from successful case) 00:05:24.983000 : OnDBusPropChanged_NativeTransport(): deviceId=2, started=1, iAP2iOSAppIdentifier=1, sinkEndpoint=3, sourceEndpoint=4, TransactionID=1 EAP Start event not received (trace line from success try) 00:05:25.057000 : EAPSessionStart(ctx=0x74e0b800){2} called[21;1H Is there any braking change on iOS 18 considering EASession? Also what is strange is that it works on fresh instal/restart iPhone, but not working on second attempt?
Replies
14
Boosts
7
Views
1.4k
Activity
Oct ’24
Bluetooth Connectivity Issues
Since 17.4 Dev Beta 2, I have been having Bluetooth issues. I had hoped it would have cleared up but even in 17.4.1 it continues. Airpod and Echo Auto are the only 2 audio devices I have. The audio will become chopping, rubber band or sound robotic and sometime completely disconnect. While driving it will occur on both audio devices. Sometimes I'm stopped at red light and the issue occurs. The phone is less than 3 feet from the device at all times. I have read forums and removed and readded the devices but that did not help. I really do not want to have to reset my phone since my 2FA apps do not recover in a restore. Anyone have any suggestions?
Replies
4
Boosts
0
Views
1.6k
Activity
Mar ’24
Will UVC native support come for the Iphone as well?
Will UVC native support come for the Iphone as well? So, using external cameras with the ipad is greatly beneficial, but for the iphone, it can make it a production powerhouse! So, have there been discussions around bringing UVC support for the Iphone as well? and if so, what were your conclusions?
Replies
2
Boosts
4
Views
1.2k
Activity
Oct ’23
EAAccessoryBluetoothPicker still broken in iOS 17
This is a regression since iOS 13. Is there no-one at Apple interested in fixing this? FB9856371
Replies
3
Boosts
0
Views
1.2k
Activity
Sep ’23