Explore best practices for creating inclusive apps for users of Apple accessibility features and users from diverse backgrounds.

All subtopics

Post

Replies

Boosts

Views

Activity

Bug in DeviceActivity
I am developing an app using DeviceActivity. let schedule = DeviceActivitySchedule( intervalStart: DateComponents(hour : 0, minute : 0, second: 1), intervalEnd: DateComponents(hour : 23, minute : 59, second: 59), repeats: true ) I found that on the second day, intervalDidStart(for: DeviceActivityName) gets called multiple times. I also tried let schedule = DeviceActivitySchedule( intervalStart: DateComponents(hour : 0, minute : 0, second: 1), intervalEnd: DateComponents(hour : 23, minute : 59, second: 59), repeats: false ) and started monitoring for the next day in the intervalDidEnd(for: DeviceActivityName) method. but , intervalDidStart(for: DeviceActivityName) still gets called multiple times. How should I resolve this issue?
0
0
232
Oct ’24
Text Replacement preferences are not exportabe, is there a PLIST file or similar that stores these values?
macOS > Settings > Keyboard > Text Replacement is a macOS/iOS feature I use extensively but it is unavailable in quite a few macOS applications — including some Apple apps like Xcode. Other apps I want Text Replacement to work in but it doesn't are the Adobe CC suite, all my code text editors like VC Studio, Sublime Text, BBEdit, emacs etc and Firefox. Does anybody know what the file path is for the file that stores the Text Replacement key/string pair data? If i can access the .plist file or similar where the Text Replacement key/string pairs are stored I will be able to convert to JSON using REGEX and import to the Firefox plugin that will replicate Text Replacement functionality in Firefox for me. Ditto other code editor applications with their own particular text substitution functionality. Background Some of these apps have plugins or functional equivalents of Text Replacement but i need a way to do the import/export dance to keep them in sync with my Text Replacement text pairs. Sadly, even though we can select the Text Replacement table (in macOS but not in iOS versions), we can't copy that information. This seems to me a violation of good GUI design principles. Why allow selection of the entire table if we cannot copy it to the clipboard? Nor can we import or export the table of text tuples. The Text Replacement GUI has no buttons to do this (consider this post also a FR for that). Screen-capturing and running text recognition software over the PNG it is not an option given: a) all the UTF-16 unusual glyphs and combination glyphs i use; b) that I'd like to script this as a multi-directional syncing application I can run periodically. Typically macOS and app preferences are stored in plist files. I want to find such a file and convert it to JSON for importing into a Firefox plugin that replicates Text Replacement within Firefox. I tried modifying Text Replacements by adding a new item to the list and clicking "Done" and then filtering ~/Library for .plist files and sorting by "Date Modified" but nothing is showing up with these values in it.
2
0
282
Oct ’24
When to use Numbered Lists in VoiceOver Accessibility
When would it be a good idea to utilize numbered lists with VoiceOver accessibility. As an example, for tab bars it will read about "2 of 5". In speaking with an Accessibility engineer at WWDC this year, the said that its good practice, but we ran out of time in the call to dig further deeper. When or how do you know when you should read out the item count "2 of 5". It makes sense to me in say a tab group or a chip group, but I don't see it being good in say potentially a UITableView with potentially a various number of sections of which each section itself can include multiple cells. I've had trouble finding additional guidance on this topic, if anyone can provide recommendations or their thoughts, that would be great.
3
0
440
Oct ’24
Voice memos
Can it please be explained why the voice memo layers is exclusive to iPhone 16 pro models? I was told by apple support that if it was possible on older models Apple would have implemented it. This type of functionality has been in technology for tens of years and has a proven track record of being implemented across so many different platforms and even apps in Apples on App Store. So that response from apple support is just rubbish to be honest. Even if the response is “so we can sell the iPhone 16 pro“ then so be it. ive noticed Apple locking software features to new devices lately and it’s genuinely making me think about buying my first even android phone.. because I really don’t support these kind of scummy tactics. many thanks,
1
0
334
Oct ’24
App Icon Shows Black Background in iOS 18 Settings Dark Mode
After updating to iOS 18, I've noticed that my app's icon displays correctly on the home screen but appears with a black background in the 'Settings > Apps' section when Dark Mode is active. The icon currently has a non-transparent gradient orange background, and I haven't set up a separate icon for Dark Mode. Has anyone else experienced this issue, or does anyone have suggestions for how to ensure the app icon looks the same in Dark Mode as it does in Light Mode?
1
1
589
Oct ’24
AWDL operation mode from AUTO to SUSPENDED Fault
mac book air 2016 will not switch on just loading apple screen comes up please assist me anyone. 1080211AWDLPeerManager: :setAwd|SuspendedMode() Suspending AWDL, enterQuietMade (true) 1080211AWDLPeerManager:: setAwdlOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwd|AutoMode Resuming AWDL 1080211AWDLPeerManager: : setAwdlOperatingMode Setting the AWDL operation made from AUTO to SUSPENDED 1080211AWDLPeerManager: :setAwd|SuspendedMode() Suspending AWDL, enterQuietMode(true) 1080211AWDLPeer Manager: : setAwdlOperat ingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwd|AutoMode Resuming AWDL 1080211AWDLPeerManager: :setAwdlOperatingMode Setting the AWDL operation made from AUTO to SUSPENDED 1080211AWDLPeerManager: :setAwdlSuspendedMode() Suspending AWDL, enterQuietlade (true) 1080211AWDLPeerManager: :setAwdLOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwdLAutoMode Resuming AWDL 1080211AWDLPeerManager: :setAwdLOperatingMode Setting the AWDL operation mode from AUTO to SUSPENDED I080211AWDLPeerManager: :setAwdlSuspendedMode() Suspending AWDL, enterQuietMode (true) 1080211AWDLPeerManager:: setAwdlOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwdlAutoMode Resuming AWDL 1080211AWDLPeerManager: :setAwd LOperatingMode Setting the AWDL operation mode from AUTO to SUSPENDED 1080211AWDLPeerManager ::setAwdlSuspendedMode( Suspending AWDL, enterQuietMode (true) 1080211AWDLPeerManager: :setAwdLOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwdlAutoMode Resuming AWDL 1080211AWDLPeerManager: :setAwdlOperatingMode Setting the AWDL operation mode from AUTO to SUSPENDED 1080211AWDLPeerManager:: setAwdlSuspendedMode() Suspending AWDL, enterQuietMode(true) 1080211AWDLPeerManager: :setAwdLOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager : :setAwdlAutoMode Resuming AWDL 1080211AWDLPeerManager: :setAwdLOperatingMode Setting the AWDL operation mode from AUTO to SUSPENDED 1080211AWDLPeerManager ::setAwdlSuspendedMode() Suspending AWDL, enterQuietMode (true) 1080211AWDLPeer Manager: :setAwdlOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwdLAutoMode Resuming AWDL 1080211AWDLPeerManager ::setAwdlOperatingMode Setting the AWDL operation mode from AUTO to SUSPENDED 1080211AWDLPeerManager: : setAwd|SuspendedMode () Suspending ANDL, enterQuietMode (true) 1080211AWDLPeerManager: :setAwdlOperatingMode Setting the AWDL operation mode from SUSPENDED to AUTO 1080211AWDLPeerManager: :setAwdlAutoMode Resuming AWDL 1080211AWDLPeerManager: :setAwdLOperatingMode Setting the AWDL operation mode from AUTO to SUSPENDED
0
0
193
Oct ’24
question about App Store Server Notifications
I have 2 subscriptions, monthly and year first:DID_CHANGE_RENEWAL_PREF + DOWNGRADE: Customer downgrades a subscription within the same subscription group; The current subscribe is year;if i change to month;when the subscribe year was expire,Automatic renewal will change to month second:DID_CHANGE_RENEWAL_PREF+UPGRADE: Customer upgrades a subscription within the same subscription group. The current subscribe is month;if i change to year;I need to pay for the annual subscription immediately;and The subscription immediately switches to the annual third:DID_CHANGE_RENEWAL_PREF subtype is None Customer reverts to the previous subscription, effectively canceling their downgrade. what this mean? This is Test Env,month is five minutes;year is one hour ①My current subscription is an annual, startTime:2024-10-02 15:04:58 ,expireTime:2024-10-02 16:04:58 ②first DOWNGRADE to month,at 2024-10-02 15:14:16 ②after 38 minutes,I change to the annual subscribe;at 2024-10-02 15:52:00 in the end,the Notification purchaseDate 2024-10-02 15:52:00;expiresDate 2024-10-02 16:52:00; So When I get NotificationType=DID_CHANGE_RENEWAL_PREF,NotificationSubType=None,Do I need to create a new subscription for the users? Is it the latest notice of purchaseDate and expiresDate, for a year? The appleNotification Payload as follows: JWSTransactionDecodedPayload( originalTransactionId='2000000731045285', transactionId='2000000731088945', webOrderLineItemId='2000000076096676', bundleId='app.xxxx', productId='com.xxxx.365', subscriptionGroupIdentifier='21514251', purchaseDate=1727855520000, 2024-10-02 15:52:00 originalPurchaseDate=1727852699000, 2024-10-02 15:04:59 expiresDate=1727859120000, 2024-10-02 16:52:00 quantity=1, type=<Type.AUTO_RENEWABLE_SUBSCRIPTION: 'Auto-Renewable Subscription'>, rawType='Auto-Renewable Subscription', appAccountToken='fa37b7a2-2b0b-43cb-8fda-a1fb21168efe', inAppOwnershipType=<InAppOwnershipType.PURCHASED: 'PURCHASED'>, rawInAppOwnershipType='PURCHASED', signedDate=1727855526632, 2024-10-02 15:52:06 revocationReason=None, rawRevocationReason=None, revocationDate=None, isUpgraded=None, offerType=None, rawOfferType=None, offerIdentifier=None, environment=<Environment.SANDBOX: 'Sandbox'>, rawEnvironment='Sandbox', storefront='CAN', storefrontId='143455', transactionReason=<TransactionReason.PURCHASE: 'PURCHASE'>, rawTransactionReason='PURCHASE', currency='CAD', price=14990, offerDiscountType=None, rawOfferDiscountType=None) JWSRenewalInfoDecodedPayload( expirationIntent=None, rawExpirationIntent=None, originalTransactionId='2000000731045285', autoRenewProductId='com.xxxx.365', productId='com.xxxx.365', autoRenewStatus=<AutoRenewStatus.ON: 1>, rawAutoRenewStatus=1, isInBillingRetryPeriod=None, priceIncreaseStatus=None, rawPriceIncreaseStatus=None, gracePeriodExpiresDate=None, offerType=None, rawOfferType=None, offerIdentifier=None, signedDate=1727855526632, 2024-10-02 15:52:06 environment=<Environment.SANDBOX: 'Sandbox'>, rawEnvironment='Sandbox', recentSubscriptionStartDate=1727852698000, 2024-10-02 15:04:58 renewalDate=1727859120000, 2024-10-02 16:52:00 currency='CAD', renewalPrice=14990, offerDiscountType=None, rawOfferDiscountType=None, eligibleWinBackOfferIds=None) Boost Unwatched post
0
0
197
Oct ’24
User interface in Ainu.
I have mulling over this for many years ,Uralic and Siberian language user interface Support.Ainu of Japan is only supported by writing roman and rendering into Katakana with a few small modified characters there is no user interface ,spell,grammar checker,dictionary ,translator ,of course the Ainu has few terms in modern vocabulary but Iam studying the language in order to find words and coin new ones, iPhone hoomi-ye-p electric speak thing. I am looking for other peple who have the same idea.
3
1
996
Dec ’16
Unreliable Accessibility API behavior when interacting with Microsoft Teams app
I'm developing a macOS app that interacts with Microsoft Teams using the Accessibility API. I've noticed inconsistent behavior when querying UI elements, particularly for the mute button. My queries often fail, while system tools like VoiceOver can consistently access these elements (which are visible on the screen). In some cases, it works well, but in others, the UI elements are not visible from my code. When I try Accessibility Inspector, it also initially fails to inspect. However, the Inspector seems to have some "magical" power that, when I run it or via AX audit, appears to refresh the AX tree, and then my code occasionally works as well. Given that VoiceOver can consistently read the screen, I assume the issue is not with the Microsoft Teams app itself (assuming it's based on Electron/React). I am mentioning this, because when I interact with Zoom app, reading the mute status from the app's menu bar, its 100% working anytime. What would you recommend I try or explore to improve reliability? Can I refresh the apps' AX tree from my end from swift? Is that a bug in AX API or even in Microsoft Teams? (have ready example and demo video, but it does not let me upload here)
2
0
427
Sep ’24
Accessibility VoiceOver issue for UIDatePicker
The react-native-date-picker is based on UIDatePicker on iOS. The UIDatePicker element is a wrapper containing other elements that the VoiceOver user can interact with (year, month, day and so on). I'm using react-native-date-picker with the UK date format(day month year). If I change day, such as 1 July 2024 to 2 July 2024, the VoiceOver says 2 of 12, but 12 is the month total. If I change month, such as 1 July 2024 to 1 August 2024, the VoiceOver says 8 of 31, but 31 is day total. It's weird. Please help me out on how to solve this issue or let me know if I am missing anything. iOS 16.3.1 react-native-date-picker 4.4.2
1
0
289
Sep ’24
Default localization fallback not used for untranslated string in catalog
For an iOS app, I'm using a String Catalog for localization. In the Localizable.xcstrings, I have all the Keys set with IDs, and default to English set, and other languages added. All of the English strings has some English text value assigned. The Key and the values are different. The Swift code only makes references to the Keys. As for the non-English languages, not all of the strings have been translated. Many of the fields are not set, i.e. it's in grey and showing the English text, and I can see the "new" tags for those untranslated strings in the String Catalog. All of that is good and expected. However, when I run the app in a non-English language, for the untranslated strings, I'm seeing the string Key instead of the English value. The screens in the app are shows Key IDs all over the place, along with some translated text, but nothing in default English. Is that how it's suppose to work? It seems like the "Default Localization (en)" should be shown. That's the whole point of having a fallback default language is it not? I understand pre-string catalogs, the fall back default is the key, but now I'd expect it to use the default language as backup since that's what's shown in the catalog.
4
0
443
Sep ’24
Receipt verification Verification failed with status VERIFICATION_FAILURE
Hello team, There is a Function,App create a order;When the app is all paid out,it sends me a credentials; I accept and verify; verify_and_decode_signed_transaction function have an error; requests.exceptions.ConnectionError: HTTPConnectionPool(host='ocsp.apple.com', port=80): Max retries exceeded with url: /ocsp03-applerootcag3 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1123c7d00>: Failed to establish a new connection: [Errno 61] Connection refused')) The above exception was the direct cause of the following exception: appstoreserverlibrary.signed_data_verifier.VerificationException: Verification failed with status VERIFICATION_FAILURE def verify_purchase(self, request, *args, **kwargs): try: receipt_data = request.data.get('receipt_data') transaction_id = receiptUtilInstance.extract_transaction_id_from_app_receipt(receipt_data) sendResponse: TransactionInfoResponse = appleClientInstance.client.get_transaction_info(transaction_id) signedPayLoad: str = sendResponse.signedTransactionInfo time.sleep(3) payload = signedDataInstance.client.verify_and_decode_signed_transaction(signedPayLoad) please help me
1
0
399
Sep ’24
guidedAccessStatusDidChangeNotification does not get called on visionOS
I am trying to get a Notification if Guided access is enabled or disabled on the VisionPro. For doing so you would normally just call: NotificationCenter.default.addObserver(forName: UIAccessibility.guidedAccessStatusDidChangeNotification, object: nil, queue: .main){ noti in print("guided access did change") } and this works fine on iOS devices. But running the exact same code in Vision os Results in not getting a notification at all, even though Guided Access gets enabled or Disabled. For testing i ran a simple default app, that works perfectly on both os types. import SwiftUI struct ContentView: View { var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.tint) Text("Hello, world!") } .onAppear{ print("is appeairng") NotificationCenter.default.addObserver(forName: UIAccessibility.guidedAccessStatusDidChangeNotification, object: nil, queue: .main){_ in print("guided access did change") } } .padding() } } But as said it prints "guided access did change on iOS" but not on the Vision Pro.
0
0
264
Sep ’24
iOS 18.1 Beta 5 bugs
I've just updated to iOS 18.1 Beta 5 update and I'm not able to see FaceTime audio/ video calls in the phone call log at all as it's like no where. And even in FaceTime there is no summary like call duration or recent calls log, just last call listed. Please resolve this issue and have FaceTime calls logs to be shown in the phone call logs as that was perfect and categorised.
1
0
767
Sep ’24