iOS VoiceOver functionality changes with Bundle Identifier

I am having an issue with VoiceOver not honoring coded Accessibility values (label/hint/ect). I have been able to replicate the issue by changing the Bundle Identifier. My original Bundle Identifier has issues with all VoiceOver Functions. If I append anything to the end of my Bundle Identifier, delete app on iPhone, close xCode, click on the project, let it build then install the issue is gone. If I rename back to the original Bundle Identifier, delete app on iPhone, close xCode, click on the project, let it build then install the issue returns. I have tried this process all day trying to isolate the issue, including deleting derived data after force close of xCode, and deleting all classes except the files created for a new project, and adding a new UITabBarController with empty ViewControllers. No matter what I try if I don't change the Bundle Identifier the issue persists. While the issue affects the entire app it is very evident on the UITabBarController. VoiceOver on the app with original Bundle Identifier Says the following when touching a Tab Bar Item

"Home Tab Actions Available" or "Home Tab swipe up or down to select a custom action then double tap to activate".

If I swipe voice over reads the Label ("Home") then the icon name if it exists (happens to be "Home" icon) then "Activate Default". If no icon name exists there is no VoiceOver in between label and "Activate Default". VoiceOver on the app with a new Bundle Identifier Says the following when touching a Tab Bar Item. I believe this is the correct way according to Apple's UITabBar documentation (uikit/uitabbar).

"Selected Home Tab 1 of 3"

The only difference in git is the Bundle Identifier.

myname@name-Mac-mini dretauth (appSignIn) $ git diff
diff --git a/dretauth.xcodeproj/project.pbxproj b/dretauth.xcodeproj/project.pbxproj
index 5a02b2a..ab01473 100644
--- a/dretauth.xcodeproj/project.pbxproj
+++ b/dretauth.xcodeproj/project.pbxproj
@@ -2325,7 +2325,7 @@
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 1.33;
-                               PRODUCT_BUNDLE_IDENTIFIER = "com.redacted.dretauth";
+                               PRODUCT_BUNDLE_IDENTIFIER = "com.redacted.dretauth.ctest";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SWIFT_VERSION = 5.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
@@ -2349,7 +2349,7 @@
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 1.33;
-                               PRODUCT_BUNDLE_IDENTIFIER = "com.redacted.dretauth";
+                               PRODUCT_BUNDLE_IDENTIFIER = "com.redacted.dretauth.ctest";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SWIFT_VERSION = 5.0;
                                TARGETED_DEVICE_FAMILY = "1,2";
myname@name-Mac-mini dretauth (appSignIn) $

If I search the entire project the only items that have the original bundle ID are the Build Settings, Info.plist, apple-app-site-association (saved in project but only used on server-side), and GoogleService-Info used for firebase notifications/crashlytics. I have another project with the same dependencies without any issues.

At this point I'm unsure how to get correct functionality into my app using the original Bundle Identifier. App is in production so changing the Identifier is out of the question. Thanks.

Accepted Reply

It sounds to me like you may have inadvertently enabled Screen Recognition for your app. We store this setting by bundle identifier on the system. You can use the rotor (rotate 2 fingers on the screen like you are rotating a dial) to get to Screen Recognition, and then swipe up or down to toggle it on or off. This feature uses machine learning models to attempt to make your app accessible rather than relying on the view hierarchy, which would be why the properties you are setting aren't being respected. If you toggle this off, it'll go back to reading from the view hierarchy.

  • Thank you! This worked, it appears it is saved at more than the system level (iCloud?). I purchased a new device today and did not import anything yet the issue persisted.

Add a Comment

Replies

It sounds to me like you may have inadvertently enabled Screen Recognition for your app. We store this setting by bundle identifier on the system. You can use the rotor (rotate 2 fingers on the screen like you are rotating a dial) to get to Screen Recognition, and then swipe up or down to toggle it on or off. This feature uses machine learning models to attempt to make your app accessible rather than relying on the view hierarchy, which would be why the properties you are setting aren't being respected. If you toggle this off, it'll go back to reading from the view hierarchy.

  • Thank you! This worked, it appears it is saved at more than the system level (iCloud?). I purchased a new device today and did not import anything yet the issue persisted.

Add a Comment