I understand that it is not necessary to include this com.apple.developer.driverkit.allow-any-userclient-access in the driver's Entitlements.
I have a new question: I include Capabilities in the Provisioning Profile that might not be used, just in case. If I don't list all these Capabilities in the driver's Entitlements, will it cause the driver to behave abnormally?
To issue vendor-specific commands, I created a driver class inheriting from the IOUserSCSIPeripheralDeviceType00 class in the SCSIPeripheralDriverKit Framework.
I then created a UserClient inheriting from the IOUserClient class to access it from the app, but IOServiceOpen fails with code 0xe00002d7 and cannot open.
The driver's entitlements are as follows.
<key>com.apple.developer.driverkit.transport.usb</key>
<true/>
<key>com.apple.developer.driverkit.family.scsicontroller</key>
<true/>
<key>com.apple.developer.driverkit.communicates-with-drivers</key>
<true/>
<key>com.apple.developer.driverkit.allow-third-party-userclients</key>
<true/>
<key>com.apple.developer.driverkit</key>
<true/>
And in the driver's Info.plist, the following definitions are specified.
<key>IOKitPersonalities</key>
<dict>
<key>SampleDriverKitDriver</key>
<dict>
<key>CFBundleIdentifier</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>CFBundleIdentifierKernel</key>
<string>com.apple.kpi.iokit</string>
<key>IOClass</key>
<string>IOSCSIPeripheralDeviceType00</string>
<key>IOProbeScore</key>
<integer>20000</integer>
<key>IOProviderClass</key>
<string>IOSCSIPeripheralDeviceNub</string>
<key>IOResourceMatch</key>
<string>IOKit</string>
<key>IOUserClass</key>
<string>SampleDriverKitDriver</string>
<key>IOUserClientClass</key>
<string>SampleDriverKitUserClient</string>
<key>IOUserServerName</key>
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
<key>Peripheral Device Type</key>
<integer>0</integer>
<key>Vendor Identifier</key>
<string>[write Device Vendor Name]</string>
<key>Product Identifier</key>
<string>[write Device Product Name]</string>
<key>UserClientProperties</key>
<dict>
<key>IOClass</key>
<string>IOUserUserClient</string>
<key>IOUserClass</key>
<string>SampleDriverKitUserClient</string>
</dict>
</dict>
</dict>
I suspect the code isn't written correctly to generate the UserClient. Is there anything wrong with the code?
Topic:
App & System Services
SubTopic:
Drivers