Post

Replies

Boosts

Views

Activity

Reply to VoiceOver navigation in carousels
Thanks for your previous input on carousel accessibility. We have a few follow-up questions: Adjustable Trait Clarification: Thanks for the clarification regarding accessibilityCustomActions for navigation; I believe we're aligned on that front. Is there guidance on using .adjustable for a carousel depending on whether cards have single vs. multiple actionable elements? Or is the recommendation to avoid .adjustable for carousels altogether? Skipping Entire Carousel: Our research has found, particularly for carousels with many items, it can be inefficient for users to navigate linearly through the entire carousel's contents in order to reach UI elements that appear after it. If content inside the carousel should be focusable with standard navigation gestures, is there a recommended method for VoiceOver users to skip an entire carousel and navigate to the next element? VoiceOver's documentation refers to a gesture that allows users to "Move out of a group of items", which seems like it might be relevant here. Would this concept of group navigation apply in the case of carousels? If so, is there developer documentation covering how we can support this? VoiceOver Focus on Three-Finger Swipe (Pagination): We tried overriding accessibilityScroll(_:) as it seems scrolling the carousel does not cause VoiceOver focus to move, even if the previously focused element goes off screen. Would we be expected to manage this manually, e.g. with UIAccessibilityPostNotification, after the carousel scrolls to the next or previous element? For context, here's a simplified version of the prototype I wrote after you suggested using accessibilityScroll: private func currentlyFocusedElementIndex() -> Int? { guard let focusedElement = UIAccessibility.focusedElement(using: .notificationVoiceOver) as? AnyObject else { return nil } // Return the index of the currently focused carousel element. If VoiceOver // focus is not within the carousel, return nil. // // In a real app, this would be more complicated, because we have multiple // elements per card, and we want to jump between cards, not individual // elements. But the structure would be the same. return self.cards.index { $0 === focusedElement } } // accessibilityScroll(_:) calls this method private func handleAccessibilityScroll(_ direction: UIAccessibilityScrollDirection) -> Bool { guard let currentIndex = currentlyFocusedElementIndex() else { return false } if direction == .right { guard currentIndex.cardIndex > 0 else { return false } self.scrollToIndex(currentIndex - 1, animated: true) return true } else if direction == .left { guard currentIndex.cardIndex < self.cards.count - 1 else { return false } self.scrollToIndex(currentIndex + 1, animated: true) return true } return false } private func scrollToIndex(_ index: CarouselItemIndex, animated: Bool) { let newFrame = self.cards[index.cardIndex].view.frame self.carouselView.scrollRectToVisible(newFrame, animated: animated) UIAccessibility.post(notification: .layoutChanged, argument: self.cards[index]) }
May ’25
Reply to Unsupported option '-mno-thumb' in Xcode 16
Whoops, just realized I pasted my response file poorly. Here's the same response file, but with each argument on its own line: -target arm64-apple-ios18.0-simulator '-std=gnu++14' '-stdlib=libc++' -fobjc-arc -fmodules '-fmodules-cache-path=/Users/ck/Library/Developer/Xcode/DerivedData/ModuleCache.noindex' '-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG' -fpascal-strings -O0 -fno-common '-DPOD_CONFIGURATION_DEBUG=1' '-DDEBUG=1' '-DCOCOAPODS=1' '-DOBJC_OLD_DISPATCH_PROTOTYPES=0' -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator18.2.sdk -g '-fobjc-abi-version=2' -fobjc-legacy-dispatch -iquote /Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-generated-files.hmap -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-own-target-headers.hmap -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-all-target-headers.hmap -iquote /Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-project-headers.hmap -iquote '/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DeltaCore/Swift Compatibility Header' -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DSDeltaCore/include -I/Users/ck/Projects/system/Delta/Pods/Headers/Private -I/Users/ck/Projects/system/Delta/Pods/Headers/Private/DSDeltaCore -I/Users/ck/Projects/system/Delta/Pods/Headers/Public -I/Users/ck/Projects/system/Delta/Pods/Headers/Public/DSDeltaCore -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator -I/Users/ck/Projects/system/Delta/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DerivedSources-normal/arm64 -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DerivedSources/arm64 -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DerivedSources -F/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DSDeltaCore '-fmodule-map-file=/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DeltaCore/DeltaCore.modulemap' '-fmodule-map-file=/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/ZIPFoundation/ZIPFoundation.modulemap' -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm '-fvisibility=hidden' '-DSTATIC_LIBRARY=1'
Dec ’24
Reply to Unsupported option '-mno-thumb' in Xcode 16
Thanks for the response. I already checked the response file, but I can't find -mno-thumb. I'm not a clang expert, though, so I don't know if it's being added by some other flag. Or do some of the flags in the response file import flags from some other file? Is there a way to remove flags in Xcode? As in, the flag is clearly being added somehow, but I can't find where. Is there a way to strip certain flags project-wide in the Build Settings? Here's my response file: -target arm64-apple-ios18.0-simulator '-std=gnu++14' '-stdlib=libc++' -fobjc-arc -fmodules '-fmodules-cache-path=/Users/ck/Library/Developer/Xcode/DerivedData/ModuleCache.noindex' '-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG' -fpascal-strings -O0 -fno-common '-DPOD_CONFIGURATION_DEBUG=1' '-DDEBUG=1' '-DCOCOAPODS=1' '-DOBJC_OLD_DISPATCH_PROTOTYPES=0' -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator18.2.sdk -g '-fobjc-abi-version=2' -fobjc-legacy-dispatch -iquote /Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-generated-files.hmap -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-own-target-headers.hmap -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-all-target-headers.hmap -iquote /Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DSDeltaCore-project-headers.hmap -iquote '/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DeltaCore/Swift Compatibility Header' -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DSDeltaCore/include -I/Users/ck/Projects/system/Delta/Pods/Headers/Private -I/Users/ck/Projects/system/Delta/Pods/Headers/Private/DSDeltaCore -I/Users/ck/Projects/system/Delta/Pods/Headers/Public -I/Users/ck/Projects/system/Delta/Pods/Headers/Public/DSDeltaCore -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator -I/Users/ck/Projects/system/Delta/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DerivedSources-normal/arm64 -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DerivedSources/arm64 -I/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/DSDeltaCore.build/DerivedSources -F/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DSDeltaCore '-fmodule-map-file=/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/DeltaCore/DeltaCore.modulemap' '-fmodule-map-file=/Users/ck/Library/Developer/Xcode/DerivedData/Delta-dwedcmxtirqnkdghmvobshblwrib/Build/Products/Debug-iphonesimulator/ZIPFoundation/ZIPFoundation.modulemap' -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm '-fvisibility=hidden' '-DSTATIC_LIBRARY=1'
Dec ’24