Overview

Post

Replies

Boosts

Views

Activity

AVContentKeySession: Cannot re-fetch content key once obtained — expected behavior?
We are developing a video streaming app that uses AVContentKeySession with FairPlay Streaming. Our implementation supports both online playback (non-persistable keys) and offline playback (persistable keys). We have observed the following behavior: Once a content key has been obtained for a given Content Key ID, AVContentKeySession does not trigger contentKeySession(_:didProvide:) again for that same Key ID We also attempted to explicitly call processContentKeyRequest(withIdentifier:initializationData:options:) on the session to force a new key request for the same identifier, but this did not result in the delegate callback being fired again. The session appears to consider the key already resolved and silently ignores the request. This means that if a user first plays content online (receiving a non-persistable key), and later wants to download the same content for offline use (requiring a persistable key), the delegate callback is not fired again, and we have no opportunity to request a persistable key. Questions Is this the expected behavior? Specifically, is it by design that AVContentKeySession caches the key for a given Key ID and does not re-request it — even when processContentKeyRequest(withIdentifier:) is explicitly called? Should we use distinct Content Key IDs for persistable vs. non-persistable keys? For example, if the same piece of content can be played both online and offline, is the recommended approach to have the server provide different EXT-X-KEY URIs (and thus different key identifiers) for the streaming and download variants? Is there a supported way to force a fresh key request for a Key ID that has already been resolved — for example, to upgrade from a non-persistable to a persistable key? Environment iOS 18+ AVContentKeySession(keySystem: .fairPlayStreaming) Any guidance on the recommended approach for supporting both streaming and offline playback for the same content would be greatly appreciated.
1
0
388
4w
iOS 26: Interactive sheet dismissal causes layout hitch in underlying SwiftUI view
I’ve been investigating a noticeable animation hitch when interactively dismissing a sheet over a SwiftUI screen with moderate complexity. This was not the case on iOS 18, so I’m curious if others are seeing the same on iOS 26 or have found any mitigations. When dismissing a sheet via the swipe gesture, there’s a visible hitch right after lift-off. The hitch comes from layout work in the underlying view (behind the sheet) The duration scales with the complexity of that view (e.g. number of TextFields/layout nodes) The animation for programmatic dismiss (e.g. tapping a “Done” button) is smooth, although it hangs for a similar amount of time before dismissing, so it appears that the underlying work still happens. SwiftUI is not reevaluating the body during this (validated with Self._printChanges()), so that is not the cause. Using Instruments, the hitch shows up as a layout spike on the main thread: 54ms UIView layoutSublayersOfLayer 54ms └─ _UIHostingView.layoutSubviews 38ms └─ SwiftUI.ViewGraph.updateOutputs 11ms ├─ partial apply for implicit closure #1 in closure #1 │ in closure #1 in Attribute.init<A>(_:) 4ms └─ -[UIView For the same hierarchy with varying complexity: ~3 TextFields in a List: ~25ms (not noticeable) ~20+ TextFields: ~60ms (clearly visible hitch) The same view hierarchy on iOS 18 did not exhibit a visible hitch. I’ve tested this on an iOS 26.4 device and simulator. I’ve also included a minimum reproducible example that illustrates this: struct ContentView: View { @State var showSheet = false var body: some View { NavigationStack { ScrollView { ForEach(0..<120) { _ in RowView() } } .navigationTitle("Repro") .toolbar { ToolbarItem(placement: .topBarTrailing) { Button("Present") { showSheet = true } } } .sheet(isPresented: $showSheet) { PresentedSheet() } } } } struct RowView: View { @State var first = "" @State var second = "" var body: some View { VStack(alignment: .leading, spacing: 12) { Text("Row") .font(.headline) HStack(spacing: 12) { TextField("First", text: $first) .textFieldStyle(.roundedBorder) TextField("Second", text: $second) .textFieldStyle(.roundedBorder) } HStack(spacing: 12) { Text("Third") Text("Fourth") Image(systemName: "chevron.right") } } } } struct PresentedSheet: View { @Environment(\.dismiss) private var dismiss var body: some View { NavigationStack { List {} .navigationTitle("Swipe To Dismiss Me") .toolbar { ToolbarItem(placement: .topBarTrailing) { Button("Done") { dismiss() } } } } } } Is anyone else experiencing this and have any mitigations been found beyond reducing view complexity? I’ve filed a feedback report under FB22501630.
1
0
241
4w
EASession(accessory:forProtocol:) always returns nil — MFI accessory iAP2
EASession(accessory:forProtocol:) always returns nil — MFI accessory iAP2 Platform: iOS 17+ | Hardware: Custom MFI-certified accessory (USB-C, iAP2) | Language: Swift Problem We have a custom MFI-certified accessory communicating over USB-C using ExternalAccessory. The app calls EASession(accessory:forProtocol:) after receiving EAAccessoryDidConnect but it always returns nil. We never get past session creation. What we have verified We captured a sysdiagnose on-device and analysed the accessoryd-packets log. The full iAP2 handshake completes successfully at the OS level: USB attach succeeds MFI auth certificate is present and Apple-issued Auth challenge and response complete successfully IdentificationInformation is accepted by iOS — protocol string and Team ID are correct EAAccessoryDidConnect fires as expected iOS sends StartExternalAccessoryProtocolSession — the OS-level session is established So the hardware, MFI auth, protocol string, and Team ID are all correct. Despite this, EASession(accessory:forProtocol:) returns nil in the app. We also confirmed: Protocol string in UISupportedExternalAccessoryProtocols in Info.plist matches the accessory exactly Protocol string in code matches Info.plist App entitlements are correctly configured EAAccessoryManager.shared().registerForLocalNotifications() is called before connection Current connection code @objc private func accessoryDidConnect(_ notification: Notification) { guard let accessory = notification.userInfo?[EAAccessoryKey] as? EAAccessory else { return } DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.tryConnectToAccessory() } } private func tryConnectToAccessory() { DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { for accessory in EAAccessoryManager.shared().connectedAccessories { let session = EASession(accessory: accessory, forProtocol: "") // session is always nil here } } } Questions The packet log shows a ~4 second gap between EAAccessoryDidConnect firing and iOS internally completing session readiness (StartExternalAccessoryProtocolSession). Is there a reliable way to know when iOS Is it actually ready to grant an EASession, rather than using a fixed delay? Is there a delegate callback or notification that fires when the accessory protocol session is ready to be opened, rather than relying on EAAccessoryDidConnect + an arbitrary delay? Are there any known conditions on iOS 17+ under which EASession returns nil even though the iAP2 handshake completed successfully at the OS level? Is retrying EASession after a nil result a supported pattern, or does a nil result mean the session will never succeed for that connection? Any guidance appreciated.
8
0
531
4w
actionGroupCell Y coordinates are corrupted. The overlay for 'Save to Files' doesn't expose no valid id's for testability.
I am using Maestro framework for testing iOS. For our tests we need to save pdf's to files. When opening the 'QLOverlayDefaultActionButtonAccessibilityIdentifier' the buttons on the overlay are way off, the coordinates got corrupted. When opening the files app, the next screen has no coordinates for testing. I checked with xcode inspector and the same issue persists.
1
0
467
4w
HomeKit support on MacOS
I am currently developing an app for MacOS that needs to control HomeKit devices like lights. However, it seems like MacOS is supported on the official documentation, but not when I try to create an app ID on developer.apple.com. On the link https://developer.apple.com/apple-home/, MacOS is clearly showed as supported for MacOS. But when I try to create an app ID, it shows that it is only compatible for iOS, VisionOS and WatchOS. Could this be clarified? Best regards, orangeidle25
2
0
284
4w
watchOS VoIP App: Incoming Calls?
Hello! I’m building a VoIP app for iPhone and Apple Watch using PushKit and CallKit. I’m trying to understand the recommended watchOS architecture for this kind of setup. What we would like is for the watch to behave as an endpoint for incoming calls, so that when a call comes in the user can answer on either the iPhone or the watch. My understanding is that VoIP notifications are not supported on watchOS, so for incoming calls what we ended up having to do was send the watch a regular APNs alert notification and only start the actual call setup after the user interacts with it. This isn’t ideal, and the notification often appears a few seconds late. What we would like to be able to do is present the incoming call on the watch more like how FaceTime calls appear on Apple Watch. So I wanted to ask whether this is the intended pattern for a companion watchOS VoIP app. Is using a regular APNs alert notification the correct way to surface an incoming call on the watch, or is there a better supported approach? Thanks!
2
0
179
4w
Apple Developer enrollment taking 6+ weeks
Hi everyone, I'm at the six-week mark of my Apple Developer Program enrollment and feeling pretty stuck. I wanted to post here to see if anyone else has been through something similar — and, hopefully, to get some guidance on what to do next. Six weeks since I submitted my enrollment application. Zero email updates from Apple at any point during this time — no acknowledgment, no status change, nothing. I called Apple Developer support about two weeks ago. The representative told me that additional documents had been requested and submitted on my behalf. That was promising — but since then, complete silence. I have heard nothing further in the two weeks since that call. I understand there can be legitimate delays, especially for organizations or businesses going through identity verification. But six weeks without any proactive communication feels excessive, and it's making it difficult to plan any development work or App Store submissions. Has anyone else experienced a timeline like this? Any insight from folks who've been through a lengthy enrollment would be really appreciated. At this point I'm not sure if I should keep waiting, call again, or try something else entirely. Thanks in advance.
0
0
42
4w
CarPlay CPListImageRowItem causes Inverted Scrolling and Side Button malfunction
In my CarPlaySceneDelegate.swift, I have two tabs: The first tab uses a CPListImageRowItem with a CPListImageRowItemRowElement. The scroll direction is inverted, and the side button does not function correctly. The second tab uses multiple CPListItem objects. There are no issues: scrolling works in the correct direction, and the side button behaves as expected. Steps To Reproduce Launch the app. Connect to CarPlay. In the first tab, scroll up and down, then use the side button to navigate. In the second tab, scroll up and down, then use the side button to navigate. As observed, the scrolling behavior is different between the two tabs. Code Example: import CarPlay import UIKit class CarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate { var interfaceController: CPInterfaceController? func templateApplicationScene( _ templateApplicationScene: CPTemplateApplicationScene, didConnect interfaceController: CPInterfaceController ) { self.interfaceController = interfaceController downloadImageAndSetupTemplates() } func templateApplicationScene( _ templateApplicationScene: CPTemplateApplicationScene, didDisconnectInterfaceController interfaceController: CPInterfaceController ) { self.interfaceController = nil } private func downloadImageAndSetupTemplates() { let urlString = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcYUjd1FYkF04-8Vb7PKI1mGoF2quLPHKjvnR7V4ReZR8UjW-0NJ_kC7q13eISZGoTCLHaDPVbOthhH9QNq-YA0uuSUjfAoB3PPs1aXQ&s=10" guard let url = URL(string: urlString) else { setupTemplates(with: UIImage(systemName: "photo")!) return } URLSession.shared.dataTask(with: url) { [weak self] data, _, _ in let image: UIImage if let data = data, let downloaded = UIImage(data: data) { image = downloaded } else { image = UIImage(systemName: "photo")! } DispatchQueue.main.async { self?.setupTemplates(with: image) } }.resume() } private func setupTemplates(with image: UIImage) { // Tab 1 : un seul CPListImageRowItem avec 12 CPListImageRowItemRowElement let elements: [CPListImageRowItemRowElement] = (1...12).map { index in CPListImageRowItemRowElement(image: image, title: "test \(index)", subtitle: nil) } let rowItem = CPListImageRowItem(text: "Images", elements: elements, allowsMultipleLines: true) rowItem.listImageRowHandler = { item, elementIndex, completion in print("tapped element \(elementIndex)") completion() } let tab1Section = CPListSection(items: [rowItem]) let tab1Template = CPListTemplate(title: "CPListImageRowItemRowElement", sections: [tab1Section]) // Tab 2 : 12 CPListItem simples let tab2Items: [CPListItem] = (1...12).map { index in let item = CPListItem(text: "Item \(index)", detailText: "Detail \(index)") item.handler = { _, completion in print("handler Tab 2") completion() } return item } let tab2Section = CPListSection(items: tab2Items) let tab2Template = CPListTemplate(title: "CPListItem", sections: [tab2Section]) // CPTabBarTemplate avec les deux tabs let tabBar = CPTabBarTemplate(templates: [tab1Template, tab2Template]) interfaceController?.setRootTemplate(tabBar, animated: true) } } Here is a quick video:
7
0
588
4w
4.3(b) Appeal Pending for 23 Days - No Visibility in Resolution Center
Hello everyone, I am looking for some advice or shared experiences regarding a prolonged App Review Board appeal process. I submitted my app earlier this month. On March 3rd, it was rejected under guideline 4.3(b) Spam. On the exact same day (March 3rd), I submitted a detailed appeal to the App Review Board. In my appeal, I provided clear documentation and explanations to prove that the app is not a generic template. I specifically highlighted our proprietary algorithm that calculates a unique total daily energy percentage for users, which distinctly separates it from standard, saturated apps in the market. The issue: It has now been 23 days since I submitted the appeal, and I have not received any response from the Board. My main concern is the lack of visibility. Since appeals to the Board do not appear in the Resolution Center UI, I have no way of knowing if my ticket is actually actively open, in a queue, or if it has been lost due to a system glitch. I recently tried reaching out to general support to verify the ticket's status, but I only received an automated generic response stating that if I have already appealed, I should just wait. My questions for the community: Has anyone else experienced wait times exceeding 3 weeks for a 4.3(b) appeal recently? Is there any workaround to simply verify that an internal appeal ticket is genuinely open and hasn't fallen through the cracks? Any insights or advice on how to proceed would be greatly appreciated. Thank you!
7
0
317
4w
App Store search autocorrects exact app name to a different word — 8 months unresolved
I'm posting here after 8 months of back-and-forth with Developer Support (case 102685152651) because I've exhausted that channel and need to know if others have experienced this or if any Apple engineers can advise. The issue: When a user types "Dabah" — the exact name of my app — the App Store autocorrects/redirects to "Sabah." My app does not appear in those results. It only appears when the user searches "Dabah recipes." This means users who know the app by name cannot find it unless they add a secondary keyword. What makes this clearly a system-level bug, not a ranking issue: The same behavior occurs inside Apple's own Developer Marketing Tools portal. Searching "Dabah" returns only Sabah-related apps. Searching "Dabah recipes" finds my app immediately. This is not a user-facing algorithm issue — it's happening in an internal Apple tool. "Dabah" is a unique, uncommon word with no major competing apps. There is no legitimate reason an exact-name search should be overridden. The app has been live on the App Store since mid-2024, is properly indexed (it surfaces on keyword searches), and has "Dabah" listed as a keyword. The problem is specifically in the autocorrect/normalization layer treating "Dabah" as a misspelling of "Sabah." I've submitted screen recordings demonstrating both behaviors. Developer Support has confirmed my ticket is with the engineering team, but I've received no resolution or timeline in 8 months. Has anyone else encountered autocorrect overriding an exact app name match? Is there a known path to escalate search indexing bugs beyond the standard Developer Support channel? App: Dabah (id6745241806) Category: Food & Drink
0
0
63
4w
iOS 26 WKWebView STScreenTimeConfigurationObserver KVO Crash
Fatal Exception: NSInternalInconsistencyException Cannot remove an observer <WKWebView 0x135137800> for the key path "configuration.enforcesChildRestrictions" from <STScreenTimeConfigurationObserver 0x13c6d7460>, most likely because the value for the key "configuration" has changed without an appropriate KVO notification being sent. Check the KVO-compliance of the STScreenTimeConfigurationObserver [class.] I noticed that on iOS 26, WKWebView registers STScreenTimeConfigurationObserver, Is this an iOS 26 system issue? What should I do?
Topic: UI Frameworks SubTopic: UIKit Tags:
18
17
2.3k
4w
Question on nudity
I built a peptide app with the information based on interactive body parts I’m worried that the body might be to nude. As well as I will be linking the peptides you saved with the educational information in the app to website where it’s a simple shop. Here’s the picture
1
0
183
4w
App Review Rejection Due to External Payment Script Not Loading in Review Environment (Toss Payments CDN)
Hello, I am currently experiencing an issue during the App Review process related to a third-party payment integration using Toss Payments. Our app loads a payment widget from an external script hosted at: https://js.tosspayments.com/v2/standard In our local and production environments, the payment module works without any issues. However, in the App Review environment, the script appears to fail to load or initialize properly, resulting in an "Unknown Error" during payment widget initialization. We suspect that the App Review environment may have network restrictions or firewall rules that block or limit access to this external CDN (AWS-based), preventing the script from being fetched. We have already: Verified that the script loads correctly in all non-review environments Submitted a video demonstrating the normal payment flow Contacted the payment provider, and they confirmed that there are no IP blocks or restrictions on their side My questions are: Does the App Review environment impose restrictions on external CDN domains or third-party scripts? If so, what is the recommended approach for handling payment SDKs that rely on external script loading? As a temporary workaround for review purposes, would it be acceptable to: Bypass the actual payment SDK Replace it with a mock or simplified flow (e.g., tapping the payment button immediately proceeds to a success screen) Restore the real payment integration after approval? We want to ensure compliance with App Store guidelines while also resolving this review-specific issue efficiently. Any guidance or similar experiences would be greatly appreciated. Thank you!
0
0
74
4w
Unable to Change Primary Locale for 4–6 Year Old Live App – “Missing Screenshots” Error Despite All Assets Uploaded
Hi everyone, We’re facing an issue while trying to change the Primary Language / Primary Locale of a long-standing live iOS app in App Store Connect. The app has been live for 4–6+ years. When attempting to update the Primary Locale from App Information, we receive the following error: “Primary Locale couldn’t be saved because you must first provide all the required screenshots for each version in this language.” However: The target localization (English – UK) already exists. All required screenshot sets are uploaded. No screenshot sections are blank (iPhone and iPad – all visible display sizes). Both the live version and the version in review contain complete screenshot sets. No Apple Watch or iMessage extensions are currently included in the build. A clean build has been uploaded and selected. Removing the version from review does not resolve the issue. There are no visible validation errors in the UI. This appears to be either: A hidden backend validation requirement, A legacy platform association, Or a Primary Locale lock tied to the app’s original configuration. Has anyone successfully changed the Primary Locale for an older live app recently? Is there a known limitation for apps created several years ago? Would appreciate any insight before escalating further. Thanks in advance.
1
0
157
4w
Waiting for review
Hi, My app is waiting for review since Saturday at 5:42 PM, so is TestFlight. It has been rejected a couple of times, and errors were fixed with each update. Is this normal?
Replies
1
Boosts
0
Views
120
Activity
4w
AVContentKeySession: Cannot re-fetch content key once obtained — expected behavior?
We are developing a video streaming app that uses AVContentKeySession with FairPlay Streaming. Our implementation supports both online playback (non-persistable keys) and offline playback (persistable keys). We have observed the following behavior: Once a content key has been obtained for a given Content Key ID, AVContentKeySession does not trigger contentKeySession(_:didProvide:) again for that same Key ID We also attempted to explicitly call processContentKeyRequest(withIdentifier:initializationData:options:) on the session to force a new key request for the same identifier, but this did not result in the delegate callback being fired again. The session appears to consider the key already resolved and silently ignores the request. This means that if a user first plays content online (receiving a non-persistable key), and later wants to download the same content for offline use (requiring a persistable key), the delegate callback is not fired again, and we have no opportunity to request a persistable key. Questions Is this the expected behavior? Specifically, is it by design that AVContentKeySession caches the key for a given Key ID and does not re-request it — even when processContentKeyRequest(withIdentifier:) is explicitly called? Should we use distinct Content Key IDs for persistable vs. non-persistable keys? For example, if the same piece of content can be played both online and offline, is the recommended approach to have the server provide different EXT-X-KEY URIs (and thus different key identifiers) for the streaming and download variants? Is there a supported way to force a fresh key request for a Key ID that has already been resolved — for example, to upgrade from a non-persistable to a persistable key? Environment iOS 18+ AVContentKeySession(keySystem: .fairPlayStreaming) Any guidance on the recommended approach for supporting both streaming and offline playback for the same content would be greatly appreciated.
Replies
1
Boosts
0
Views
388
Activity
4w
Can Apple please add Nintendo Switch 2 Pro Controller support? This is a very popular controller.
Hi Apple, Can you please add support for the Nintendo Switch 2 Pro Controller? The first one is supported but the Switch 2 has been out nearly a year now and a lot of people want to use these controllers with macOS and iOS. Can you please consider adding support? Thank you.
Replies
1
Boosts
0
Views
495
Activity
4w
Detect hardware keyboard with SwiftUI
In an application we are developing, we would like to show a (non-interactable) textfield when a hardware keyboard is connected to the iPad. Therefore my question: Using SwiftUI, is it possible to detect the presence of a hardware keyboard and store that state inside a boolean like isHardwareKeyboardConnected?
Replies
1
Boosts
0
Views
242
Activity
4w
iOS 26: Interactive sheet dismissal causes layout hitch in underlying SwiftUI view
I’ve been investigating a noticeable animation hitch when interactively dismissing a sheet over a SwiftUI screen with moderate complexity. This was not the case on iOS 18, so I’m curious if others are seeing the same on iOS 26 or have found any mitigations. When dismissing a sheet via the swipe gesture, there’s a visible hitch right after lift-off. The hitch comes from layout work in the underlying view (behind the sheet) The duration scales with the complexity of that view (e.g. number of TextFields/layout nodes) The animation for programmatic dismiss (e.g. tapping a “Done” button) is smooth, although it hangs for a similar amount of time before dismissing, so it appears that the underlying work still happens. SwiftUI is not reevaluating the body during this (validated with Self._printChanges()), so that is not the cause. Using Instruments, the hitch shows up as a layout spike on the main thread: 54ms UIView layoutSublayersOfLayer 54ms └─ _UIHostingView.layoutSubviews 38ms └─ SwiftUI.ViewGraph.updateOutputs 11ms ├─ partial apply for implicit closure #1 in closure #1 │ in closure #1 in Attribute.init<A>(_:) 4ms └─ -[UIView For the same hierarchy with varying complexity: ~3 TextFields in a List: ~25ms (not noticeable) ~20+ TextFields: ~60ms (clearly visible hitch) The same view hierarchy on iOS 18 did not exhibit a visible hitch. I’ve tested this on an iOS 26.4 device and simulator. I’ve also included a minimum reproducible example that illustrates this: struct ContentView: View { @State var showSheet = false var body: some View { NavigationStack { ScrollView { ForEach(0..<120) { _ in RowView() } } .navigationTitle("Repro") .toolbar { ToolbarItem(placement: .topBarTrailing) { Button("Present") { showSheet = true } } } .sheet(isPresented: $showSheet) { PresentedSheet() } } } } struct RowView: View { @State var first = "" @State var second = "" var body: some View { VStack(alignment: .leading, spacing: 12) { Text("Row") .font(.headline) HStack(spacing: 12) { TextField("First", text: $first) .textFieldStyle(.roundedBorder) TextField("Second", text: $second) .textFieldStyle(.roundedBorder) } HStack(spacing: 12) { Text("Third") Text("Fourth") Image(systemName: "chevron.right") } } } } struct PresentedSheet: View { @Environment(\.dismiss) private var dismiss var body: some View { NavigationStack { List {} .navigationTitle("Swipe To Dismiss Me") .toolbar { ToolbarItem(placement: .topBarTrailing) { Button("Done") { dismiss() } } } } } } Is anyone else experiencing this and have any mitigations been found beyond reducing view complexity? I’ve filed a feedback report under FB22501630.
Replies
1
Boosts
0
Views
241
Activity
4w
EASession(accessory:forProtocol:) always returns nil — MFI accessory iAP2
EASession(accessory:forProtocol:) always returns nil — MFI accessory iAP2 Platform: iOS 17+ | Hardware: Custom MFI-certified accessory (USB-C, iAP2) | Language: Swift Problem We have a custom MFI-certified accessory communicating over USB-C using ExternalAccessory. The app calls EASession(accessory:forProtocol:) after receiving EAAccessoryDidConnect but it always returns nil. We never get past session creation. What we have verified We captured a sysdiagnose on-device and analysed the accessoryd-packets log. The full iAP2 handshake completes successfully at the OS level: USB attach succeeds MFI auth certificate is present and Apple-issued Auth challenge and response complete successfully IdentificationInformation is accepted by iOS — protocol string and Team ID are correct EAAccessoryDidConnect fires as expected iOS sends StartExternalAccessoryProtocolSession — the OS-level session is established So the hardware, MFI auth, protocol string, and Team ID are all correct. Despite this, EASession(accessory:forProtocol:) returns nil in the app. We also confirmed: Protocol string in UISupportedExternalAccessoryProtocols in Info.plist matches the accessory exactly Protocol string in code matches Info.plist App entitlements are correctly configured EAAccessoryManager.shared().registerForLocalNotifications() is called before connection Current connection code @objc private func accessoryDidConnect(_ notification: Notification) { guard let accessory = notification.userInfo?[EAAccessoryKey] as? EAAccessory else { return } DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.tryConnectToAccessory() } } private func tryConnectToAccessory() { DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) { for accessory in EAAccessoryManager.shared().connectedAccessories { let session = EASession(accessory: accessory, forProtocol: "") // session is always nil here } } } Questions The packet log shows a ~4 second gap between EAAccessoryDidConnect firing and iOS internally completing session readiness (StartExternalAccessoryProtocolSession). Is there a reliable way to know when iOS Is it actually ready to grant an EASession, rather than using a fixed delay? Is there a delegate callback or notification that fires when the accessory protocol session is ready to be opened, rather than relying on EAAccessoryDidConnect + an arbitrary delay? Are there any known conditions on iOS 17+ under which EASession returns nil even though the iAP2 handshake completed successfully at the OS level? Is retrying EASession after a nil result a supported pattern, or does a nil result mean the session will never succeed for that connection? Any guidance appreciated.
Replies
8
Boosts
0
Views
531
Activity
4w
actionGroupCell Y coordinates are corrupted. The overlay for 'Save to Files' doesn't expose no valid id's for testability.
I am using Maestro framework for testing iOS. For our tests we need to save pdf's to files. When opening the 'QLOverlayDefaultActionButtonAccessibilityIdentifier' the buttons on the overlay are way off, the coordinates got corrupted. When opening the files app, the next screen has no coordinates for testing. I checked with xcode inspector and the same issue persists.
Replies
1
Boosts
0
Views
467
Activity
4w
HomeKit support on MacOS
I am currently developing an app for MacOS that needs to control HomeKit devices like lights. However, it seems like MacOS is supported on the official documentation, but not when I try to create an app ID on developer.apple.com. On the link https://developer.apple.com/apple-home/, MacOS is clearly showed as supported for MacOS. But when I try to create an app ID, it shows that it is only compatible for iOS, VisionOS and WatchOS. Could this be clarified? Best regards, orangeidle25
Replies
2
Boosts
0
Views
284
Activity
4w
watchOS VoIP App: Incoming Calls?
Hello! I’m building a VoIP app for iPhone and Apple Watch using PushKit and CallKit. I’m trying to understand the recommended watchOS architecture for this kind of setup. What we would like is for the watch to behave as an endpoint for incoming calls, so that when a call comes in the user can answer on either the iPhone or the watch. My understanding is that VoIP notifications are not supported on watchOS, so for incoming calls what we ended up having to do was send the watch a regular APNs alert notification and only start the actual call setup after the user interacts with it. This isn’t ideal, and the notification often appears a few seconds late. What we would like to be able to do is present the incoming call on the watch more like how FaceTime calls appear on Apple Watch. So I wanted to ask whether this is the intended pattern for a companion watchOS VoIP app. Is using a regular APNs alert notification the correct way to surface an incoming call on the watch, or is there a better supported approach? Thanks!
Replies
2
Boosts
0
Views
179
Activity
4w
App submission on waiting for review ID 6758008521
ID 6758008521, Dear App Review Team, I submitted my app review and it got rejected for inaccurate screenshot. I have revised the app screenshot and also resubmitted. But it has been 8 days and no response. We look forward to completing the review, thank you.
Replies
2
Boosts
0
Views
258
Activity
4w
App Store description for iCloud
Hi, A few of my apps will be able to sync with iCloud. So I do realize that we're not allowed to mention any Apple-related names in our app descriptions. Looking for ideas on how to state that the app works with iCloud without saying "iCloud." Thanks, Dan Uff
Replies
3
Boosts
0
Views
67
Activity
4w
Apple Developer enrollment taking 6+ weeks
Hi everyone, I'm at the six-week mark of my Apple Developer Program enrollment and feeling pretty stuck. I wanted to post here to see if anyone else has been through something similar — and, hopefully, to get some guidance on what to do next. Six weeks since I submitted my enrollment application. Zero email updates from Apple at any point during this time — no acknowledgment, no status change, nothing. I called Apple Developer support about two weeks ago. The representative told me that additional documents had been requested and submitted on my behalf. That was promising — but since then, complete silence. I have heard nothing further in the two weeks since that call. I understand there can be legitimate delays, especially for organizations or businesses going through identity verification. But six weeks without any proactive communication feels excessive, and it's making it difficult to plan any development work or App Store submissions. Has anyone else experienced a timeline like this? Any insight from folks who've been through a lengthy enrollment would be really appreciated. At this point I'm not sure if I should keep waiting, call again, or try something else entirely. Thanks in advance.
Replies
0
Boosts
0
Views
42
Activity
4w
CarPlay CPListImageRowItem causes Inverted Scrolling and Side Button malfunction
In my CarPlaySceneDelegate.swift, I have two tabs: The first tab uses a CPListImageRowItem with a CPListImageRowItemRowElement. The scroll direction is inverted, and the side button does not function correctly. The second tab uses multiple CPListItem objects. There are no issues: scrolling works in the correct direction, and the side button behaves as expected. Steps To Reproduce Launch the app. Connect to CarPlay. In the first tab, scroll up and down, then use the side button to navigate. In the second tab, scroll up and down, then use the side button to navigate. As observed, the scrolling behavior is different between the two tabs. Code Example: import CarPlay import UIKit class CarPlaySceneDelegate: UIResponder, CPTemplateApplicationSceneDelegate { var interfaceController: CPInterfaceController? func templateApplicationScene( _ templateApplicationScene: CPTemplateApplicationScene, didConnect interfaceController: CPInterfaceController ) { self.interfaceController = interfaceController downloadImageAndSetupTemplates() } func templateApplicationScene( _ templateApplicationScene: CPTemplateApplicationScene, didDisconnectInterfaceController interfaceController: CPInterfaceController ) { self.interfaceController = nil } private func downloadImageAndSetupTemplates() { let urlString = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRcYUjd1FYkF04-8Vb7PKI1mGoF2quLPHKjvnR7V4ReZR8UjW-0NJ_kC7q13eISZGoTCLHaDPVbOthhH9QNq-YA0uuSUjfAoB3PPs1aXQ&s=10" guard let url = URL(string: urlString) else { setupTemplates(with: UIImage(systemName: "photo")!) return } URLSession.shared.dataTask(with: url) { [weak self] data, _, _ in let image: UIImage if let data = data, let downloaded = UIImage(data: data) { image = downloaded } else { image = UIImage(systemName: "photo")! } DispatchQueue.main.async { self?.setupTemplates(with: image) } }.resume() } private func setupTemplates(with image: UIImage) { // Tab 1 : un seul CPListImageRowItem avec 12 CPListImageRowItemRowElement let elements: [CPListImageRowItemRowElement] = (1...12).map { index in CPListImageRowItemRowElement(image: image, title: "test \(index)", subtitle: nil) } let rowItem = CPListImageRowItem(text: "Images", elements: elements, allowsMultipleLines: true) rowItem.listImageRowHandler = { item, elementIndex, completion in print("tapped element \(elementIndex)") completion() } let tab1Section = CPListSection(items: [rowItem]) let tab1Template = CPListTemplate(title: "CPListImageRowItemRowElement", sections: [tab1Section]) // Tab 2 : 12 CPListItem simples let tab2Items: [CPListItem] = (1...12).map { index in let item = CPListItem(text: "Item \(index)", detailText: "Detail \(index)") item.handler = { _, completion in print("handler Tab 2") completion() } return item } let tab2Section = CPListSection(items: tab2Items) let tab2Template = CPListTemplate(title: "CPListItem", sections: [tab2Section]) // CPTabBarTemplate avec les deux tabs let tabBar = CPTabBarTemplate(templates: [tab1Template, tab2Template]) interfaceController?.setRootTemplate(tabBar, animated: true) } } Here is a quick video:
Replies
7
Boosts
0
Views
588
Activity
4w
4.3(b) Appeal Pending for 23 Days - No Visibility in Resolution Center
Hello everyone, I am looking for some advice or shared experiences regarding a prolonged App Review Board appeal process. I submitted my app earlier this month. On March 3rd, it was rejected under guideline 4.3(b) Spam. On the exact same day (March 3rd), I submitted a detailed appeal to the App Review Board. In my appeal, I provided clear documentation and explanations to prove that the app is not a generic template. I specifically highlighted our proprietary algorithm that calculates a unique total daily energy percentage for users, which distinctly separates it from standard, saturated apps in the market. The issue: It has now been 23 days since I submitted the appeal, and I have not received any response from the Board. My main concern is the lack of visibility. Since appeals to the Board do not appear in the Resolution Center UI, I have no way of knowing if my ticket is actually actively open, in a queue, or if it has been lost due to a system glitch. I recently tried reaching out to general support to verify the ticket's status, but I only received an automated generic response stating that if I have already appealed, I should just wait. My questions for the community: Has anyone else experienced wait times exceeding 3 weeks for a 4.3(b) appeal recently? Is there any workaround to simply verify that an internal appeal ticket is genuinely open and hasn't fallen through the cracks? Any insights or advice on how to proceed would be greatly appreciated. Thank you!
Replies
7
Boosts
0
Views
317
Activity
4w
App Store search autocorrects exact app name to a different word — 8 months unresolved
I'm posting here after 8 months of back-and-forth with Developer Support (case 102685152651) because I've exhausted that channel and need to know if others have experienced this or if any Apple engineers can advise. The issue: When a user types "Dabah" — the exact name of my app — the App Store autocorrects/redirects to "Sabah." My app does not appear in those results. It only appears when the user searches "Dabah recipes." This means users who know the app by name cannot find it unless they add a secondary keyword. What makes this clearly a system-level bug, not a ranking issue: The same behavior occurs inside Apple's own Developer Marketing Tools portal. Searching "Dabah" returns only Sabah-related apps. Searching "Dabah recipes" finds my app immediately. This is not a user-facing algorithm issue — it's happening in an internal Apple tool. "Dabah" is a unique, uncommon word with no major competing apps. There is no legitimate reason an exact-name search should be overridden. The app has been live on the App Store since mid-2024, is properly indexed (it surfaces on keyword searches), and has "Dabah" listed as a keyword. The problem is specifically in the autocorrect/normalization layer treating "Dabah" as a misspelling of "Sabah." I've submitted screen recordings demonstrating both behaviors. Developer Support has confirmed my ticket is with the engineering team, but I've received no resolution or timeline in 8 months. Has anyone else encountered autocorrect overriding an exact app name match? Is there a known path to escalate search indexing bugs beyond the standard Developer Support channel? App: Dabah (id6745241806) Category: Food & Drink
Replies
0
Boosts
0
Views
63
Activity
4w
iOS 26 WKWebView STScreenTimeConfigurationObserver KVO Crash
Fatal Exception: NSInternalInconsistencyException Cannot remove an observer <WKWebView 0x135137800> for the key path "configuration.enforcesChildRestrictions" from <STScreenTimeConfigurationObserver 0x13c6d7460>, most likely because the value for the key "configuration" has changed without an appropriate KVO notification being sent. Check the KVO-compliance of the STScreenTimeConfigurationObserver [class.] I noticed that on iOS 26, WKWebView registers STScreenTimeConfigurationObserver, Is this an iOS 26 system issue? What should I do?
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
18
Boosts
17
Views
2.3k
Activity
4w
Question on nudity
I built a peptide app with the information based on interactive body parts I’m worried that the body might be to nude. As well as I will be linking the peptides you saved with the educational information in the app to website where it’s a simple shop. Here’s the picture
Replies
1
Boosts
0
Views
183
Activity
4w
Update membership details
I can't seem to find any way to update my now legacy details since moving country. My general apple account has changed just fine but my developer account still shows as UK and no way to update. Any ideas?
Replies
1
Boosts
0
Views
59
Activity
4w
App Review Rejection Due to External Payment Script Not Loading in Review Environment (Toss Payments CDN)
Hello, I am currently experiencing an issue during the App Review process related to a third-party payment integration using Toss Payments. Our app loads a payment widget from an external script hosted at: https://js.tosspayments.com/v2/standard In our local and production environments, the payment module works without any issues. However, in the App Review environment, the script appears to fail to load or initialize properly, resulting in an "Unknown Error" during payment widget initialization. We suspect that the App Review environment may have network restrictions or firewall rules that block or limit access to this external CDN (AWS-based), preventing the script from being fetched. We have already: Verified that the script loads correctly in all non-review environments Submitted a video demonstrating the normal payment flow Contacted the payment provider, and they confirmed that there are no IP blocks or restrictions on their side My questions are: Does the App Review environment impose restrictions on external CDN domains or third-party scripts? If so, what is the recommended approach for handling payment SDKs that rely on external script loading? As a temporary workaround for review purposes, would it be acceptable to: Bypass the actual payment SDK Replace it with a mock or simplified flow (e.g., tapping the payment button immediately proceeds to a success screen) Restore the real payment integration after approval? We want to ensure compliance with App Store guidelines while also resolving this review-specific issue efficiently. Any guidance or similar experiences would be greatly appreciated. Thank you!
Replies
0
Boosts
0
Views
74
Activity
4w
Unable to Change Primary Locale for 4–6 Year Old Live App – “Missing Screenshots” Error Despite All Assets Uploaded
Hi everyone, We’re facing an issue while trying to change the Primary Language / Primary Locale of a long-standing live iOS app in App Store Connect. The app has been live for 4–6+ years. When attempting to update the Primary Locale from App Information, we receive the following error: “Primary Locale couldn’t be saved because you must first provide all the required screenshots for each version in this language.” However: The target localization (English – UK) already exists. All required screenshot sets are uploaded. No screenshot sections are blank (iPhone and iPad – all visible display sizes). Both the live version and the version in review contain complete screenshot sets. No Apple Watch or iMessage extensions are currently included in the build. A clean build has been uploaded and selected. Removing the version from review does not resolve the issue. There are no visible validation errors in the UI. This appears to be either: A hidden backend validation requirement, A legacy platform association, Or a Primary Locale lock tied to the app’s original configuration. Has anyone successfully changed the Primary Locale for an older live app recently? Is there a known limitation for apps created several years ago? Would appreciate any insight before escalating further. Thanks in advance.
Replies
1
Boosts
0
Views
157
Activity
4w