Post not yet marked as solved
SSDP still works on iOS 14 Beta 4 (18A5342e) for the Xcode 12 Beta 3 build (without the entitlement).
Will try a Xcode 12 Beta 4 build later (Xcode download is terribly slow).
Post not yet marked as solved
Or perhaps you meant to say “iOS 13 SDK”? I meant: "a build with the base SDK of Xcode 11.6 and deployment target iOS 11.0 (iPhone & iPad)".
For your iOS 14 app, not having the entitlement does not cause the dialog to not show up. It also does not in the beta restrict a socket from receiving packets that may come over multicast or broadcast. However, without the entitlement, your app should not be able to send multicast or broadcast UDP packets. We (still) don't have the entitlement yet, but the dialog does show up and the App does seem to *cast UDP packets (M-SEARCH):
No.	Source				Destination			Protocol	 Length	Info	192.168.1.13	239.255.255.250	SSDP			 148		M-SEARCH * HTTP/1.1
	192.168.1.117	192.168.1.13		SSDP			 325		HTTP/1.1 200 OK
(where 192.168.1.13 is the iPhone and 192.168.1.117 is the device)
Post not yet marked as solved
Thank you for answering Matt. Looks like I should have been more specific.
We're not using the 'Basic' HTTP Authentication Scheme from RFC 7617, but a custom challenge-response authentication scheme.
Our response to a challenge should be a HTTP header field "Authorization" with as value a string that combines these parts:
The name of our custom scheme
A space as a separator
A value calculated using the challenge and a shared secret
(See Appendix C of RFC 7235 for the exact syntax)
This probably means we can't use URLCredential?
(and thus I'm still concerned about "Authorization" being a reserved HTTP header field)
Post not yet marked as solved
Examples of fields not required by the embedded HTTP server on the IoT device:
Accept-Language
User-Agent
In fact, we (probably) only need these two header fields in a request:
Authorization
Content-Length
Several posts on Stack Overflow show how to remove the value, but the buffer is so small that we want/need to remove the entire key/value pair (not just the value).
How would we achieve that?