Explore best practices for creating inclusive apps that cater to users with diverse abilities

Learn More

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

VoiceOver Announces Element Twice on After Posting screenChanged
VoiceOver announces the accessibility information for an element twice when I shift focus to that element. I set the focus using: UIAccessibility.post(notification: .screenChanged, argument: accessibilityElement) This is invoked at the dismissal of a modal view, after the accessibility value of the element has been changed. When the element receives focus, VoiceOver announces the element and it's old value, then announces the element and it's new value. Is there a way to prevent VoiceOver from announcing the element the first time? I only want this to happen after the new value has been set.
1
1
2.0k
Jun ’23
Localized SwiftUI macOS app picks the wrong localization
I am developing a SwiftUI based app (https://github.com/rsyncOSX/RsyncUI) which is localized to two languages, German and Norwegian. The development language is English. Running the app on a Norwegian macOS Montery works OK, the app shows the correct localization. Executing the app on an English macOS setup picks the German localization, and not the base localization which is English. And I don't know what causes the app to pick another language than English on a default English macOS setup.... I am experience this on macOS Monterey and Xcode 13, but also on macOS Big Sur and Xcode 12.5.1
2
0
1.2k
Aug ’21
Wrong InfoPlist.strings file used by the app
I recently added a new language to my app and I have an issue regarding the localization. Configuration: I have the developmentRegion in "fr" and setup 2 localizations: "French: Development language" and "Danish" The goal is to have the application in Danish language if the preferred language is Danish and French otherwise. Issue: If French or Danish appear in my preferred languages, I have no problem. But if neither French nor Danish was set as preferred language (like only English), I have the app translation in French as expected but all strings regarding app permission like "NSLocationWhenInUseUsageDescription" in system modal alert are in Danish. Is like the localizable.strings file used is in the "fr.lproj" and the InfoPlist.strings is the "da.lproj" debug I verify I have all the strings files at the right repository. I have: fr.lproj -- Localizable.strings -- InfoPlist.strings da.lproj -- Localizable.strings -- InfoPlist.strings I verify the file architecture in the .app file: find ***.app -name "*.strings" xxx.app/fr.lproj/InfoPlist.strings xxx.app/da.lproj/InfoPlist.strings xxx.app/fr.lproj/Localizable.strings xxx.app/da.lproj/Localizable.strings Finally I print the Bundle.main.localizedInfoDictionary and I have values of the French file but the application show the Danish ones Thanks for the help.
6
0
2.5k
Sep ’23
Accessibility Labels on popup buttons in NSPredicateEditor
Hi there! I'm trying to set Accessibility Labels on the popup buttons inside rows in an NSPredicateEditor. In the NSPredicateEditorRowTemplate subclass I've tried setting the accessibilityLabel property directly, as well as setting it on the id returned by NSAccessibilityUnignoredDescendant() like this: - (NSArray<NSView *> *)templateViews {     NSArray *views = [super templateViews];   NSPopUpButton *keyPathButton = (NSPopUpButton *)views[0];         keyPathButton.accessibilityLabel = NSLocalizedString(@"Filter Options", nil);     [NSAccessibilityUnignoredDescendant(keyPathButton) setAccessibilityLabel:NSLocalizedString(@"Filter Options", nil)];     return views; } When I check the popup button with Accessibility Inspector I don't see any Label at all. Even trying to add tooltips to the popup buttons fails. Anyone have any tips? Interesting sidenote: I can successfully set the Accessibility Label on the text field in the -templateViews method, just not the popup buttons. Thanks!
0
0
530
Jul ’21
getting voice over's trackpad commander on/off key value and observing it
Hi magic people I'm currently finishing up a project and making sure everything runs smooth whether sighted or voice over user, and am coming across a snag. I'm trying to observe a key in CFPreferences which tells whether the trackpad commander is on or off. I need this in order to have the trackpad turn a few things off when it's on and back on when it turns off. I so far have a key I know which is to check whether voice over is on as below:     let VOFlag:Bool = {         let flag = CFPreferencesCopyValue("voiceOverOnOffKey" as CFString, "com.apple.universalaccess" as CFString, NSUserName() as CFString, Host.current().localizedName! as CFString)         return ((flag as! Int) == 1) ? true : false     }() However, I have 2 questions: 1-Which is the key for checking if trackpad commander is on or off? I tried going to ~/Library/Preferences/ but there are many files and a grep may help but perhaps someone here already has the key? :) 2-Is there a way to observe said key and have a callback function associated to it? I feel I'm close to finding the solution myself, but if someone can cut through the chase with an answer, I got a virtual bean of the month cappuccino for you haha Update: By looking into ~/Library/Preferences and doing a grep, I found SCRCTrackpadCommanderEnabled So i guess the above code can become:         let flag = CFPreferencesCopyValue("SCRCTrackpadCommanderEnabled" as CFString, "com.apple.universalaccess" as CFString, NSUserName() as CFString, Host.current().localizedName! as CFString) But now how do I observe this key? The value I get is a CFPropertyList? and I'm copying the value in the above. I couldn't find a CFPreferencesObserve or other type of functions. Edit 2: i tried the following:         flag!.addObserver(self, selector: #selector(testVO), name: nil, object: nil) @objc func testVO() { print("toggled") } but I get: __NSCFBoolean addObserver:selector:name:object:]: unrecognized selector sent to instance
0
0
460
Aug ’21
Users and Access(Enter an email address that has never been associated with an Apple ID.)
One client has invited me as an admin of the own Apple developer's account to manage the apps. One more client wants to add me as an admin of their Apple Developer's account but he can't do that he is getting the below message. Enter an email address that has never been associated with an Apple ID. Please give me a solution so that my client can add my email account as an admin to manage to Apps.
1
0
963
Oct ’21
AirPods Pro Beta Firmware — no accommodations in transparency
I got the first AirPods Pro Beta Firmware installed, version 4A305j. I used to use my AirPods Pro in Headphone Accommodation mode, with amplification on in Transparency mode — like basic hearing aids. With this new firmware update, I no longer have headphone accommodation settings available in transparency mode — only phone and media. Is this expected or a bug? I filed as a bug, but I'm deeply curious.
1
0
3.1k
Aug ’21
MKMapView Accessibility Contrast
We had an ADA audit where it was called out that the MKMapView lacks ADA compliant contrast: It's referring to the MKMapView's default text for place descriptions. Is there a way to change this? I don't see any properties we could use to override it. Here's the description of the issue found: The contrast ratio between text and its background is not at least 4.5:1. Current Behavior: Text content (Points of interest etc.) and its background on the maps lack 4.5:1 contrast ratio Expected Behavior: Text content (Points of interest etc.) and its background on the maps must meet 4.5:1 contrast ratio
0
0
473
Aug ’21
Multi-country / internationalisation
We would like to launch our app in the US, it's currently live in the UK only. For us this means we want it also to be available in the US app store and for US people who sign up to our programme to be able to view US related content within the app. I've been unable to easily find any documentation about how to go about this, how submission would change/be different if so, what changes we would need to make, app store nuances etc. I am not the person who deals with the submissions, app store connect etc but I run one of the scrum teams dealing with this launch. Is there an article or a checklist about this?
0
0
504
Aug ’21
Using VoiceOver DirectInteraction with TextEditor or TextField not working as expected
Hello everyone,  I am currently on the development of an app dedicated to deafblind people.  In order to do that, I must allow the use of the application at the same time to a blind person and a sighted person.  The chosen strategy consists of systematically running the application under Voice Over, and activating or deactivating the "DirectTouch" option depending on whether it is the sighted or blind person using the application.  Things generally work fine, except when it comes to editing a TextEditor area. Indeed, as soon as the focus of Voice Over is found on the text zone to be modified, the DirectTouch option is automatically deactivated from all the other elements of the view, without us being able to do anything about it.  In order to spotlight this problem, I have made a simpler app, where there only are : a toggle button, a push button and an editable text area. All of them have the modifier : .accessibility(addTraits: AllowsDirectInteraction).  When the app launches, we are well able to interact with the 2 buttons via DirectTouch under voice over.  But as soon as we want to modify the editable text zone, the DirectTouch is deactivated on the whole view, including the 2 buttons on which it worked just before.  To restore it, you must then remove the keyboard which allows you to write in the text area. And DirectTouch is automatically reactivated.  Attached is the code of our "simple" application which allows us to illustrate the problem: VStack {  //Button to resign first responder from the TextEditor  Button {                  UIApplication.shared.resignFirstResponder()  } label: {                  Text(“ResponderResignButton”)  }    //Toggle to observe the correct functioning of directInteraction  Toggle(isOn: $isToggleOn) {  Text(“TestToggle :”)  }                  //Editable text area declaration  TextEditor(text: $text)  }  .accessibility(addTraits: AllowsDirectInteraction) //DirectInteraction apply to all app elements  Do not hesitate to ask me questions if everything is not clear, I thank you in advance for your feedback. Even if you do not have the exact solution to my question, any information will be welcome no matter what happens  kindly  Bisa
0
0
465
Aug ’21
Having trouble with Accessibility API of the ApplicationServices framework
After replacing Big Sur OSX 11.0 with the latest 11.5, my app's AXObserverAddNotification methods fails. Here is sample code I tested from StackOverflow: https://stackoverflow.com/questions/853833/how-can-my-app-detect-a-change-to-another-apps-window AXUIElementRef app = AXUIElementCreateApplication(82695); // the pid for front-running Xcode 12.5.1 CFTypeRef frontWindow = NULL; AXError err = AXUIElementCopyAttributeValue( app, kAXFocusedWindowAttribute, &frontWindow );     if ( err != kAXErrorSuccess ){         NSLog(@"failed with error: %i",err);     } NSLog(@"app: %@  frontWindow: %@",app,frontWindow); 'frontWindow' reference is never created and I get the error number -25204. It seems like the latest Big Sur 11.5 has revised the Accessibility API or perhaps there is some permission switch I am unaware of that would make things work. What am I doing wrong?
2
0
937
Jun ’25
trouble enabling two finger gesture to go back to previous page on a webview app
I have enabled the following swipe gesture and it works however with voiceover it doesnt respond and doesnt allow the user to go back with the two finger swipe from left to right Heres the code that i have written so far - import UIKit import WebKit class ViewController: UIViewController { let webView: WKWebView = { let prefs = WKWebpagePreferences() prefs.allowsContentJavaScript = true let configuration = WKWebViewConfiguration() configuration.defaultWebpagePreferences = prefs let webView = WKWebView(frame: .zero, configuration: configuration) return webView }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(webView) guard let url = URL(string: "https://sindhisystems.co.uk") else { return } func goBack(_ sender: Any) { webView.goBack() } webView.load(URLRequest(url: url)) webView.customUserAgent = "iPad/Chrome/SomethingRandom" webView.allowsBackForwardNavigationGestures = true DispatchQueue.main.asyncAfter(deadline: .now()+5) { self.webView.evaluateJavaScript("document.body.innerHTML") { result, error in guard let html = result as? String, error == nil else { return } print(html) } } } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() webView.frame = view.bounds } }
0
0
659
Aug ’21
Blue tooth connection
Any open issues with blue tooth connection on software version 14.4
Replies
1
Boosts
0
Views
1.2k
Activity
Nov ’21
Bulgarian Cyrillic alphabet д character showing as g
I have translated my app into Bulgarian bg_BG and I am seeing that the 'д' character always shows up as 'g' as well as the 'т' character always showing up as 'm'. Both of these characters show up properly in the Russian ru_RU translation of the app. Does iOS show a different Cyrillic alphabet for Bulgarian?
Replies
2
Boosts
1
Views
1.5k
Activity
Aug ’21
VoiceOver Announces Element Twice on After Posting screenChanged
VoiceOver announces the accessibility information for an element twice when I shift focus to that element. I set the focus using: UIAccessibility.post(notification: .screenChanged, argument: accessibilityElement) This is invoked at the dismissal of a modal view, after the accessibility value of the element has been changed. When the element receives focus, VoiceOver announces the element and it's old value, then announces the element and it's new value. Is there a way to prevent VoiceOver from announcing the element the first time? I only want this to happen after the new value has been set.
Replies
1
Boosts
1
Views
2.0k
Activity
Jun ’23
How do I add a complete Gaelic dictionary without adding individual custom words?
How do I add a complete Gaelic dictionary without adding individual custom words? Thank you.
Replies
1
Boosts
0
Views
549
Activity
Aug ’21
Localized SwiftUI macOS app picks the wrong localization
I am developing a SwiftUI based app (https://github.com/rsyncOSX/RsyncUI) which is localized to two languages, German and Norwegian. The development language is English. Running the app on a Norwegian macOS Montery works OK, the app shows the correct localization. Executing the app on an English macOS setup picks the German localization, and not the base localization which is English. And I don't know what causes the app to pick another language than English on a default English macOS setup.... I am experience this on macOS Monterey and Xcode 13, but also on macOS Big Sur and Xcode 12.5.1
Replies
2
Boosts
0
Views
1.2k
Activity
Aug ’21
Wrong InfoPlist.strings file used by the app
I recently added a new language to my app and I have an issue regarding the localization. Configuration: I have the developmentRegion in "fr" and setup 2 localizations: "French: Development language" and "Danish" The goal is to have the application in Danish language if the preferred language is Danish and French otherwise. Issue: If French or Danish appear in my preferred languages, I have no problem. But if neither French nor Danish was set as preferred language (like only English), I have the app translation in French as expected but all strings regarding app permission like "NSLocationWhenInUseUsageDescription" in system modal alert are in Danish. Is like the localizable.strings file used is in the "fr.lproj" and the InfoPlist.strings is the "da.lproj" debug I verify I have all the strings files at the right repository. I have: fr.lproj -- Localizable.strings -- InfoPlist.strings da.lproj -- Localizable.strings -- InfoPlist.strings I verify the file architecture in the .app file: find ***.app -name "*.strings" xxx.app/fr.lproj/InfoPlist.strings xxx.app/da.lproj/InfoPlist.strings xxx.app/fr.lproj/Localizable.strings xxx.app/da.lproj/Localizable.strings Finally I print the Bundle.main.localizedInfoDictionary and I have values of the French file but the application show the Danish ones Thanks for the help.
Replies
6
Boosts
0
Views
2.5k
Activity
Sep ’23
Country availability applies to updates?
If i remove a country from my app's availability list, will users in that country that already had my app installed receive updates and see the update available in the appstore?
Replies
1
Boosts
0
Views
1.5k
Activity
Jun ’22
Can we register our iOS App inside Accessibility option of iPhone
Can we register our iOS App inside Accessibility option of iPhone.
Replies
0
Boosts
0
Views
425
Activity
Jul ’21
Accessibility Labels on popup buttons in NSPredicateEditor
Hi there! I'm trying to set Accessibility Labels on the popup buttons inside rows in an NSPredicateEditor. In the NSPredicateEditorRowTemplate subclass I've tried setting the accessibilityLabel property directly, as well as setting it on the id returned by NSAccessibilityUnignoredDescendant() like this: - (NSArray<NSView *> *)templateViews {     NSArray *views = [super templateViews];   NSPopUpButton *keyPathButton = (NSPopUpButton *)views[0];         keyPathButton.accessibilityLabel = NSLocalizedString(@"Filter Options", nil);     [NSAccessibilityUnignoredDescendant(keyPathButton) setAccessibilityLabel:NSLocalizedString(@"Filter Options", nil)];     return views; } When I check the popup button with Accessibility Inspector I don't see any Label at all. Even trying to add tooltips to the popup buttons fails. Anyone have any tips? Interesting sidenote: I can successfully set the Accessibility Label on the text field in the -templateViews method, just not the popup buttons. Thanks!
Replies
0
Boosts
0
Views
530
Activity
Jul ’21
getting voice over's trackpad commander on/off key value and observing it
Hi magic people I'm currently finishing up a project and making sure everything runs smooth whether sighted or voice over user, and am coming across a snag. I'm trying to observe a key in CFPreferences which tells whether the trackpad commander is on or off. I need this in order to have the trackpad turn a few things off when it's on and back on when it turns off. I so far have a key I know which is to check whether voice over is on as below:     let VOFlag:Bool = {         let flag = CFPreferencesCopyValue("voiceOverOnOffKey" as CFString, "com.apple.universalaccess" as CFString, NSUserName() as CFString, Host.current().localizedName! as CFString)         return ((flag as! Int) == 1) ? true : false     }() However, I have 2 questions: 1-Which is the key for checking if trackpad commander is on or off? I tried going to ~/Library/Preferences/ but there are many files and a grep may help but perhaps someone here already has the key? :) 2-Is there a way to observe said key and have a callback function associated to it? I feel I'm close to finding the solution myself, but if someone can cut through the chase with an answer, I got a virtual bean of the month cappuccino for you haha Update: By looking into ~/Library/Preferences and doing a grep, I found SCRCTrackpadCommanderEnabled So i guess the above code can become:         let flag = CFPreferencesCopyValue("SCRCTrackpadCommanderEnabled" as CFString, "com.apple.universalaccess" as CFString, NSUserName() as CFString, Host.current().localizedName! as CFString) But now how do I observe this key? The value I get is a CFPropertyList? and I'm copying the value in the above. I couldn't find a CFPreferencesObserve or other type of functions. Edit 2: i tried the following:         flag!.addObserver(self, selector: #selector(testVO), name: nil, object: nil) @objc func testVO() { print("toggled") } but I get: __NSCFBoolean addObserver:selector:name:object:]: unrecognized selector sent to instance
Replies
0
Boosts
0
Views
460
Activity
Aug ’21
Users and Access(Enter an email address that has never been associated with an Apple ID.)
One client has invited me as an admin of the own Apple developer's account to manage the apps. One more client wants to add me as an admin of their Apple Developer's account but he can't do that he is getting the below message. Enter an email address that has never been associated with an Apple ID. Please give me a solution so that my client can add my email account as an admin to manage to Apps.
Replies
1
Boosts
0
Views
963
Activity
Oct ’21
AirPods Pro Beta Firmware — no accommodations in transparency
I got the first AirPods Pro Beta Firmware installed, version 4A305j. I used to use my AirPods Pro in Headphone Accommodation mode, with amplification on in Transparency mode — like basic hearing aids. With this new firmware update, I no longer have headphone accommodation settings available in transparency mode — only phone and media. Is this expected or a bug? I filed as a bug, but I'm deeply curious.
Replies
1
Boosts
0
Views
3.1k
Activity
Aug ’21
MKMapView Accessibility Contrast
We had an ADA audit where it was called out that the MKMapView lacks ADA compliant contrast: It's referring to the MKMapView's default text for place descriptions. Is there a way to change this? I don't see any properties we could use to override it. Here's the description of the issue found: The contrast ratio between text and its background is not at least 4.5:1. Current Behavior: Text content (Points of interest etc.) and its background on the maps lack 4.5:1 contrast ratio Expected Behavior: Text content (Points of interest etc.) and its background on the maps must meet 4.5:1 contrast ratio
Replies
0
Boosts
0
Views
473
Activity
Aug ’21
Multi-country / internationalisation
We would like to launch our app in the US, it's currently live in the UK only. For us this means we want it also to be available in the US app store and for US people who sign up to our programme to be able to view US related content within the app. I've been unable to easily find any documentation about how to go about this, how submission would change/be different if so, what changes we would need to make, app store nuances etc. I am not the person who deals with the submissions, app store connect etc but I run one of the scrum teams dealing with this launch. Is there an article or a checklist about this?
Replies
0
Boosts
0
Views
504
Activity
Aug ’21
Liechtenstein Availability
Hi everyone, Currently it is not possible to activate an app explicitly for Liechtenstein in App Store Connect. Is the country enabled via another country/region? Or have I overlooked something?
Replies
1
Boosts
1
Views
1.4k
Activity
Aug ’21
Using VoiceOver DirectInteraction with TextEditor or TextField not working as expected
Hello everyone,  I am currently on the development of an app dedicated to deafblind people.  In order to do that, I must allow the use of the application at the same time to a blind person and a sighted person.  The chosen strategy consists of systematically running the application under Voice Over, and activating or deactivating the "DirectTouch" option depending on whether it is the sighted or blind person using the application.  Things generally work fine, except when it comes to editing a TextEditor area. Indeed, as soon as the focus of Voice Over is found on the text zone to be modified, the DirectTouch option is automatically deactivated from all the other elements of the view, without us being able to do anything about it.  In order to spotlight this problem, I have made a simpler app, where there only are : a toggle button, a push button and an editable text area. All of them have the modifier : .accessibility(addTraits: AllowsDirectInteraction).  When the app launches, we are well able to interact with the 2 buttons via DirectTouch under voice over.  But as soon as we want to modify the editable text zone, the DirectTouch is deactivated on the whole view, including the 2 buttons on which it worked just before.  To restore it, you must then remove the keyboard which allows you to write in the text area. And DirectTouch is automatically reactivated.  Attached is the code of our "simple" application which allows us to illustrate the problem: VStack {  //Button to resign first responder from the TextEditor  Button {                  UIApplication.shared.resignFirstResponder()  } label: {                  Text(“ResponderResignButton”)  }    //Toggle to observe the correct functioning of directInteraction  Toggle(isOn: $isToggleOn) {  Text(“TestToggle :”)  }                  //Editable text area declaration  TextEditor(text: $text)  }  .accessibility(addTraits: AllowsDirectInteraction) //DirectInteraction apply to all app elements  Do not hesitate to ask me questions if everything is not clear, I thank you in advance for your feedback. Even if you do not have the exact solution to my question, any information will be welcome no matter what happens  kindly  Bisa
Replies
0
Boosts
0
Views
465
Activity
Aug ’21
Gesture
Is it possible to add custom gesture to the full keyboard access?
Replies
0
Boosts
0
Views
524
Activity
Aug ’21
Having trouble with Accessibility API of the ApplicationServices framework
After replacing Big Sur OSX 11.0 with the latest 11.5, my app's AXObserverAddNotification methods fails. Here is sample code I tested from StackOverflow: https://stackoverflow.com/questions/853833/how-can-my-app-detect-a-change-to-another-apps-window AXUIElementRef app = AXUIElementCreateApplication(82695); // the pid for front-running Xcode 12.5.1 CFTypeRef frontWindow = NULL; AXError err = AXUIElementCopyAttributeValue( app, kAXFocusedWindowAttribute, &frontWindow );     if ( err != kAXErrorSuccess ){         NSLog(@"failed with error: %i",err);     } NSLog(@"app: %@  frontWindow: %@",app,frontWindow); 'frontWindow' reference is never created and I get the error number -25204. It seems like the latest Big Sur 11.5 has revised the Accessibility API or perhaps there is some permission switch I am unaware of that would make things work. What am I doing wrong?
Replies
2
Boosts
0
Views
937
Activity
Jun ’25
Any issues with bluetooth connection
Any issues with bluetooth connection iOS 14
Replies
1
Boosts
0
Views
967
Activity
Jun ’22
trouble enabling two finger gesture to go back to previous page on a webview app
I have enabled the following swipe gesture and it works however with voiceover it doesnt respond and doesnt allow the user to go back with the two finger swipe from left to right Heres the code that i have written so far - import UIKit import WebKit class ViewController: UIViewController { let webView: WKWebView = { let prefs = WKWebpagePreferences() prefs.allowsContentJavaScript = true let configuration = WKWebViewConfiguration() configuration.defaultWebpagePreferences = prefs let webView = WKWebView(frame: .zero, configuration: configuration) return webView }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(webView) guard let url = URL(string: "https://sindhisystems.co.uk") else { return } func goBack(_ sender: Any) { webView.goBack() } webView.load(URLRequest(url: url)) webView.customUserAgent = "iPad/Chrome/SomethingRandom" webView.allowsBackForwardNavigationGestures = true DispatchQueue.main.asyncAfter(deadline: .now()+5) { self.webView.evaluateJavaScript("document.body.innerHTML") { result, error in guard let html = result as? String, error == nil else { return } print(html) } } } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() webView.frame = view.bounds } }
Replies
0
Boosts
0
Views
659
Activity
Aug ’21