Still not having any luck with UDP, went back to the WWDC19 talk about implementing the framer and Tommy specifically talks about dliverInput saying:
So you can actually deliverInput of a message that's a megabyte long, a gigabyte long if you need to
I'm confused as to why I'm hitting this limitation of at just 50kb. Do you have any suggestions for a workaround?
Post
Replies
Boosts
Views
Activity
We are sending h264 compressed video frames, so it's quite normal to get 50kb+ frames going through
Isn't "dividing the data into smaller uniform UDP messages" called... fragmentation? I may be missing some nomenclature here, are you referring to manually handled fragmentation vs fallback fragmentation that Eskimo talks about in this thread.
Seeing no issues with frames under around 50k, and given how much higher than maximumDatagramSize I'm guessing we are hitting another limit.
Looking around for documentation around deliverInputNoCopy I can't see any limits on the size of the underlying buffer, can you recommend a way of figuring out if I'm hitting the limit here?
Thank you!
Reversed our apps so that the extension initiates the connection and iPhone listens, and that works!!
As per your instructions, I filed a bug report with id: FB10014566
Thanks for your help getting this far Eskimo!
Okies, there was no PlugIns folder so I ran it against Library/SystemExtensions/your.appex/Contents/MacOS/your.appex instead and am getting:
Executable=/Users/user/Library/Developer/Xcode/DerivedData/yourapp-btjjarujuhphwdbebkvxlnabcbot/Build/Products/Debug/yourapp.app/Contents/Library/SystemExtensions/com.team.yourapp.camera-extension.systemextension/Contents/MacOS/com.team.yourapp.camera-extension
[Dict]
[Key] com.apple.developer.networking.custom-protocol
[Value]
[Bool] true
[Key] com.apple.security.app-sandbox
[Value]
[Bool] true
[Key] com.apple.security.application-groups
[Value]
[Array]
[String] TEAM-IDENTIFIER.
[Key] com.apple.security.get-task-allow
[Value]
[Bool] true
[Key] com.apple.security.network.client
[Value]
[Bool] true
[Key] com.apple.security.network.server
[Value]
[Bool] true
Which is what we'd expect to see I'd guess? Making your customized sandbox possibility more likely.
Thanks!
Added a socket listener as per this guide: https://rderik.com/blog/xpc-services-on-macos-apps-using-swift/
That does trip Sandboxd with:
Sandbox: com.company.app(326) deny(1) network-bind:1234
Violation: deny(1) network-bind:1234
Went back to NWListener and looked for similar sandboxd violations and I managed to dig them out with the log show tool.
I am indeed getting
[com.apple.sandbox.reporting:violation] Sandbox: com.company.product(328) deny(1) network-bind*:62406
Violation: deny(1) network-bind*:62406
I don't understand why that would happen though given the entitlements on the file are set up as:
<dict>
<key>com.apple.developer.networking.custom-protocol</key>
<true/>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>$(TeamIdentifierPrefix)</string>
</array>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
Any ideas?
Thanks for the tip! I've looked for violation reports as per the thread but see no violation reports.
Out of curiosity I disabled the incoming and outgoing permissions on the extension target and there were still no violation reports but the NWListener fails in the same way.
Could there be other restrictions on the CMIO Virtual Camera Extension that could cause the failure?
Thanks for breaking this down Matt! Helped me a tonne!
For those trying to recreate this, I did have to change MemoryLayout.size to MemoryLayout.UInt32 to get it to not crap out at runtime with: error: UnsafeMutableRawBufferPointer.copyMemory source has too many elements