IOS画外音功能随捆绑包标识符而变化

人气:100 发布:2023-01-03 标签: ios accessibility xcode uitabbar voiceover

问题描述

我遇到了画外音不支持编码的可访问性值(标签/提示/ECT)的问题。我已经能够通过更改捆绑包标识符来复制该问题。我最初的捆绑识别器的所有画外音功能都有问题。如果我在捆绑包标识的末尾添加任何东西,删除iPhone上的应用程序,清理项目,强制关闭Xcode,单击项目,让它构建,然后安装问题就消失了。如果我重命名回原来的捆绑包标识,删除iPhone上的应用程序,强制关闭Xcode,点击项目,让它构建,然后安装问题返回。我一整天都在尝试这个过程,试图隔离这个问题。包括在强制关闭Xcode后删除派生数据,但它似乎既不会影响具有原始捆绑包标识符的应用程序,也不会影响新的捆绑包标识符。

虽然这个问题会影响整个应用程序,但它在UITabBarController上非常明显。带有原始捆绑包标识的应用程序上的画外音在触摸选项卡栏项目时会显示以下内容

"Home Tab Actions Available" or "Home Tab swipe up or down to select a custom action then double tap to activate". 
如果我滑动画外音显示标签(";Home";),则图标名称如果存在(恰好是";Home";图标),则";激活Default";。如果不存在图标名称,则在标签和激活默认图标之间没有画外音。

带有新捆绑识别符的应用程序上的画外音在触摸选项卡栏项目时会显示以下内容。根据Apple的UITabBar文档(uIKit/uitabbar),我认为这是正确的方式。

"Selected Home Tab 1 of 3"

Git中唯一的区别是捆绑包标识符。

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的项是Build设置、Info.plist、Apple-app-Site-Association(保存在项目中,但仅在服务器端使用)和用于Firebase通知/Crashlytics的GoogleService-Info。

在这一点上,我不确定如何使用原始的捆绑包标识符将正确的功能添加到我的应用程序中。应用程序正在生产中,因此更改标识符是不可能的。谢谢。

推荐答案

我花了几天时间把头都押在这上面了。已购买新设备,并且在未传输我的应用或设置的情况下问题仍然存在。

我从苹果框架工程师那里得到了答复,尽管他们说屏幕识别设置是在系统级别保存的。我的猜测是,屏幕识别保存在iCloud或其他同步位置,因为设置在新设备安装上保持不变。以下是苹果公司的回应,以防有人遇到这个问题。 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时才在应用程序中可用。尽管它是一个辅助功能,但它并没有宣布如何调整该功能,只有一个表盘在选择一个设置后很快就会消失。没有用户应该向上或向下滑动的迹象,向上或向下滑动必须在你拿起用来查找表盘上设置的两个手指后一秒钟内完成。用户的手指可能因为转动表盘而处于奖励位置,因此可能需要几次尝试才能更改设置。无论如何,我希望这能为某些人节省几天的调试时间。

1