iOS VoiceOver 功能随捆绑包标识符发生变化

iOS VoiceOver functionality changes with Bundle Identifier

我遇到一个问题,VoiceOver 不支持编码的辅助功能值 (label/hint/ect)。我已经能够通过更改 Bundle Identifier 来重现该问题。我原来的 Bundle Identifier 对所有 VoiceOver 功能都有问题。如果我在 Bundle Identifier 的末尾附加任何内容,删除 iPhone 上的应用程序,清理项目,强制关闭 xCode,单击项目,让它构建然后安装问题就消失了。如果我重命名回原来的 Bundle Identifier,删除 iPhone 上的应用程序,强制关闭 xCode,单击项目,让它构建然后安装问题 returns。我整天都在尝试这个过程,试图找出问题所在。包括在 xCode 强制关闭后删除派生数据,但它似乎不会影响具有原始 Bundle Identifier 或新 Bundle Identifier 的应用程序。

虽然该问题会影响整个应用程序,但它在 UITabBarController 上非常明显。带有原始捆绑包标识符的应用程序上的 VoiceOver 触摸标签栏项目时说以下内容

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

如果我扫过语音读取标签(“主页”),然后是图标名称(如果存在)(恰好是“主页”图标),然后是“激活默认值”。如果不存在图标名称,则标签和“激活默认值”之间没有旁白。

带有新捆绑包标识符的应用程序上的 VoiceOver 在触摸标签栏项目时说出以下内容。根据 Apple 的 UITabBar 文档,我相信这是正确的方法 (uikit/uitabbar)。

"Selected Home Tab 1 of 3"

git 中的唯一区别是 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) $

如果我搜索整个项目,唯一具有原始包 ID 的项目是构建设置、Info.plist、apple-app-site-association(保存在项目中但仅在服务器端使用) ,以及用于 firebase 的 GoogleService-Info notifications/crashlytics。

此时我不确定如何使用原始的 Bundle Identifier 将正确的功能添加到我的应用程序中。应用程序正在生产中,因此无法更改标识符。谢谢

我花了好几天的时间在这个问题上下注。购买了新设备,但没有转移我的应用程序或设置,问题仍然存在。

我从 Apple Frameworks Engineer 那里得到了答复,尽管他们说屏幕识别设置是在系统级别保存的。我的猜测是屏幕识别保存在 iCloud 或其他一些同步位置,因为该设置在新设备安装时仍然存在。这是 Apple 的回应,以防有人遇到此问题。 https://developer.apple.com/forums/thread/698009

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.

此设置很难打开或关闭,只有在 VoiceOver 打开时才能在应用程序中使用。尽管它是一项辅助功能,但它并没有宣布如何调整该功能,只有一个拨盘,在选择设置后会迅速消失。没有迹象表明用户应该向上或向下滑动,向上或向下滑动必须在您拿起用于在表盘上查找设置的两根手指后一秒钟内完成。用户的手指很可能在转动表盘时处于奖励位置,因此可能需要尝试几次才能更改设置。无论如何,我希望这可以节省一些调试时间。