Is there a way to create a grocery list in swift programmatically? With color and icon?
I mean the new Reminders.app v7.0 features.
I don't find code or guide in the dev documentation.
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello,
We’re seeing an iPad-specific Launch Screen issue related to multitasking window sizes.
Environment
Device: iPad (iPadOS 26)
Device orientation: Landscape
App is launched in a small window where the app window is portrait-shaped (width < height)
Issue
When the iPad is in landscape but the app is launched as a portrait-shaped small window, the LaunchScreen.storyboard appears to be rendered/layouted as landscape, not matching the actual window geometry. As a result, the Launch Screen content is clipped / partially missing (we see blank/empty area at the bottom during launch). After the app finishes launching, our first view controller uses the correct window size and the UI looks fine — the problem is mainly during the Launch Screen phase.
What we checked
LaunchScreen.storyboard uses Auto Layout and is expected to adapt to screen/window size.
This only reproduces when the device orientation and the app window aspect ratio don’t match (landscape device + portrait-shaped app window, or vice versa). When device orientation and window shape are aligned, the Launch Screen displays correctly.
Question
Is it expected that iPadOS renders LaunchScreen.storyboard based on the interface orientation / size class rather than the actual window bounds in multitasking scenarios?
If not expected, what is the recommended way to ensure the Launch Screen matches the app’s actual window size/aspect ratio at launch (without using code, since Launch Screen is static)?
Are there any additional diagnostics or recommended steps to help us investigate and confirm the root cause (e.g., specific logs, APIs/values to capture at launch such as UIWindowScene bounds, interfaceOrientation, size classes, or any guidance on how Launch Screen snapshots are chosen/cached in multitasking)?
Thank you.
Or, can we consider the response completes once the prompt disappears?
I will write down the sequence of events in order.
A prompt appeared on our app's page asking us to respond to the survey.
However, likely because the app hadn't been updated for many years, the “Edit” option for age restrictions was not displayed; instead, “View” was shown.
After creating a page for the new app version, “Edit” appeared. We hadn't planned to release the new version to the App Store at this time, but we only created the new page to respond to this survey.
After entering “edit” and answering the age restriction survey, the prompt disappeared.
I contacted Apple Support to find out if just answering would suffice, but they told me to submit the app for review. However, as mentioned above, we have no plans to modify and release this app.
Since it's an old app, I updated the environment, built it, and submitted it, but issues were pointed out. (I think it's because it's an old app.)
When I asked the Apple Review team the same question as at the beginning, they suggested I post it here.
Many thanks!
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Tags:
App Review
App Store Connect
1. Summary
In a hybrid iOS app using WKWebView (Angular + Capacitor), after programmatically blurring an element and connecting a Bluetooth keyboard, pressing Ctrl+Home or Ctrl+End causes the app to crash.
The crash stack shows the issue occurs inside UIKit keyboard handling (UITextInteractionSelectableInputDelegate _moveToStartOfLine), indicating a system-level bug.
2. Steps to Reproduce
Open the hybrid app containing a WKWebView.
Blur the input (programmatically).
Connect a Bluetooth keyboard.
Press Ctrl + Home or Ctrl + End.
Expected result:
No crash. The command should be ignored if no text input is active.
Actual result:
App crashes immediately.
3. Crash Log (Crashlytics Trace)
Crashed: com.apple.main-thread
0 WebKit 0xfbdad0 <redacted> + 236
1 UIKitCore 0x10b0548 -[UITextInteractionSelectableInputDelegate _moveToStartOfLine:withHistory:] + 96
2 UIKitCore 0xd0fb38 -[UIKBInputDelegateManager _moveToStartOfLine:withHistory:] + 188
3 UIKitCore 0xa16174 __158-[_UIKeyboardStateManager handleMoveCursorToStartOfLine:beforePublicKeyCommands:testOnly:savedHistory:force:canHandleSelectableInputDelegateCommand:keyEvent:]_block_invoke + 52
4 UIKitCore 0xa36ae4 -[_UIKeyboardStateManager performBlockWithTextInputChangesIgnoredForNonMacOS:] + 48
5 UIKitCore 0xa160f0 -[_UIKeyboardStateManager handleMoveCursorToStartOfLine:beforePublicKeyCommands:testOnly:savedHistory:force:canHandleSelectableInputDelegateCommand:keyEvent:] + 440
6 UIKitCore 0xa06614 -[_UIKeyboardStateManager handleKeyCommand:repeatOkay:options:] + 3204
7 UIKitCore 0xa2fb64 -[_UIKeyboardStateManager _handleKeyCommandCommon:options:] + 76
8 UIKitCore 0xa2fb08 -[_UIKeyboardStateManager _handleKeyCommand:] + 20
9 UIKitCore 0xa30684 -[_UIKeyboardStateManager handleKeyEvent:executionContext:] + 2464
10 UIKitCore 0xa2f95c __42-[_UIKeyboardStateManager handleKeyEvent:]_block_invoke + 40
11 UIKitCore 0x4b9460 -[UIKeyboardTaskEntry execute:] + 208
12 UIKitCore 0x4b92f4 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 356
13 UIKitCore 0x4b8be0 -[UIKeyboardTaskQueue addTask:breadcrumb:] + 120
14 UIKitCore 0xa2f8d0 -[_UIKeyboardStateManager handleKeyEvent:] + 432
15 CoreFoundation 0x2f934 __invoking___ + 148
16 CoreFoundation 0x2efac -[NSInvocation invoke] + 424
17 UIKitCore 0x14cbcc4 -[UIRepeatedAction invoke] + 176
18 UIKitCore 0x14cbeb8 -[UIRepeatedAction _preInvocationTimerFire] + 56
19 UIKitCore 0x1195364 -[UIApplication _handleKeyboardPressEvent:] + 2192
20 UIKitCore 0x1187278 -[UIApplication pressesBegan:withEvent:] + 328
21 UIKitCore 0x9b808 forwardTouchMethod + 376
22 UIKitCore 0x9b808 forwardTouchMethod + 376
23 UIKitCore 0x9b808 forwardTouchMethod + 376
24 UIKitCore 0x9b808 forwardTouchMethod + 376
25 UIKitCore 0x9b808 forwardTouchMethod + 376
26 UIKitCore 0x9b808 forwardTouchMethod + 376
27 UIKitCore 0x9b808 forwardTouchMethod + 376
28 UIKitCore 0x9b808 forwardTouchMethod + 376
29 WebKit 0x66e2b4 <redacted> + 84
30 UIKitCore 0x9b808 forwardTouchMethod + 376
31 UIKitCore 0x157290c -[UIScrollView pressesBegan:withEvent:] + 148
32 UIKitCore 0x9b808 forwardTouchMethod + 376
33 WebKit 0xfbbd04 <redacted> + 100
34 UIKitCore 0x11a7620 -[UIWindow _sendButtonsForEvent:] + 312
35 UIKitCore 0x522dc -[UIWindow sendEvent:] + 568
36 UIKitCore 0x5f508 -[UIApplication sendEvent:] + 376
37 UIKitCore 0x1194364 -[UIApplication _handleKeyUIEvent:] + 136
38 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
39 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
40 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
41 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
42 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
43 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
44 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
45 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
46 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
47 UIKitCore 0x11a3e14 -[UIResponder _handleKeyUIEvent:] + 56
48 UIKitCore 0x11943e8 -[UIApplication handleKeyUIEvent:] + 56
49 UIKitCore 0x11942ac -[UIApplication _handleKeyHIDEvent:usingSyntheticEvent:] + 660
50 UIKitCore 0x117ac __dispatchPreprocessedEventFromEventQueue + 4648
51 UIKitCore 0xfbe4 __processEventQueue + 4812
52 UIKitCore 0x94e4 updateCycleEntry + 160
53 UIKitCore 0x9404 _UIUpdateSequenceRun + 84
54 UIKitCore 0x8ab4 schedulerStepScheduledMainSection + 208
55 UIKitCore 0x41e4 runloopSourceCallback + 92
56 CoreFoundation 0xf92c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
57 CoreFoundation 0xf744 __CFRunLoopDoSource0 + 172
58 CoreFoundation 0xf5a0 __CFRunLoopDoSources0 + 232
59 CoreFoundation 0xff20 __CFRunLoopRun + 840
60 CoreFoundation 0x11adc CFRunLoopRunSpecific + 572
61 GraphicsServices 0x1454 GSEventRunModal + 168
62 UIKitCore 0x135274 -[UIApplication _run] + 816
63 UIKitCore 0x100a28 UIApplicationMain + 336
64 Order 0xa2ed0 main + 21 (AppDelegate.swift:21)
4. Environment
iPadOS versions: 18.1.0, 18.4.1, 18.6.2
WebView: WKWebView
Hybrid stack: Angular + (Capacitor)
Reproducible on multiple iPads and multiple iPadOS 18.x versions.
5. Expected Behavior
Pressing Ctrl+Home or Ctrl+End when no text input is active should be ignored and should not crash the app.
We put the apple-app-site-association file at https://ourdomain.com.tr/.well-known/apple-app-site-association.
When we send a request to url, we get 200 response code every time and we can see the file. But sometimes when we try to access https://app-site-association.cdn-apple.com/a/v1/ourdomain.com.tr url with browser or CMD tool, we are facing with 404 response code.
There isn't any ip adress filter in our systems and we tried using vpn for sending same request from different locations(america and europe) but nothing changed.
In addition, can anyone provide the ip list of apple cdn servers to check the F5 Load balancer WAF logs?
CMD output:
C:\Users\Name>curl -Lv https://app-site-association.cdn-apple.com/a/v1/ourdomain.com.tr
Host app-site-association.cdn-apple.com:443 was resolved.
IPv6: (none)
IPv4: 17.253.122.197, 17.253.15.210, 17.253.122.196, 17.253.107.201, 17.253.57.203, 17.253.15.198, 17.253.57.200
Trying 17.253.122.197:443...
Connected to app-site-association.cdn-apple.com (17.253.122.197) port 443
schannel: disabled automatic use of client certificate
ALPN: curl offers http/1.1
ALPN: server accepted http/1.1
using HTTP/1.x
GET /a/v1/ourdomain.com HTTP/1.1
Host: app-site-association.cdn-apple.com
User-Agent: curl/8.9.1
Accept: /
Request completely sent off
schannel: remote party requests renegotiation
schannel: renegotiating SSL/TLS connection
schannel: SSL/TLS connection renegotiated
< HTTP/1.1 404 Not Found
< Apple-Failure-Details: {"cause":"context deadline exceeded (Client.Timeout exceeded while awaiting headers)"}
< Apple-Failure-Reason: SWCERR00301 Timeout
< Apple-From: https://ourdomain.com.tr/.well-known/apple-app-site-association
< Apple-Try-Direct: true
< Cache-Control: max-age=3600,public
< Content-Length: 10
< Content-Type: text/plain; charset=utf-8
< Date: Mon, 14 Apr 2025 12:52:04 GMT
< Expires: Mon, 14 Apr 2025 12:52:14 GMT
< Age: 1770
< Via: http/1.1 uklon5-vp-vst-004.ts.apple.com (acdn/268.14469), https/1.1 uklon5-vp-vfe-002.ts.apple.com (acdn/268.14469), http/1.1 frmrs1-edge-mx-008.ts.apple.com (acdn/268.14469), http/1.1 frmrs1-edge-fx-005.ts.apple.com (acdn/268.14469)
< X-Cache: hit-fresh, hit-stale, hit-fresh, hit-fresh
< CDNUUID: 9e72cf99-1503-4644-9ea3-173328a25c94-31496306226
< Connection: keep-alive
<
Not Found
Connection #0 to host app-site-association.cdn-apple.com left intact
I'm building out a live activity that has a button which is meant to update the content state of the Live Activity. It calls a LiveActivityIntent that runs in the app process.
The push server starts my live activity and the buttons work just fine. I pass the push token back to the server for further updates and when the next update is pushed by the server the buttons no longer work. With the debugger I'm able to verify the app intent code runs and passes the updated state to the activity. However the activity never updates or re-renders. There are no logs in Xcode or Console.app that indicates what the issue could be or that the update is ignored.
I have also tried adding the frequent updates key to my plist with no change.
I'm updating the live activity in the LiveActivityIntent like this:
public func perform() async throws -> some IntentResult {
let activities = Activity<WidgetExtensionAttributes>.activities
for activity in activities {
let currentState = activity.content.state
let currentIndex = currentState.pageIndex ?? 0
let maxIndex = max(0, currentState.items.count - 1)
let newIndex: Int
if forward {
newIndex = min(currentIndex + 1, maxIndex)
} else {
newIndex = max(currentIndex - 1, 0)
}
var newState = currentState
newState.pageIndex = newIndex
await activity.update(
ActivityContent(
state: newState,
staleDate: nil
),
alertConfiguration: nil,
timestamp: Date()
)
}
return .result()
}
To sum up:
Push to start -> tap button on activity -> All good!
Push to start -> push update -> tap button -> No good...
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
APNS
Intents
App Intents
ActivityKit
Dear Apple Developer Support Team,
I hope this message finds you well. I am writing to seek assistance regarding my Apple Developer account, which is still pending approval. It has been several days since I completed the registration process and submitted all the required information, but I have not received any confirmation or update yet.
I understand that the review process can take some time, but as I urgently need access to my developer account for an ongoing project, I would greatly appreciate it if you could look into this matter and provide an update on the current status of my application
Please let me know if any additional information or verification is required from my side to expedite the process.
Thank you for your time and support. I look forward to your prompt response
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
Hi, Apple developer community
We’re launching our first app and we’re really excited (and honestly a bit anxious) about the review process.
From the start, we used the Notes section to proactively answer any questions we could think of — including how the app works and complete test credentials. The first review took 3 days, and then we were asked for additional documentation. We provided everything within a couple of hours, and we also re-shared the same key information from Notes to make it easier for the reviewer.
Then another 3 days passed (which feels very long to us), and we received the exact same rejection again. It really seems like the reviewer isn’t reading our response or the Notes section. We can also see that they aren’t logging into the test account for some reason.
We’ve replied again with a detailed explanation, but it feels like we’re stuck in a strange loop of rejections.
What would you do in this situation? Why might a reviewer be overlooking the information even when it’s clearly provided both in Notes and in our reply? We’re building a genuinely useful product and we’re very concerned about what’s happening here.
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
This api is experiencing 503 errors again. Please fix it as soon as possible.
Dear Apple Developer Program Legal/Compliance Team,
I am writing in response to the termination notice regarding my Apple Developer Program account, in which Apple cites an alleged violation of Section 3.2(f) of the Apple Developer Program License Agreement (ADP Agreement), based on “documented indications of fraudulent conduct.”
I respectfully request formal clarification and detailed information regarding this determination, as I take compliance obligations under Apple’s agreements very seriously.
Specifically, I kindly request the following:
Clarification of Alleged Conduct
Please specify the exact actions, behaviors, or activities that Apple has determined to constitute a violation of Section 3.2(f), including the category of conduct involved (e.g., technical interference, platform misuse, fraudulent activity, distribution abuse, business practice violations, or other).
Scope and Nature of the Evidence
Without requesting disclosure of sensitive internal systems, I respectfully ask for clarification regarding the general nature of the evidence relied upon (e.g., transactional records, system logs, behavioral patterns, policy violations, or platform integrity signals).
Account-Level vs. Application-Level Issues
Please confirm whether the alleged violation relates to:
A specific application or applications,
Account-level activity,
Distribution mechanisms (TestFlight, Custom App Distribution, Ad Hoc, etc.),
Or external operational behavior associated with the developer account.
Opportunity for Rectification or Compliance Remediation
Kindly advise whether Apple provides any compliance remediation pathway, corrective action mechanism, or review process for cases involving Section 3.2(f), including:
Formal reconsideration or appeal procedures,
Regulatory complaint mechanisms,
Compliance audit or corrective action submissions,
Reinstatement eligibility criteria.
Reapplication and Cooling-Off Period Requirements
Please clarify the conditions, requirements, and compliance expectations associated with the stated reapplication restriction period, including whether specific remediation steps, certifications, or compliance documentation may be required prior to any future eligibility review.
My intent is to fully understand the nature of the determination, ensure full legal and contractual compliance, and clarify whether any formal resolution or review mechanisms exist under Apple’s policies or applicable platform regulations.
I respectfully request that this inquiry be handled through the appropriate legal or compliance review channel.
Thank you for your time and consideration.
Sincerely,
Jiuru Song
[Team ID / Developer ID if available]8DJDU79WZ7
[Company Name, if applicable]ASIA DIGITAL ALLIANCE PTE. LTD.
I'm implementing app intents for my tasks app which supports recurrence rule for tasks. I see that when creating a todo for Reminders via Siri it allows to set a recurrence rule via natural language.
Is there a built in way to receive that recurrence rule as a @Parameter in my AppIntent? If not, is it possible to receive the full user dictated text in the AppIntent:perform method so that I can use some ML model to convert the text to EKRecurrenceRule or similar?
I’m experiencing a consistent crash of SpringBoard on macOS when running my iOS app in the Simulator. The crash occurs specifically when a critical alert (geofence notification) is triggered by my server and delivered to the app.
Xcode version: 16.4
macOS version: 15.5
App uses UNUserNotificationCenter with critical alert notifications related to geofencing. When the critical alert is received, SpringBoard quits unexpectedly on macOS, crashing the Simulator UI to the home screen.
The notification is delivered by Firebase, and I have updated to the latest version of that.
The console shows:
XPC connection interrupted
[C:1] Error received: Connection interrupted.
[C:1-2] Error received: Connection interrupted.
This does not happen when testing on a real device — the app works fine there, however, Springbaord still crashes on macOS.
Please advise if this is a known issue or if there’s a workaround. This severely impacts development and testing of location-based critical notifications.
The last time I tested this functionality, with an older version of Xcode, I had no issues.
Thank you for your help.
inline-code
How do you achieve this effect in toolbar? Where is the documentation for this?
How to make it appear top toolbar or bottom toolbar?
Thank you!
Here is what I have now...
.toolbar {
ToolbarItem(placement: .destructiveAction) {
Button {
showConfirm = true
} label: {
Image(systemName: "trash")
.foregroundColor(.red)
}
}
}
.confirmationDialog(
"Are you sure?",
isPresented: $showConfirm,
titleVisibility: .visible
) {
Button("Delete Item", role: .destructive) {
print("Deleted")
}
Button("Archive", role: .none) {
print("Archived")
}
Button("Cancel", role: .cancel) { }
}
}
Family Controls entitlement not applying to DeviceActivityMonitor and ShieldConfiguration extensions
I have the Family Controls & Personal Device Usage entitlement approved for my main app target, but I'm unable to get it applied to my app extensions (DeviceActivityMonitor and ShieldConfiguration). The entitlement request form at developer.apple.com/contact shows "Thank you for your submission" when I submit requests for the extensions, but the requests never actually register. No follow-up email, no change in my account.
Without the entitlement on these extensions, I can't use the core Screen Time API functionality (monitoring device activity and displaying shield UIs when apps are blocked). The main app target has the entitlement, but the extensions need it independently to function.
Has anyone run into this? Is there a way to get the entitlement extended to app extensions, or is there a step I'm missing in the provisioning process?
Topic:
App Store Distribution & Marketing
SubTopic:
General
I get this message in my account: Developer Information Update In Process
Note: Your developer information update is currently in process. Until it’s complete, the updated Program License Agreement may not go into effect.
Why and what is going on is not clear, nothing has changed really. All accountdetails are applied and approved. Any idea what is going on and how to speed this "process" up?
Topic:
App Store Distribution & Marketing
SubTopic:
App Store Connect
Transaction can not finish in OS26.2 TestFlight
Hello everyone. I want to do navigationTitle (located on the top side on MacOS system) in LiquidGlass style. now my solution look like:
just black rectangle. But i want like this:
opacity and LiquidGlass. Like in Photo app in MacOS. Please help me, thank you in advance.
My code:
struct RootView: View {
@Environment(\.horizontalSizeClass) var hSize
var body: some View {
if hSize == .regular {
DesktopLayout()
.navigationTitle("title")
.toolbarBackground(.ultraThinMaterial, for: .automatic)
} else {
MobileLayout()
}
}
}
Recently I've noticed that certain cursor actions cause the finger icon to appear with a gray box around it. It appears when I hover over other icons (for example, the menu items at the top of this website; Microsoft Teams options but not MS Word, etc.). Is this new? Is there a way to get rid of the box?
Topic:
Community
SubTopic:
Apple Developers
A user of my app reported that when my app copies files from a QNAP NAS to a folder on their Mac, they get the error "Result too large". When copying the same files from the Desktop, it works.
I asked them to reproduce the issue with the sample code below and they confirmed that it reproduces. They contacted QNAP for support who in turn contacted me saying that they are not sure they can do anything about it, and asking if Apple can help.
Both the app user and QNAP are willing to help, but at this point I'm also unsure how to proceed. Can someone at Apple say anything about this? Is this something QNAP should solve, or is this a bug in macOS?
P.S.: I've had users in the past who reported the same issue with other brands, mostly Synology.
import Cocoa
@main
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
let openPanel = NSOpenPanel()
openPanel.canChooseDirectories = true
openPanel.runModal()
let source = openPanel.urls[0]
openPanel.canChooseFiles = false
openPanel.runModal()
let destination = openPanel.urls[0]
do {
try copyFile(from: source, to: destination.appendingPathComponent(source.lastPathComponent, isDirectory: false))
} catch {
NSAlert(error: error).runModal()
}
NSApp.terminate(nil)
}
private func copyFile(from source: URL, to destination: URL) throws {
if try source.resourceValues(forKeys: [.isDirectoryKey]).isDirectory == true {
try FileManager.default.createDirectory(at: destination, withIntermediateDirectories: false)
for source in try FileManager.default.contentsOfDirectory(at: source, includingPropertiesForKeys: nil) {
try copyFile(from: source, to: destination.appendingPathComponent(source.lastPathComponent, isDirectory: false))
}
} else {
try copyRegularFile(from: source, to: destination)
}
}
private func copyRegularFile(from source: URL, to destination: URL) throws {
let state = copyfile_state_alloc()
defer {
copyfile_state_free(state)
}
var bsize = UInt32(16_777_216)
if copyfile_state_set(state, UInt32(COPYFILE_STATE_BSIZE), &bsize) != 0 {
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno))
} else if copyfile_state_set(state, UInt32(COPYFILE_STATE_STATUS_CB), unsafeBitCast(copyfileCallback, to: UnsafeRawPointer.self)) != 0 {
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno))
} else if copyfile(source.path, destination.path, state, copyfile_flags_t(COPYFILE_DATA | COPYFILE_SECURITY | COPYFILE_NOFOLLOW | COPYFILE_EXCL | COPYFILE_XATTR)) != 0 {
throw NSError(domain: NSPOSIXErrorDomain, code: Int(errno))
}
}
private let copyfileCallback: copyfile_callback_t = { what, stage, state, src, dst, ctx in
if what == COPYFILE_COPY_DATA {
if stage == COPYFILE_ERR {
return COPYFILE_QUIT
}
}
return COPYFILE_CONTINUE
}
}
Hi all,
I'm developing fitness app and I use healthkit to track user's "STEPS" count and "Heart Rate" from their iphone devices.
I have been receiving this rejection and can't seem to get past this:
Guideline 2.5.1 - Performance - Software Requirements
The app uses the HealthKit or CareKit APIs but does not clearly identify the HealthKit and CareKit functionality in the app's user interface.
Apps using these APIs should be clearly indicated to provide transparency and valuable information to users.
Next Steps
To resolve this issue, it would appropriate to clearly identify the HealthKit and CareKit functionality in the app's user interface.
Resources
Learn more about software requirements in guideline 2.5.1.
How I tried to Resolve the Issue
I have modified my app: adding user permission prompt, adding healthkit notification, adding healthkit indicator in the UI
**1. Added a "Permission Primer" Screen (Pre-Alert) **
When a user taps "Connect Apple Health," they are now shown a dedicated explanation screen before the system permission prompt appears. This screen clearly states: "[App] integrates with HealthKit to read your Heart Rate and Steps... to calculate physical exertion." (Please see the "Connect" flow in the Session Detail view).
**2. Added Explicit Source Attribution **
I have added a permanent text label reading "Health data sourced from Apple Health" directly below the heart rate and steps statistics on the Session Detail dashboard. This ensures that users always identify the source of the displayed metrics.
3. Deployment Target Correction
I identified a configuration error where the Deployment Target was set to a future OS version. I have corrected this to the currently shipping iOS 18 to ensure full compliance with software requirements.
4. App Description Update
I have updated the App Store description to explicitly mention the HealthKit integration and its specific purpose (tracking match intensity).
However doing the above, I still continue to receive the same review message. When I asked the reviewer what else could be done to satisfy the requirement, I only get boiler plate message above. Anyone know what they really looking for?
Any insights is appreciated. Thanks!