Summary: EASession initialization consistently returns nil on iOS 27 when connecting to a MFi-certified USB accessory. The same code and accessory work correctly on iOS 26. Apple's official EADemo sample code also fails on iOS 27.
Steps to Reproduce:
- Connect MFi-certified USB accessory to iOS 27 device via Lightning/USB-C
- Observe that EAAccessory is detected: connected=YES, connectionID=34951162
- Confirm protocol string is in accessory.protocolStrings
- Call [[EASession alloc] initWithAccessory:accessory forProtocol:@"*******"]
- EASession returns nil
Expected Results: EASession should be created successfully, allowing input/output stream configuration. This works correctly on iOS 26 with identical code and accessory.
Actual Results: EASession returns nil. System log shows: "[#ExternalAccessory] ERROR - .../EASession.m:-[EASession dealloc] - 212 unable to close session for _accessory=0x1513d3bb0 and sessionID=65536"
Note: sessionID=65536 indicates EASession was partially created but immediately deallocated.
Configuration:
- Device: 所有机型
- iOS Version: 27.0 beta
- Xcode Version: 26.3 (17C529)
- Build SDK: iOS 26 SDK
- Accessory PPID: cfc
- Accessory Firmware: L.B.1
- Accessory Hardware: 1.0.1
- App: Both our production app and Apple's official EADemo sample code
Info.plist Configuration:
- UISupportedExternalAccessoryProtocols includes "*****"
- UIBackgroundModes includes "external-accessory"
Device Settings:
- Settings > Privacy & Security > Security > Wired Accessories: "Automatically Allow When Unlocked"
Additional Notes:
- EAAccessory object is properly created and accessible
- Accessory protocol string matches exactly
- All MFi certificates present (certSerial: 16 bytes, certData: 608 bytes)
- Issue reproduced with Apple's official EADemo sample code, confirming this is not an application-level bug
- Issue does NOT occur on iOS 26 with same device and accessory
Regression:
- iOS 26: Works correctly
- iOS 27: Fails consistently