Posts under App & System Services topic

Post

Replies

Boosts

Views

Created

StoreKit / IAP: Product WAITING_FOR_REVIEW — works locally with production RevenueCat key + Apple Sandbox, fails during App Review
Hello, I need guidance on App Store Connect product state vs StoreKit behavior during App Review. Stack: iOS app (Expo / React Native), subscriptions via RevenueCat + StoreKit. Bundle ID matches App Store Connect. RevenueCat API keys — what I’ve verified locally: With the production RevenueCat API key (iOS appl_..., same as the submitted build), everything works on local device but not when I download it from TestFlight. I have also tested with RevenueCat’s sandbox / test API key (the separate key intended for sandbox/testing). That setup works as well — I can load offerings and complete test purchases the same way What RevenueCat (SDK / dashboard health) reports: Product monthly is configured in RevenueCat. Warnings that products aren’t approved in App Store Connect yet and that the default offering has configuration issues. Apple’s product state: WAITING_FOR_REVIEW. The SDK still states that test purchases are possible. What App Review reports: After onboarding a new business account, “Activate subscription” leads to an error (plans don’t load / purchase path fails). Review suggested an app code issue. Why this is confusing: Locally, both RevenueCat key modes I tried (production and sandbox/test) work with Apple Sandbox on the device. The submitted build uses the production RevenueCat key. Review still sees a failure. Questions: For IAP in WAITING_FOR_REVIEW, should App Review always use an Apple Sandbox account to test subscriptions until the product is fully approved? Is it documented that StoreKit may not return products during review without Sandbox while the product remains WAITING_FOR_REVIEW? Has anyone else seen “works locally (prod + sandbox RevenueCat keys + Apple Sandbox) but Review fails” with the same WAITING_FOR_REVIEW state? Thanks for any official documentation or similar threads.
1
0
87
2w
Technical scope of Default Dialer App in EU: Access to Cellular Audio Stream for AI Services
Hello, I am researching the technical feasibility of developing a Default Dialer App for the EU market using the specific entitlements granted under the Digital Markets Act (DMA). Our primary goal is to implement a Cellular/VoLTE-based calling system—not mVoIP—and we need to clarify whether it is possible to provide features such as STT (Speech-to-Text) and Call Summarization, which require In-call Audio Recording. Regarding the Default Dialer App Entitlement in the EU, I would like to clarify the following: Access to Raw Audio Stream: When an app is granted the Default Dialer status in the EU, does it gain programmatic access to the downlink and uplink audio streams of a cellular/VoLTE call for recording purposes? LiveCommunicationKit & Recording APIs: Does LiveCommunicationKit (or any related framework for iOS 26) provide specific APIs for a third-party dialer to capture native telephony audio? Entitlement Scope for Partners: If an EU-based partner obtains the necessary entitlements, can those entitlements be used to grant our application the authority to process cellular calls and access the associated audio data? Recommended Implementation: Are there any Apple-sanctioned methods or specific frameworks for implementing call recording for AI-driven services within the scope of the new EU-specific regulations? We need to confirm these technical boundaries to establish the implementation scope with our EU partners. Any guidance on whether a third-party app can technically and legally record cellular calls under these specific conditions would be greatly appreciated. Thank you. Access to Raw Audio Stream: When an app is granted the Default Dialer status in the EU, does it gain programmatic access to the downlink/uplink audio streams of a cellular call for recording purposes? LiveCommunicationKit & Recording: Does LiveCommunicationKit provide any specific APIs or delegates that allow a third-party dialer to capture call audio, or is the recording still restricted by the system’s sandbox? Entitlement Scope: If our EU partner obtains the necessary entitlements, can they authorize our application to handle the cellular call processing entirely, including the access to telephony audio data? AI Service Implementation: Are there any Apple-recommended ways to implement AI features (STT, Summarization) within a Default Dialer App without violating current iOS security architectures? We need to provide a clear "Feasibility Report" to our EU partners during upcoming meetings. Any technical guidance on whether a third-party app can legally and technically record cellular calls under this new EU-specific policy would be extremely helpful. Thank you.
2
0
97
2w
In-App Purchase works in TestFlight but fails during App Review (Apple can't complete purchase)
Hello, I have an issue with In-App Purchases during App Review. In TestFlight and Sandbox, everything works correctly: Products are loaded Subscriptions are visible Purchase completes successfully However, Apple reports that the purchase fails during review. My subscriptions are: Created and active in App Store Connect Attached to the app version Paid Apps Agreement accepted I also added all required information (price, duration, EULA, privacy policy). Why would purchases work in TestFlight but fail during App Review? Thank you for your help.
1
0
73
2w
Best practice for replacing deprecated sem_init/sem_wait in a cross-platform threading layer on macOS (arm64)
Hi all, I'm working on a cross-platform runtime that manages a pool of threads (think game engine / emulator style... dozens of guest threads mapped 1:1 to host pthreads). It was originally written for Linux and Windows and we're now porting to macOS on Apple Silicon. We've hit a wall with a deadlock on macOS and traced it back to our use of POSIX unnamed semaphores (sem_init / sem_wait / sem_post) for thread suspend and resume. We were unaware these have never actually been implemented on macOS, sem_init silently returns -1 with ENOSYS and then sem_wait just hangs forever. That explains our deadlock. The tricky part is how we use them. Our suspend mechanism works by sending SIGUSR1 to a target thread via pthread_kill. The signal handler then calls sem_wait to block the thread in place until another thread calls sem_post to resume it. So whatever we replace sem_init/sem_wait with needs to be safe to call from inside a signal handler. From what I can tell: dispatch_semaphore_wait is not documented as async-signal-safe pthread_cond_wait is also not async-signal-safe os_sync_wait_on_address looks promising but requires macOS 14.4+ which is a pretty high floor We could spin on a std::atomic with .wait() / .notify_all() but I've seen reports of high wake latency (up to 15ms) in libc++'s implementation on macOS My questions: What's the recommended way to block a thread inside a signal handler on macOS? Is there an async-signal-safe wait primitive I'm missing? Would restructuring to avoid blocking in the signal handler entirely be the better approach? For example, having the signal handler just set an atomic flag and then checking it at yield points — would that be the expected pattern on macOS? For the non-signal-handler suspend/resume paths, is dispatch_semaphore_t the right replacement for sem_t, or is there something better suited for high-frequency thread synchronization in 2026? Separately, we're also using ucontext (makecontext/swapcontext) for a fiber system on macOS and hitting issues on native arm64, it works under Rosetta but breaks natively. We have a setjmp/longjmp + manual stack pivot backend we can switch to. Is there any plan to fix or un-deprecate the ucontext functions on arm64, or should we just move off them permanently?
2
0
141
2w
The APNs delay to send notification on iOS 26.4
In my VoIP app, we use StartRing and StopRing via VoIP push to my app. But recently, I found some disordered VoIP notifications, my VoIP app received the StopRing push before the StartRing push. Examples: Server log: // send StartRing startring: - Apr 9, 2026 @ 14:54:43.255 .."pushType":"voip","priority":10, ... // send StopRing stop-ring Apr 9, 2026 @ 14:54:47.645 ..."pushType":"background","priority":5,"... VoIP app log: // receive StopRing 2026-04-0909:54:48.858 CDT : INFO : [RcRtc] [0x1feeba1c0] [PushNotificationParser]call push notification handled. action: StopRing telephony session id: s-a0dd8601926c7z19d72bbf8b9z1e62ec10000 sid: 178503189447188 // receive StartRing 2026-04-0909:54:49.524 CDT : INFO : [RcRtc] [0x1feeba1c0] [PushNotificationParser]call push notification handled. action: StartRing telephony session id: s-a0dd8601926c7z19d72bbf8b9z1e62ec10000 sid: 178503189447188 Then we can see the StartRing send first, but received in the app after the StopRing. The StartRing took abunt 6s to send and the StopRing took about 1s. So I guess there is an issue in the APNs part on iOS26.4. We saw there is a peak after iOS26.4 and iOS 26.4.1 than old iOS versions. Thanks.
8
0
434
2w
How to install and manage Network Extension in case of GUI-less application?
Hello, I am working on a DLP solution for macOS that relies on the Network Extension (NETransparentProxyProvider) for network traffic analysis. Could you please clarify: is it technically possible and officially supported to use a LaunchAgent as the container app to install and manage the Network Extension? If not, what is the recommended approach in case of GUI less application? Thank you in advance.
6
0
323
2w
External Purchase Link Entitlement RU - 500 Internal Server Error
Hello, We are a Russian developer attempting to enable the StoreKit External Purchase Link Entitlement for our app. According to Apple’s documentation, this entitlement is required to provide external purchase links in Russia. However, the official request page consistently returns a 500 Internal Server Error: https://developer.apple.com/contact/request/storekit-external-entitlement-ru Steps we tried: Different browsers (Safari, Chrome, Edge) Different networks and VPNs Multiple developer accounts The error persists in all cases. We have already opened a support case (Case #102864703080), but Developer Support advised us to post here for technical guidance. Questions: Is there an alternative way to submit the entitlement request while the page is unavailable? Can Apple confirm whether this is a known issue and if a fix is in progress? Are manual submissions via the general Contact Us form accepted for this entitlement? Screenshots of the error are attached. Thank you in advance for any guidance.
0
0
44
2w
NEURLFilter Not Blocking urls
Hi I tried to follow this guide https://developer.apple.com/documentation/networkextension/filtering-traffic-by-url I downloaded the sample app and put our pir service server address in the app. The service is already running and the app is connected to the pir service but the url is still not blocked. We tried to block example.com. Is there anything that we need to do in iOS code? This is the sample when there's dataset This is the sample when there's no dataset
1
0
105
2w
MapKit SwiftUI Map with .standard(elevation: .realistic) falls back to 2D in globe mode, while .hybrid(elevation: .realistic) remains 3D
Overview When using SwiftUI Map with .standard(elevation: .realistic) and a globe-style presentation, the map unexpectedly renders as a flat 2D map instead of a 3D globe / realistic terrain view. In the same view, switching to .hybrid(elevation: .realistic) preserves the expected 3D globe behavior. This appears to be a rendering bug or regression specific to the .standard style under globe mode, not an app-level issue. The issue is reproducible in my app’s competition map screen and has also been reported by other developers online. Steps to Reproduce Create a SwiftUI Map. Bind it to a MapCameraPosition. Apply a standard map style with realistic elevation: .mapStyle(.standard(elevation: .realistic)) Configure the UI so the user can switch between: standard + globe hybrid + globe Zoom out / interact with the map in globe mode. Expected Results Map with .standard(elevation: .realistic) should continue to render with globe / 3D realistic terrain behavior, consistent with realistic elevation support and similar to .hybrid(elevation: .realistic). Actual Results When the map style is .standard(elevation: .realistic) in globe mode, the map falls back to a flat 2D-looking representation. Changing the same map to .hybrid(elevation: .realistic) restores the expected 3D globe rendering. Regression Unknown, but this appears to be unintended behavior because: realistic elevation is intended to provide realistic terrain / 3D map rendering, and there are no overlays in this map configuration that should intentionally force the map into a flat representation. Minimal Relevant Code From My App private enum CompetitionMapMode: String, CaseIterable { case satellite case explore func mapStyle(look: CompetitionMapLook) -> MapStyle { switch self { case .satellite: return .hybrid(elevation: look.elevation) case .explore: return .standard(elevation: look.elevation) } } } private enum CompetitionMapLook: String, CaseIterable { case globe case flat var elevation: MapStyle.Elevation { switch self { case .globe: return .realistic case .flat: return .flat } } } Map(position: $cameraPosition, selection: $selectedMapItemID) { UserAnnotation() ForEach(mapDisplayItems) { item in Annotation( item.title, coordinate: item.coordinate, anchor: .bottom ) { mapAnnotationView(for: item) } .tag(item.id) } } .mapStyle(mapModeSelection.mapStyle(look: mapLookSelection)) Why I Believe This Is a Framework Bug The same Map instance renders correctly in 3D when using: .hybrid(elevation: .realistic) but falls back to 2D with: .standard(elevation: .realistic) under globe mode. This suggests the issue is tied specifically to the .standard rendering path in SwiftUI Map / MapKit, rather than camera state, annotations, or location handling. My map does include annotations, but it does not add overlays that would intentionally flatten realistic terrain. Environment Xcode: Xcode 26.4 (17E192) SDK: SDK Version 26.4 (23E237) Device: iPhone 17 Pro iOS version: iOS 26.5 Beta 2 Reproducibility: Always App type: SwiftUI app using MapKit Map Additional Notes The issue is visible in a production app screen, not only a toy sample. The problem appears style-specific: .standard(elevation: .realistic) → incorrect 2D fallback .hybrid(elevation: .realistic) → expected 3D behavior This makes standard map style unusable for globe presentation in my app.
1
0
127
2w
Shortcuts: Can not access submenu of inserted variables inside of newly created dictionaries on mac
While I was creating a shortcut using the dictionary function I encountered a bug. When creating a new dictionary to store the date and some other stuff I set a value to the current date variable. I went to change the date format to one I preferred I was unable to access the submenu to do so. To figure out what was going on I did some testing and here is what I found: You can't access the submenu of any inserted variable This only happens in newly created dictionaries You can be fix the dictionary by simply closing and opening the shortcut This bug does not happen on Iphone How to make this bug happen: Open any shortcut Create a new dictionary Add a variable in the value field You can no longer access the sub menu to edit the variable.
1
0
115
2w
Live Activity Stops Updating After 30 Seconds in Background During Audio Playback
Hi I developed a music app that plays offline audio and displays lyrics using Live Activities. According to ActivityKit documentation, Live Activities can be updated from the background. However, in my case, updates stop after ~30 seconds when the app goes to the background or the device is locked. Important points: The app continues running in the background (audio playback works fine using AVAudioSession with .playback) Background code execution is working as expected Only the Live Activity stops updating I am not using push updates since this is an offline app. Is there any limitation or requirement for updating Live Activities continuously in the background during audio playback? Audio Session Configuration let session = AVAudioSession.sharedInstance() try session.setCategory( .playback, mode: .default, options: [.mixWithOthers] // ✅ DO NOT interrupt other audio ) try session.setActive(true) print("✅ [AudioSession] Activated with mixWithOthers") } catch { print("❌ [AudioSession] Error: \(error)") } Live Activity Update Methods guard let activity = getLiveActivity(for: recordID) else{ print("⚠️ No Live Activity found for recordID: \(recordID)") return } guard activity.activityState == .active else { print("⚠️ Activity is not active") return } Task { let content = ActivityContent( state: state, staleDate: Date().addingTimeInterval(60 * 60 * 12), relevanceScore: 1.0 ) await activity.update(content) print("✅ Live Activity updated with ActivityContent") } }
0
0
196
2w
File Provider: case-insensitive collision check prevents mounting case-sensitive remote filesystems correctly
When a File Provider extension (NSFileProviderReplicatedExtension) mounts a Linux server via SFTP, remote directories containing files that differ only in case (e.g., "README" and "readme") are not represented correctly. The framework silently renames one file locally via the before-bounce mechanism, even though the extension reports both items with distinct identifiers and correct filenames. NSFileProviderActions.h states: "Collision checks should be case insensitive even if the filesystem or file provider might allow two coexisting filenames differing only by their case." This check runs in the framework before writing to disk. Placing the domain on a case-sensitive APFS volume via NSFileProviderDomain(displayName:userInfo:volumeURL:) does not help — the volume passes eligibility but the collision check still applies. This breaks any File Provider extension that mounts case-sensitive filesystems where case-variant filenames are common (especially git repositories). Is there any way to opt out of the case-insensitive collision check per domain? A supportsCaseSensitiveNames property on NSFileProviderDomain would solve this.
2
0
179
2w
Subscription failure in 26.4, 26.4.1
We have a user from Asia whose subscription failed to be detected by our app. On 26.4. They also tried revoking the yearly subscription and activating a monthly. Payment ok and the device reported that the subscription is active. Our code relies on Transaction.currentEntitlements in StoreKit, which seems to be broken, at least for this user. None of these worked: Installing iOS 26.4.1 Reinstalling our app Logging out and in from iCloud. Hard device reset Full iOS reinstall. User finally gave up and got a refund. I am reporting here in case other apps experienced similar problems. This discussion mentions that a regression in 26.4 might have contributed to the issue which is supposed to be fixed in 26.4.1. ( https://developer.apple.com/forums/thread/820562?answerId=883682022#883682022 ) The issue may have persisted or left the entitlements corrupt for this particular user. Hoping that the issue is resolved so we do not have more problems in the future.
2
0
108
2w
CKRecordZone deleted when second user accepts zone-wide CKShare
I'm seeing a critical issue where a custom CKRecordZone is consistently deleted server-side when a second iCloud account interacts with a zone-wide CKShare. I've reproduced this 20+ times across two days and have exhausted every client-side fix I can think of. Looking for guidance on what might be going wrong. Setup Container: iCloud.com.cohencooks (production app on App Store) Custom CKRecordZone in owner's private database Zone-wide CKShare(recordZoneID:) (iOS 15+ zone sharing) SwiftData with ModelConfiguration(cloudKitDatabase: .none) — no automatic CloudKit mirroring Acceptance via CKFetchShareMetadataOperation → CKContainer.accept(metadata) (no UICloudSharingController) Minimal reproduction // 1. Owner creates zone + share let zone = CKRecordZone(zoneName: "MyZone") try await privateDB.save(zone) let share = CKShare(recordZoneID: zone.zoneID) share[CKShare.SystemFieldKey.title] = "My Share" as CKRecordValue share.publicPermission = .readWrite let (results, _) = try await privateDB.modifyRecords(saving: [share], deleting: []) // 2. Owner pushes ~500 records to zone — all succeed // 3. Second user (different iCloud account) accepts share let metadata = try await container.shareMetadata(for: shareURL) try await container.accept(metadata) // 4. Owner's next CKFetchRecordZoneChangesOperation → zoneNotFound (code 26) // Zone is permanently gone. allRecordZones() confirms deletion. What I observe Three distinct failure patterns depending on configuration: Pattern 1 — publicPermission = .readWrite, no addParticipant: Zone dies instantly after acceptance. First push notification shows cloudkit.share changed (zone alive), second push notification returns zoneNotFound. The non-owner never successfully wrote anything. Pattern 2 — publicPermission = .none with explicit addParticipant: Zone survives acceptance and 2-3 minutes of bidirectional sync (non-owner pulls 578 records, pushes meal plans back). Then a push notification arrives and the zone is gone. This is dramatically better than Pattern 1 but still fails. Pattern 3 — Container destabilization after repeated testing: After 20+ create/delete cycles in one day, zones die from the owner's own push notifications — no second device involved at all. The container appears to enter an unstable state. Inconsistent state after deletion Here's something that might help narrow this down. After one of the zone deletions, I deployed the same build to a second device signed into a different iCloud account that had previously accepted the CKShare. Without sending a new invite, that device found the "Household" zone via allRecordZones() on sharedCloudDatabase — it could pull all 578 records, push updates, and the share URL still resolved. Meanwhile, the owner device (zone creator) gets "zone not found" from both allRecordZones() and direct recordZone(for:) on privateCloudDatabase. So it looks like the zone is deleted from the owner's private database, but the CKShare and zone records remain accessible to participants via the shared database. Participants can still read and write as if nothing happened — the owner just can't see the zone anymore. This also creates a recovery problem — when the owner creates a new zone with the same name, it gets a new CKShare URL, but the participant is still connected to the old "ghost" zone. The two sides are permanently split. Does this mean the zone deletion is happening through a path that doesn't properly clean up the sharing infrastructure? Is this expected behavior when a zone-wide CKShare's zone is deleted, or does it suggest the deletion is happening through an abnormal server-side path? What I've ruled out Hypothesis Test Result publicPermission = .readWrite Changed to .none + explicit addParticipant Zone survived longer but still eventually deleted Zone name tombstoning Tested 6 fresh names never used in this container All eventually deleted Non-owner writes causing deletion Gated ALL non-owner push methods (recipe, meal plan, grocery, photo, event) Zone still deleted database.save(share) vs modifyRecords Switched to modifyRecords(saving:deleting:) Zone still deleted NSPersistentCloudKitContainer interference Removed all Core Data CloudKit code Zone still deleted Double share acceptance Fresh app install, single acceptance only Zone still deleted Advanced Data Protection Neither account has ADP enabled Not the cause Programmatic vs system acceptance Tested both container.accept() and tapping share link Zone still deleted CloudKit Dashboard No ZoneDelete operation is visible in the logs. All operations are ZoneFetch, ZoneChanges, RecordQuery, RecordFetch. I do see EphemeralGroup operations targeting the custom zone — not sure what generates those. Comparison with working apps I compared my implementation with another app that uses the exact same zone-wide CKShare(recordZoneID:) pattern with publicPermission = .readWrite and programmatic acceptance — and it works. The main difference is that app uses CKSyncEngine (iOS 17+) rather than raw CKFetchRecordZoneChangesOperation / CKModifyRecordsOperation. Could CKSyncEngine be handling something internally that prevents this issue? Questions Is there a known interaction between zone-wide CKShare(recordZoneID:) acceptance and zone lifecycle that could cause zone deletion? Does CKSyncEngine handle zone-wide sharing differently than manual CKFetchRecordZoneChangesOperation + CKModifyRecordsOperation? What generates EphemeralGroup operations in CloudKit Dashboard? Could these trigger a zone delete? After 20+ zone create/delete cycles in a container, is there a server-side rate limit or tombstone mechanism that would destabilize new zones? Is the inconsistent state I described (zone gone from owner's private DB but still accessible from participant's shared DB) expected behavior, or does it indicate the deletion is happening through an abnormal path? Is the custom programmatic acceptance flow (CKFetchShareMetadataOperation → container.accept()) fully supported for zone-wide shares, or does it require UICloudSharingController? Any guidance would be greatly appreciated. This is blocking multi-user functionality for our app (mesa, a meal planning app on the App Store). Single-user sync works perfectly — the issue only manifests when a second iCloud account is involved. Environment: iOS 18.4.1, Xcode 16+, Swift, SwiftUI
1
0
140
2w
CKRecordZone deleted when second user accepts zone-wide CKShare
I'm seeing a critical issue where a custom CKRecordZone is consistently deleted server-side when a second iCloud account interacts with a zone-wide CKShare. I've reproduced this 20+ times across two days and have exhausted every client-side fix I can think of. Looking for guidance on what might be going wrong. Setup Container: iCloud.com.cohencooks (production app on App Store) Custom CKRecordZone in owner's private database Zone-wide CKShare(recordZoneID:) (iOS 15+ zone sharing) SwiftData with ModelConfiguration(cloudKitDatabase: .none) — no automatic CloudKit mirroring Acceptance via CKFetchShareMetadataOperation → CKContainer.accept(metadata) (no UICloudSharingController) Minimal reproduction // 1. Owner creates zone + share let zone = CKRecordZone(zoneName: "MyZone") try await privateDB.save(zone) let share = CKShare(recordZoneID: zone.zoneID) share[CKShare.SystemFieldKey.title] = "My Share" as CKRecordValue share.publicPermission = .readWrite let (results, _) = try await privateDB.modifyRecords(saving: [share], deleting: []) // 2. Owner pushes ~500 records to zone — all succeed // 3. Second user (different iCloud account) accepts share let metadata = try await container.shareMetadata(for: shareURL) try await container.accept(metadata) // 4. Owner's next CKFetchRecordZoneChangesOperation → zoneNotFound (code 26) // Zone is permanently gone. allRecordZones() confirms deletion. What I observe Three distinct failure patterns depending on configuration: Pattern 1 — publicPermission = .readWrite, no addParticipant: Zone dies instantly after acceptance. First push notification shows cloudkit.share changed (zone alive), second push notification returns zoneNotFound. The non-owner never successfully wrote anything. Pattern 2 — publicPermission = .none with explicit addParticipant: Zone survives acceptance and 2-3 minutes of bidirectional sync (non-owner pulls 578 records, pushes meal plans back). Then a push notification arrives and the zone is gone. This is dramatically better than Pattern 1 but still fails. Pattern 3 — Container destabilization after repeated testing: After 20+ create/delete cycles in one day, zones die from the owner's own push notifications — no second device involved at all. The container appears to enter an unstable state. What I've ruled out Hypothesis Test Result publicPermission = .readWrite Changed to .none + explicit addParticipant Zone survived longer but still eventually deleted Zone name tombstoning Tested 6 fresh names never used in this container All eventually deleted Non-owner writes causing deletion Gated ALL non-owner push methods (recipe, meal plan, grocery, photo, event) Zone still deleted database.save(share) vs modifyRecords Switched to modifyRecords(saving:deleting:) Zone still deleted NSPersistentCloudKitContainer interference Removed all Core Data CloudKit code Zone still deleted Double share acceptance Fresh app install, single acceptance only Zone still deleted Advanced Data Protection Neither account has ADP enabled Not the cause Programmatic vs system acceptance Tested both container.accept() and tapping share link Zone still deleted CloudKit Dashboard No ZoneDelete operation is visible in the logs. All operations are ZoneFetch, ZoneChanges, RecordQuery, RecordFetch. I do see EphemeralGroup operations targeting the custom zone — not sure what generates those. Comparison with working apps I compared my implementation with another app (Spotbook) that uses the exact same zone-wide CKShare(recordZoneID:) pattern with publicPermission = .readWrite and programmatic acceptance — and it works. The main difference is that app uses CKSyncEngine (iOS 17+) rather than raw CKFetchRecordZoneChangesOperation / CKModifyRecordsOperation. Could CKSyncEngine be handling something internally that prevents this issue? Questions Is there a known interaction between zone-wide CKShare(recordZoneID:) acceptance and zone lifecycle that could cause zone deletion? Does CKSyncEngine handle zone-wide sharing differently than manual CKFetchRecordZoneChangesOperation + CKModifyRecordsOperation? What generates EphemeralGroup operations in CloudKit Dashboard? Could these trigger a zone delete? After 20+ zone create/delete cycles in a container, is there a server-side rate limit or tombstone mechanism that would destabilize new zones? Is the custom programmatic acceptance flow (CKFetchShareMetadataOperation → container.accept()) fully supported for zone-wide shares, or does it require UICloudSharingController? Any guidance would be greatly appreciated. This is blocking multi-user functionality for our app (mesa, a meal planning app on the App Store). Single-user sync works perfectly — the issue only manifests when a second iCloud account is involved. Environment: iOS 18.4.1, Xcode 16+, Swift, SwiftUI
3
0
144
2w
Bug: Finder/AppleScript interaction
I have created a simple AppleScript that makes a folder named with today’s date. For many years, it has worked fine except: If I run the script (from a script app in the menu bar), then dump files into the folder, then change the colored “Tag” on the folder, I get a Finder error - An unexpected error occurred (error code -8076) - and I have to force-quit the Finder to complete the color tagging. If it change the tag before dumping the files, no error occurs. (Please hold the “Doctor, it hurts when I do this …” jokes.) This error has persisted through many macOS major iterations, including Tahoe 26.4.1. Prolly a Finder bug, but not sure. Here’s the source, for anyone interested. set dateStr to getDate() --display dialog dateStr tell application "Finder" activate try --set thisFolder to (the target of the front window) as alias set thisFolder to (the target of the front window) as string make new folder at thisFolder with properties {name:dateStr as string} on error errMsg display dialog "ERROR: " & errMsg end try end tell on getDate() set theDate to current date set theYear to year of theDate as string set theNewYear to third character of theYear & fourth character of theYear set theMonth to month of theDate as number as string if length of theMonth = 1 then set theMonth to "0" & theMonth as string end if set theDay to day of theDate as string if length of theDay = 1 then set theDay to "0" & theDay as string end if return theNewYear & " " & theMonth & " " & theDay as string end getDate
3
0
162
2w
Xcode 26 Causing StoreKit Fiasco for macOS?
I submitted my last macOS application with IAP on Oct. 23rd, 2025. I was able to test-purchase a non-consumable product with the StoreKit configuration file at that time. These days, every time I test a new macOS application with the configuration file, a purchase process fails. The thing is they all now fail if I test the store with existing applications that were once working. Xcode shows the following debugging error. Purchase failed with error: systemError(Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service created from an endpoint was invalidated from this process." UserInfo={AMSDescription=An unknown error occurred. Please try again., AMSURL=http://localhost:53272/WebObjects/MZBuy.woa/wa/inAppBuy, NSDebugDescription=The connection to service created from an endpoint was invalidated from this process., AMSStatusCode=200, AMSServerPayload={ All my iOS apps don't exhibit the same problem. This StoreKit fiasco only happens for macOS applications. And I'm thinking that it all started to occur after I began using Xcode 26. Not a single line of code has changed. But the applications that were once able to process IAP all now fail. And I'm suspecting that it's Xcode 26 that is responsible for this failure. My Xcode version is 26.2, by the way. Any macOS application developer experiencing the same problem?
5
1
229
2w
StoreKit / IAP: Product WAITING_FOR_REVIEW — works locally with production RevenueCat key + Apple Sandbox, fails during App Review
Hello, I need guidance on App Store Connect product state vs StoreKit behavior during App Review. Stack: iOS app (Expo / React Native), subscriptions via RevenueCat + StoreKit. Bundle ID matches App Store Connect. RevenueCat API keys — what I’ve verified locally: With the production RevenueCat API key (iOS appl_..., same as the submitted build), everything works on local device but not when I download it from TestFlight. I have also tested with RevenueCat’s sandbox / test API key (the separate key intended for sandbox/testing). That setup works as well — I can load offerings and complete test purchases the same way What RevenueCat (SDK / dashboard health) reports: Product monthly is configured in RevenueCat. Warnings that products aren’t approved in App Store Connect yet and that the default offering has configuration issues. Apple’s product state: WAITING_FOR_REVIEW. The SDK still states that test purchases are possible. What App Review reports: After onboarding a new business account, “Activate subscription” leads to an error (plans don’t load / purchase path fails). Review suggested an app code issue. Why this is confusing: Locally, both RevenueCat key modes I tried (production and sandbox/test) work with Apple Sandbox on the device. The submitted build uses the production RevenueCat key. Review still sees a failure. Questions: For IAP in WAITING_FOR_REVIEW, should App Review always use an Apple Sandbox account to test subscriptions until the product is fully approved? Is it documented that StoreKit may not return products during review without Sandbox while the product remains WAITING_FOR_REVIEW? Has anyone else seen “works locally (prod + sandbox RevenueCat keys + Apple Sandbox) but Review fails” with the same WAITING_FOR_REVIEW state? Thanks for any official documentation or similar threads.
Replies
1
Boosts
0
Views
87
Activity
2w
Technical scope of Default Dialer App in EU: Access to Cellular Audio Stream for AI Services
Hello, I am researching the technical feasibility of developing a Default Dialer App for the EU market using the specific entitlements granted under the Digital Markets Act (DMA). Our primary goal is to implement a Cellular/VoLTE-based calling system—not mVoIP—and we need to clarify whether it is possible to provide features such as STT (Speech-to-Text) and Call Summarization, which require In-call Audio Recording. Regarding the Default Dialer App Entitlement in the EU, I would like to clarify the following: Access to Raw Audio Stream: When an app is granted the Default Dialer status in the EU, does it gain programmatic access to the downlink and uplink audio streams of a cellular/VoLTE call for recording purposes? LiveCommunicationKit & Recording APIs: Does LiveCommunicationKit (or any related framework for iOS 26) provide specific APIs for a third-party dialer to capture native telephony audio? Entitlement Scope for Partners: If an EU-based partner obtains the necessary entitlements, can those entitlements be used to grant our application the authority to process cellular calls and access the associated audio data? Recommended Implementation: Are there any Apple-sanctioned methods or specific frameworks for implementing call recording for AI-driven services within the scope of the new EU-specific regulations? We need to confirm these technical boundaries to establish the implementation scope with our EU partners. Any guidance on whether a third-party app can technically and legally record cellular calls under these specific conditions would be greatly appreciated. Thank you. Access to Raw Audio Stream: When an app is granted the Default Dialer status in the EU, does it gain programmatic access to the downlink/uplink audio streams of a cellular call for recording purposes? LiveCommunicationKit & Recording: Does LiveCommunicationKit provide any specific APIs or delegates that allow a third-party dialer to capture call audio, or is the recording still restricted by the system’s sandbox? Entitlement Scope: If our EU partner obtains the necessary entitlements, can they authorize our application to handle the cellular call processing entirely, including the access to telephony audio data? AI Service Implementation: Are there any Apple-recommended ways to implement AI features (STT, Summarization) within a Default Dialer App without violating current iOS security architectures? We need to provide a clear "Feasibility Report" to our EU partners during upcoming meetings. Any technical guidance on whether a third-party app can legally and technically record cellular calls under this new EU-specific policy would be extremely helpful. Thank you.
Replies
2
Boosts
0
Views
97
Activity
2w
In-App Purchase works in TestFlight but fails during App Review (Apple can't complete purchase)
Hello, I have an issue with In-App Purchases during App Review. In TestFlight and Sandbox, everything works correctly: Products are loaded Subscriptions are visible Purchase completes successfully However, Apple reports that the purchase fails during review. My subscriptions are: Created and active in App Store Connect Attached to the app version Paid Apps Agreement accepted I also added all required information (price, duration, EULA, privacy policy). Why would purchases work in TestFlight but fail during App Review? Thank you for your help.
Replies
1
Boosts
0
Views
73
Activity
2w
Best practice for replacing deprecated sem_init/sem_wait in a cross-platform threading layer on macOS (arm64)
Hi all, I'm working on a cross-platform runtime that manages a pool of threads (think game engine / emulator style... dozens of guest threads mapped 1:1 to host pthreads). It was originally written for Linux and Windows and we're now porting to macOS on Apple Silicon. We've hit a wall with a deadlock on macOS and traced it back to our use of POSIX unnamed semaphores (sem_init / sem_wait / sem_post) for thread suspend and resume. We were unaware these have never actually been implemented on macOS, sem_init silently returns -1 with ENOSYS and then sem_wait just hangs forever. That explains our deadlock. The tricky part is how we use them. Our suspend mechanism works by sending SIGUSR1 to a target thread via pthread_kill. The signal handler then calls sem_wait to block the thread in place until another thread calls sem_post to resume it. So whatever we replace sem_init/sem_wait with needs to be safe to call from inside a signal handler. From what I can tell: dispatch_semaphore_wait is not documented as async-signal-safe pthread_cond_wait is also not async-signal-safe os_sync_wait_on_address looks promising but requires macOS 14.4+ which is a pretty high floor We could spin on a std::atomic with .wait() / .notify_all() but I've seen reports of high wake latency (up to 15ms) in libc++'s implementation on macOS My questions: What's the recommended way to block a thread inside a signal handler on macOS? Is there an async-signal-safe wait primitive I'm missing? Would restructuring to avoid blocking in the signal handler entirely be the better approach? For example, having the signal handler just set an atomic flag and then checking it at yield points — would that be the expected pattern on macOS? For the non-signal-handler suspend/resume paths, is dispatch_semaphore_t the right replacement for sem_t, or is there something better suited for high-frequency thread synchronization in 2026? Separately, we're also using ucontext (makecontext/swapcontext) for a fiber system on macOS and hitting issues on native arm64, it works under Rosetta but breaks natively. We have a setjmp/longjmp + manual stack pivot backend we can switch to. Is there any plan to fix or un-deprecate the ucontext functions on arm64, or should we just move off them permanently?
Replies
2
Boosts
0
Views
141
Activity
2w
The APNs delay to send notification on iOS 26.4
In my VoIP app, we use StartRing and StopRing via VoIP push to my app. But recently, I found some disordered VoIP notifications, my VoIP app received the StopRing push before the StartRing push. Examples: Server log: // send StartRing startring: - Apr 9, 2026 @ 14:54:43.255 .."pushType":"voip","priority":10, ... // send StopRing stop-ring Apr 9, 2026 @ 14:54:47.645 ..."pushType":"background","priority":5,"... VoIP app log: // receive StopRing 2026-04-0909:54:48.858 CDT : INFO : [RcRtc] [0x1feeba1c0] [PushNotificationParser]call push notification handled. action: StopRing telephony session id: s-a0dd8601926c7z19d72bbf8b9z1e62ec10000 sid: 178503189447188 // receive StartRing 2026-04-0909:54:49.524 CDT : INFO : [RcRtc] [0x1feeba1c0] [PushNotificationParser]call push notification handled. action: StartRing telephony session id: s-a0dd8601926c7z19d72bbf8b9z1e62ec10000 sid: 178503189447188 Then we can see the StartRing send first, but received in the app after the StopRing. The StartRing took abunt 6s to send and the StopRing took about 1s. So I guess there is an issue in the APNs part on iOS26.4. We saw there is a peak after iOS26.4 and iOS 26.4.1 than old iOS versions. Thanks.
Replies
8
Boosts
0
Views
434
Activity
2w
How to install and manage Network Extension in case of GUI-less application?
Hello, I am working on a DLP solution for macOS that relies on the Network Extension (NETransparentProxyProvider) for network traffic analysis. Could you please clarify: is it technically possible and officially supported to use a LaunchAgent as the container app to install and manage the Network Extension? If not, what is the recommended approach in case of GUI less application? Thank you in advance.
Replies
6
Boosts
0
Views
323
Activity
2w
External Purchase Link Entitlement RU - 500 Internal Server Error
Hello, We are a Russian developer attempting to enable the StoreKit External Purchase Link Entitlement for our app. According to Apple’s documentation, this entitlement is required to provide external purchase links in Russia. However, the official request page consistently returns a 500 Internal Server Error: https://developer.apple.com/contact/request/storekit-external-entitlement-ru Steps we tried: Different browsers (Safari, Chrome, Edge) Different networks and VPNs Multiple developer accounts The error persists in all cases. We have already opened a support case (Case #102864703080), but Developer Support advised us to post here for technical guidance. Questions: Is there an alternative way to submit the entitlement request while the page is unavailable? Can Apple confirm whether this is a known issue and if a fix is in progress? Are manual submissions via the general Contact Us form accepted for this entitlement? Screenshots of the error are attached. Thank you in advance for any guidance.
Replies
0
Boosts
0
Views
44
Activity
2w
Apple Watch companion app keeps uninstalling
Hello, I’m developing an Apple Watch companion app for my swimming application and the app keeps uninstalling/disappearing from Apple Watch. I have a specific Scheme to install it to my watches, it appears there, I can debug but after a while it disappears. It’s my first app for this device but it doesn’t seem normal to me. any idea?
Replies
1
Boosts
0
Views
62
Activity
2w
NEURLFilter Not Blocking urls
Hi I tried to follow this guide https://developer.apple.com/documentation/networkextension/filtering-traffic-by-url I downloaded the sample app and put our pir service server address in the app. The service is already running and the app is connected to the pir service but the url is still not blocked. We tried to block example.com. Is there anything that we need to do in iOS code? This is the sample when there's dataset This is the sample when there's no dataset
Replies
1
Boosts
0
Views
105
Activity
2w
MapKit SwiftUI Map with .standard(elevation: .realistic) falls back to 2D in globe mode, while .hybrid(elevation: .realistic) remains 3D
Overview When using SwiftUI Map with .standard(elevation: .realistic) and a globe-style presentation, the map unexpectedly renders as a flat 2D map instead of a 3D globe / realistic terrain view. In the same view, switching to .hybrid(elevation: .realistic) preserves the expected 3D globe behavior. This appears to be a rendering bug or regression specific to the .standard style under globe mode, not an app-level issue. The issue is reproducible in my app’s competition map screen and has also been reported by other developers online. Steps to Reproduce Create a SwiftUI Map. Bind it to a MapCameraPosition. Apply a standard map style with realistic elevation: .mapStyle(.standard(elevation: .realistic)) Configure the UI so the user can switch between: standard + globe hybrid + globe Zoom out / interact with the map in globe mode. Expected Results Map with .standard(elevation: .realistic) should continue to render with globe / 3D realistic terrain behavior, consistent with realistic elevation support and similar to .hybrid(elevation: .realistic). Actual Results When the map style is .standard(elevation: .realistic) in globe mode, the map falls back to a flat 2D-looking representation. Changing the same map to .hybrid(elevation: .realistic) restores the expected 3D globe rendering. Regression Unknown, but this appears to be unintended behavior because: realistic elevation is intended to provide realistic terrain / 3D map rendering, and there are no overlays in this map configuration that should intentionally force the map into a flat representation. Minimal Relevant Code From My App private enum CompetitionMapMode: String, CaseIterable { case satellite case explore func mapStyle(look: CompetitionMapLook) -> MapStyle { switch self { case .satellite: return .hybrid(elevation: look.elevation) case .explore: return .standard(elevation: look.elevation) } } } private enum CompetitionMapLook: String, CaseIterable { case globe case flat var elevation: MapStyle.Elevation { switch self { case .globe: return .realistic case .flat: return .flat } } } Map(position: $cameraPosition, selection: $selectedMapItemID) { UserAnnotation() ForEach(mapDisplayItems) { item in Annotation( item.title, coordinate: item.coordinate, anchor: .bottom ) { mapAnnotationView(for: item) } .tag(item.id) } } .mapStyle(mapModeSelection.mapStyle(look: mapLookSelection)) Why I Believe This Is a Framework Bug The same Map instance renders correctly in 3D when using: .hybrid(elevation: .realistic) but falls back to 2D with: .standard(elevation: .realistic) under globe mode. This suggests the issue is tied specifically to the .standard rendering path in SwiftUI Map / MapKit, rather than camera state, annotations, or location handling. My map does include annotations, but it does not add overlays that would intentionally flatten realistic terrain. Environment Xcode: Xcode 26.4 (17E192) SDK: SDK Version 26.4 (23E237) Device: iPhone 17 Pro iOS version: iOS 26.5 Beta 2 Reproducibility: Always App type: SwiftUI app using MapKit Map Additional Notes The issue is visible in a production app screen, not only a toy sample. The problem appears style-specific: .standard(elevation: .realistic) → incorrect 2D fallback .hybrid(elevation: .realistic) → expected 3D behavior This makes standard map style unusable for globe presentation in my app.
Replies
1
Boosts
0
Views
127
Activity
2w
What is ~/.CFUserTextEncoding used for?
The file ~/.CFUserTextEncoding contained a string which I can't understand. It's recreated when a user log in. I had found that the result of CoreFoundation.CFStringGetSystemEncoding() is affected by the content of this file. What is this file used for?
Replies
2
Boosts
0
Views
113
Activity
2w
Shortcuts: Can not access submenu of inserted variables inside of newly created dictionaries on mac
While I was creating a shortcut using the dictionary function I encountered a bug. When creating a new dictionary to store the date and some other stuff I set a value to the current date variable. I went to change the date format to one I preferred I was unable to access the submenu to do so. To figure out what was going on I did some testing and here is what I found: You can't access the submenu of any inserted variable This only happens in newly created dictionaries You can be fix the dictionary by simply closing and opening the shortcut This bug does not happen on Iphone How to make this bug happen: Open any shortcut Create a new dictionary Add a variable in the value field You can no longer access the sub menu to edit the variable.
Replies
1
Boosts
0
Views
115
Activity
2w
Live Activity Stops Updating After 30 Seconds in Background During Audio Playback
Hi I developed a music app that plays offline audio and displays lyrics using Live Activities. According to ActivityKit documentation, Live Activities can be updated from the background. However, in my case, updates stop after ~30 seconds when the app goes to the background or the device is locked. Important points: The app continues running in the background (audio playback works fine using AVAudioSession with .playback) Background code execution is working as expected Only the Live Activity stops updating I am not using push updates since this is an offline app. Is there any limitation or requirement for updating Live Activities continuously in the background during audio playback? Audio Session Configuration let session = AVAudioSession.sharedInstance() try session.setCategory( .playback, mode: .default, options: [.mixWithOthers] // ✅ DO NOT interrupt other audio ) try session.setActive(true) print("✅ [AudioSession] Activated with mixWithOthers") } catch { print("❌ [AudioSession] Error: \(error)") } Live Activity Update Methods guard let activity = getLiveActivity(for: recordID) else{ print("⚠️ No Live Activity found for recordID: \(recordID)") return } guard activity.activityState == .active else { print("⚠️ Activity is not active") return } Task { let content = ActivityContent( state: state, staleDate: Date().addingTimeInterval(60 * 60 * 12), relevanceScore: 1.0 ) await activity.update(content) print("✅ Live Activity updated with ActivityContent") } }
Replies
0
Boosts
0
Views
196
Activity
2w
File Provider: case-insensitive collision check prevents mounting case-sensitive remote filesystems correctly
When a File Provider extension (NSFileProviderReplicatedExtension) mounts a Linux server via SFTP, remote directories containing files that differ only in case (e.g., "README" and "readme") are not represented correctly. The framework silently renames one file locally via the before-bounce mechanism, even though the extension reports both items with distinct identifiers and correct filenames. NSFileProviderActions.h states: "Collision checks should be case insensitive even if the filesystem or file provider might allow two coexisting filenames differing only by their case." This check runs in the framework before writing to disk. Placing the domain on a case-sensitive APFS volume via NSFileProviderDomain(displayName:userInfo:volumeURL:) does not help — the volume passes eligibility but the collision check still applies. This breaks any File Provider extension that mounts case-sensitive filesystems where case-variant filenames are common (especially git repositories). Is there any way to opt out of the case-insensitive collision check per domain? A supportsCaseSensitiveNames property on NSFileProviderDomain would solve this.
Replies
2
Boosts
0
Views
179
Activity
2w
Subscription failure in 26.4, 26.4.1
We have a user from Asia whose subscription failed to be detected by our app. On 26.4. They also tried revoking the yearly subscription and activating a monthly. Payment ok and the device reported that the subscription is active. Our code relies on Transaction.currentEntitlements in StoreKit, which seems to be broken, at least for this user. None of these worked: Installing iOS 26.4.1 Reinstalling our app Logging out and in from iCloud. Hard device reset Full iOS reinstall. User finally gave up and got a refund. I am reporting here in case other apps experienced similar problems. This discussion mentions that a regression in 26.4 might have contributed to the issue which is supposed to be fixed in 26.4.1. ( https://developer.apple.com/forums/thread/820562?answerId=883682022#883682022 ) The issue may have persisted or left the entitlements corrupt for this particular user. Hoping that the issue is resolved so we do not have more problems in the future.
Replies
2
Boosts
0
Views
108
Activity
2w
CKRecordZone deleted when second user accepts zone-wide CKShare
I'm seeing a critical issue where a custom CKRecordZone is consistently deleted server-side when a second iCloud account interacts with a zone-wide CKShare. I've reproduced this 20+ times across two days and have exhausted every client-side fix I can think of. Looking for guidance on what might be going wrong. Setup Container: iCloud.com.cohencooks (production app on App Store) Custom CKRecordZone in owner's private database Zone-wide CKShare(recordZoneID:) (iOS 15+ zone sharing) SwiftData with ModelConfiguration(cloudKitDatabase: .none) — no automatic CloudKit mirroring Acceptance via CKFetchShareMetadataOperation → CKContainer.accept(metadata) (no UICloudSharingController) Minimal reproduction // 1. Owner creates zone + share let zone = CKRecordZone(zoneName: "MyZone") try await privateDB.save(zone) let share = CKShare(recordZoneID: zone.zoneID) share[CKShare.SystemFieldKey.title] = "My Share" as CKRecordValue share.publicPermission = .readWrite let (results, _) = try await privateDB.modifyRecords(saving: [share], deleting: []) // 2. Owner pushes ~500 records to zone — all succeed // 3. Second user (different iCloud account) accepts share let metadata = try await container.shareMetadata(for: shareURL) try await container.accept(metadata) // 4. Owner's next CKFetchRecordZoneChangesOperation → zoneNotFound (code 26) // Zone is permanently gone. allRecordZones() confirms deletion. What I observe Three distinct failure patterns depending on configuration: Pattern 1 — publicPermission = .readWrite, no addParticipant: Zone dies instantly after acceptance. First push notification shows cloudkit.share changed (zone alive), second push notification returns zoneNotFound. The non-owner never successfully wrote anything. Pattern 2 — publicPermission = .none with explicit addParticipant: Zone survives acceptance and 2-3 minutes of bidirectional sync (non-owner pulls 578 records, pushes meal plans back). Then a push notification arrives and the zone is gone. This is dramatically better than Pattern 1 but still fails. Pattern 3 — Container destabilization after repeated testing: After 20+ create/delete cycles in one day, zones die from the owner's own push notifications — no second device involved at all. The container appears to enter an unstable state. Inconsistent state after deletion Here's something that might help narrow this down. After one of the zone deletions, I deployed the same build to a second device signed into a different iCloud account that had previously accepted the CKShare. Without sending a new invite, that device found the "Household" zone via allRecordZones() on sharedCloudDatabase — it could pull all 578 records, push updates, and the share URL still resolved. Meanwhile, the owner device (zone creator) gets "zone not found" from both allRecordZones() and direct recordZone(for:) on privateCloudDatabase. So it looks like the zone is deleted from the owner's private database, but the CKShare and zone records remain accessible to participants via the shared database. Participants can still read and write as if nothing happened — the owner just can't see the zone anymore. This also creates a recovery problem — when the owner creates a new zone with the same name, it gets a new CKShare URL, but the participant is still connected to the old "ghost" zone. The two sides are permanently split. Does this mean the zone deletion is happening through a path that doesn't properly clean up the sharing infrastructure? Is this expected behavior when a zone-wide CKShare's zone is deleted, or does it suggest the deletion is happening through an abnormal server-side path? What I've ruled out Hypothesis Test Result publicPermission = .readWrite Changed to .none + explicit addParticipant Zone survived longer but still eventually deleted Zone name tombstoning Tested 6 fresh names never used in this container All eventually deleted Non-owner writes causing deletion Gated ALL non-owner push methods (recipe, meal plan, grocery, photo, event) Zone still deleted database.save(share) vs modifyRecords Switched to modifyRecords(saving:deleting:) Zone still deleted NSPersistentCloudKitContainer interference Removed all Core Data CloudKit code Zone still deleted Double share acceptance Fresh app install, single acceptance only Zone still deleted Advanced Data Protection Neither account has ADP enabled Not the cause Programmatic vs system acceptance Tested both container.accept() and tapping share link Zone still deleted CloudKit Dashboard No ZoneDelete operation is visible in the logs. All operations are ZoneFetch, ZoneChanges, RecordQuery, RecordFetch. I do see EphemeralGroup operations targeting the custom zone — not sure what generates those. Comparison with working apps I compared my implementation with another app that uses the exact same zone-wide CKShare(recordZoneID:) pattern with publicPermission = .readWrite and programmatic acceptance — and it works. The main difference is that app uses CKSyncEngine (iOS 17+) rather than raw CKFetchRecordZoneChangesOperation / CKModifyRecordsOperation. Could CKSyncEngine be handling something internally that prevents this issue? Questions Is there a known interaction between zone-wide CKShare(recordZoneID:) acceptance and zone lifecycle that could cause zone deletion? Does CKSyncEngine handle zone-wide sharing differently than manual CKFetchRecordZoneChangesOperation + CKModifyRecordsOperation? What generates EphemeralGroup operations in CloudKit Dashboard? Could these trigger a zone delete? After 20+ zone create/delete cycles in a container, is there a server-side rate limit or tombstone mechanism that would destabilize new zones? Is the inconsistent state I described (zone gone from owner's private DB but still accessible from participant's shared DB) expected behavior, or does it indicate the deletion is happening through an abnormal path? Is the custom programmatic acceptance flow (CKFetchShareMetadataOperation → container.accept()) fully supported for zone-wide shares, or does it require UICloudSharingController? Any guidance would be greatly appreciated. This is blocking multi-user functionality for our app (mesa, a meal planning app on the App Store). Single-user sync works perfectly — the issue only manifests when a second iCloud account is involved. Environment: iOS 18.4.1, Xcode 16+, Swift, SwiftUI
Replies
1
Boosts
0
Views
140
Activity
2w
CKRecordZone deleted when second user accepts zone-wide CKShare
I'm seeing a critical issue where a custom CKRecordZone is consistently deleted server-side when a second iCloud account interacts with a zone-wide CKShare. I've reproduced this 20+ times across two days and have exhausted every client-side fix I can think of. Looking for guidance on what might be going wrong. Setup Container: iCloud.com.cohencooks (production app on App Store) Custom CKRecordZone in owner's private database Zone-wide CKShare(recordZoneID:) (iOS 15+ zone sharing) SwiftData with ModelConfiguration(cloudKitDatabase: .none) — no automatic CloudKit mirroring Acceptance via CKFetchShareMetadataOperation → CKContainer.accept(metadata) (no UICloudSharingController) Minimal reproduction // 1. Owner creates zone + share let zone = CKRecordZone(zoneName: "MyZone") try await privateDB.save(zone) let share = CKShare(recordZoneID: zone.zoneID) share[CKShare.SystemFieldKey.title] = "My Share" as CKRecordValue share.publicPermission = .readWrite let (results, _) = try await privateDB.modifyRecords(saving: [share], deleting: []) // 2. Owner pushes ~500 records to zone — all succeed // 3. Second user (different iCloud account) accepts share let metadata = try await container.shareMetadata(for: shareURL) try await container.accept(metadata) // 4. Owner's next CKFetchRecordZoneChangesOperation → zoneNotFound (code 26) // Zone is permanently gone. allRecordZones() confirms deletion. What I observe Three distinct failure patterns depending on configuration: Pattern 1 — publicPermission = .readWrite, no addParticipant: Zone dies instantly after acceptance. First push notification shows cloudkit.share changed (zone alive), second push notification returns zoneNotFound. The non-owner never successfully wrote anything. Pattern 2 — publicPermission = .none with explicit addParticipant: Zone survives acceptance and 2-3 minutes of bidirectional sync (non-owner pulls 578 records, pushes meal plans back). Then a push notification arrives and the zone is gone. This is dramatically better than Pattern 1 but still fails. Pattern 3 — Container destabilization after repeated testing: After 20+ create/delete cycles in one day, zones die from the owner's own push notifications — no second device involved at all. The container appears to enter an unstable state. What I've ruled out Hypothesis Test Result publicPermission = .readWrite Changed to .none + explicit addParticipant Zone survived longer but still eventually deleted Zone name tombstoning Tested 6 fresh names never used in this container All eventually deleted Non-owner writes causing deletion Gated ALL non-owner push methods (recipe, meal plan, grocery, photo, event) Zone still deleted database.save(share) vs modifyRecords Switched to modifyRecords(saving:deleting:) Zone still deleted NSPersistentCloudKitContainer interference Removed all Core Data CloudKit code Zone still deleted Double share acceptance Fresh app install, single acceptance only Zone still deleted Advanced Data Protection Neither account has ADP enabled Not the cause Programmatic vs system acceptance Tested both container.accept() and tapping share link Zone still deleted CloudKit Dashboard No ZoneDelete operation is visible in the logs. All operations are ZoneFetch, ZoneChanges, RecordQuery, RecordFetch. I do see EphemeralGroup operations targeting the custom zone — not sure what generates those. Comparison with working apps I compared my implementation with another app (Spotbook) that uses the exact same zone-wide CKShare(recordZoneID:) pattern with publicPermission = .readWrite and programmatic acceptance — and it works. The main difference is that app uses CKSyncEngine (iOS 17+) rather than raw CKFetchRecordZoneChangesOperation / CKModifyRecordsOperation. Could CKSyncEngine be handling something internally that prevents this issue? Questions Is there a known interaction between zone-wide CKShare(recordZoneID:) acceptance and zone lifecycle that could cause zone deletion? Does CKSyncEngine handle zone-wide sharing differently than manual CKFetchRecordZoneChangesOperation + CKModifyRecordsOperation? What generates EphemeralGroup operations in CloudKit Dashboard? Could these trigger a zone delete? After 20+ zone create/delete cycles in a container, is there a server-side rate limit or tombstone mechanism that would destabilize new zones? Is the custom programmatic acceptance flow (CKFetchShareMetadataOperation → container.accept()) fully supported for zone-wide shares, or does it require UICloudSharingController? Any guidance would be greatly appreciated. This is blocking multi-user functionality for our app (mesa, a meal planning app on the App Store). Single-user sync works perfectly — the issue only manifests when a second iCloud account is involved. Environment: iOS 18.4.1, Xcode 16+, Swift, SwiftUI
Replies
3
Boosts
0
Views
144
Activity
2w
how to get process exec event
Besides using esf, are there any other ways to perceive process start events in real time? Libbsm is currently disabled by default
Replies
1
Boosts
0
Views
92
Activity
2w
Bug: Finder/AppleScript interaction
I have created a simple AppleScript that makes a folder named with today’s date. For many years, it has worked fine except: If I run the script (from a script app in the menu bar), then dump files into the folder, then change the colored “Tag” on the folder, I get a Finder error - An unexpected error occurred (error code -8076) - and I have to force-quit the Finder to complete the color tagging. If it change the tag before dumping the files, no error occurs. (Please hold the “Doctor, it hurts when I do this …” jokes.) This error has persisted through many macOS major iterations, including Tahoe 26.4.1. Prolly a Finder bug, but not sure. Here’s the source, for anyone interested. set dateStr to getDate() --display dialog dateStr tell application "Finder" activate try --set thisFolder to (the target of the front window) as alias set thisFolder to (the target of the front window) as string make new folder at thisFolder with properties {name:dateStr as string} on error errMsg display dialog "ERROR: " & errMsg end try end tell on getDate() set theDate to current date set theYear to year of theDate as string set theNewYear to third character of theYear & fourth character of theYear set theMonth to month of theDate as number as string if length of theMonth = 1 then set theMonth to "0" & theMonth as string end if set theDay to day of theDate as string if length of theDay = 1 then set theDay to "0" & theDay as string end if return theNewYear & " " & theMonth & " " & theDay as string end getDate
Replies
3
Boosts
0
Views
162
Activity
2w
Xcode 26 Causing StoreKit Fiasco for macOS?
I submitted my last macOS application with IAP on Oct. 23rd, 2025. I was able to test-purchase a non-consumable product with the StoreKit configuration file at that time. These days, every time I test a new macOS application with the configuration file, a purchase process fails. The thing is they all now fail if I test the store with existing applications that were once working. Xcode shows the following debugging error. Purchase failed with error: systemError(Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service created from an endpoint was invalidated from this process." UserInfo={AMSDescription=An unknown error occurred. Please try again., AMSURL=http://localhost:53272/WebObjects/MZBuy.woa/wa/inAppBuy, NSDebugDescription=The connection to service created from an endpoint was invalidated from this process., AMSStatusCode=200, AMSServerPayload={ All my iOS apps don't exhibit the same problem. This StoreKit fiasco only happens for macOS applications. And I'm thinking that it all started to occur after I began using Xcode 26. Not a single line of code has changed. But the applications that were once able to process IAP all now fail. And I'm suspecting that it's Xcode 26 that is responsible for this failure. My Xcode version is 26.2, by the way. Any macOS application developer experiencing the same problem?
Replies
5
Boosts
1
Views
229
Activity
2w