Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DeviceCapabilities.meetsAdvancedRequirements returns incorrect result on iPhone 15 Pro (possibly other devices) #36

Open
william-solus opened this issue Dec 13, 2023 · 1 comment

Comments

@william-solus
Copy link

Bug report

Checklist

  • [•] I'm using the latest release
  • [•] I've searched for existing issue

Environment

  • Unity 2022.3.11
  • Nice Vibrations 4.1.2
  • iPhone 15 Pro - iOS 17.1.2

Goals

Detecting support for advanced haptics, by using the included DeviceCapabilities.meetsAdvancedRequirements method.

Steps to Reproduce

Set up the Nice Vibrations package on a fresh Unity project, targeting the iOS platform. Add a debug call for DeviceCapabilities.meetsAdvancedRequirements, triggering on a button press, and monitor for the console output.

Expected behavior

iPhone devices from 2017 onwards (iPhone 8 and iPhone X and newer) all support Apple's Core Haptics API and should support all advanced haptics functionality, so the meetsAdvancedRequirements check should return true.

Observed behavior

The meetsAdvancedRequirements check returns false, which is incorrect. The hasAmplitudeModulation and hasFrequencyModulation checks also incorrectly return false, though these seem to use the same check method as meetsAdvancedRequirements anyway.

Code Samples & Details

These results can be confirmed as being returned incorrect by attempting to play advanced haptics without performing those checks beforehand. Advanced haptics files will play no problem at all without falling back to basic haptics, even though the requirement checks are saying that it's not supported.

I'm only able to test on the iPhone 15 Pro and iOS 17, so I'm not sure if this affects other devices, or just the latest generation iPhones (or potentially Android devices as well).

@cihadturhan
Copy link

I was checking the codebase and saw these lines.
Maybe unity returns undefined value for iphone 15+ devices. worth to print a debug log and see if it works fine.

DeviceGeneration generation = Device.generation;
if ((generation == DeviceGeneration.iPhone3G)
|| (generation == DeviceGeneration.iPhone3GS)
|| (generation == DeviceGeneration.iPodTouch1Gen)
|| (generation == DeviceGeneration.iPodTouch2Gen)
|| (generation == DeviceGeneration.iPodTouch3Gen)
|| (generation == DeviceGeneration.iPodTouch4Gen)
|| (generation == DeviceGeneration.iPhone4)
|| (generation == DeviceGeneration.iPhone4S)
|| (generation == DeviceGeneration.iPhone5)
|| (generation == DeviceGeneration.iPhone5C)
|| (generation == DeviceGeneration.iPhone5S)
|| (generation == DeviceGeneration.iPhone6)
|| (generation == DeviceGeneration.iPhone6Plus)
|| (generation == DeviceGeneration.iPhone6S)
|| (generation == DeviceGeneration.iPhone6SPlus)
|| (generation == DeviceGeneration.iPhoneSE1Gen)
|| (generation == DeviceGeneration.iPad1Gen)
|| (generation == DeviceGeneration.iPad2Gen)
|| (generation == DeviceGeneration.iPad3Gen)
|| (generation == DeviceGeneration.iPad4Gen)
|| (generation == DeviceGeneration.iPad5Gen)
|| (generation == DeviceGeneration.iPadAir1)
|| (generation == DeviceGeneration.iPadAir2)
|| (generation == DeviceGeneration.iPadMini1Gen)
|| (generation == DeviceGeneration.iPadMini2Gen)
|| (generation == DeviceGeneration.iPadMini3Gen)
|| (generation == DeviceGeneration.iPadMini4Gen)
|| (generation == DeviceGeneration.iPadPro10Inch1Gen)
|| (generation == DeviceGeneration.iPadPro10Inch2Gen)
|| (generation == DeviceGeneration.iPadPro11Inch)
|| (generation == DeviceGeneration.iPadPro1Gen)
|| (generation == DeviceGeneration.iPadPro2Gen)
|| (generation == DeviceGeneration.iPadPro3Gen)
|| (generation == DeviceGeneration.iPadUnknown)
|| (generation == DeviceGeneration.iPodTouch1Gen)
|| (generation == DeviceGeneration.iPodTouch2Gen)
|| (generation == DeviceGeneration.iPodTouch3Gen)
|| (generation == DeviceGeneration.iPodTouch4Gen)
|| (generation == DeviceGeneration.iPodTouch5Gen)
|| (generation == DeviceGeneration.iPodTouch6Gen)
|| (generation == DeviceGeneration.iPhone6SPlus))
{
isVersionSupported = false;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants