Hi all,
I’m testing Subscription in my Flutter app on a real iOS device (iPhone 16 Pro with iOS 18) via TestFlight. I’ve set everything up as required, but I still get this error:
flutter: Found products: []
If everything works perfectly when StoreKit configuration is used in Xcode, but not via TestFlight.
All my Subscriptions are approved with the same ID.
Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
right now it looks like the app type must follow the guidelines like Messenger app, Navigate app, and Music app only. What about the Automotive app itself, What is the flexibility of it?
We have an app for service cars for one brand (officially)(car users around 1m+). but we looking to merge the experience between outside the car and inside the car. Can we top up some features on the app to share some information that is a part of the car like trip calculation or car info display on the screen? or services time to notice them?
And following that question can we know about the exact spot or brief from Apple car play for now and next-gen?
Or can we work with your team closely as a partner? to make things happen and develop it to be a flagship product, we can share some data and talk about it with real insight.
I'm sitting at my house and trying to sign my test device out of my apple ID so I can sign into a Sandbox user, but now I have an hour to kill because of this terribly broken "security" feature that thinks it's in an unfamiliar location, despite being at the only location it's ever known. Looks like I'll just be disabling this feature all together.
Especially as a device with Developer Mode enabled, which gets reset regularly, there should be additional options here. Come on!
My app monitors users heart beats and if critical reading is noticed, it auto -dials 911 for emergency and ambulance help.
I was under the impression that auto-dial may not be permitted or possible on the platform.
Can anyone confirm and provide any additional guidance on if it is possible in the newer SDK/API stack or using any 3rd party service ?
Thank you in advance!!
Topic:
App & System Services
SubTopic:
Automation & Scripting
Tags:
Mobile Core Services
Watch Connectivity
WatchKit
ios構成プロファイルの制限のallowCloudPrivateRelayのプライベートリレーの制御とRelayペイロードの機能は関係がありますか?
それとも別々の機能でしょうか?
↓
s there a relationship between the private relay control in the iOS configuration profile restriction allowCloudPrivateRelay and the functionality of the Relay payload?
Or are they separate features?
Topic:
App & System Services
SubTopic:
Networking
Dear community,
Context
My company operates in the European Union, where not so long ago there appeared the possibility to accept an ["Alternative Terms Addendum for Apps in the EU"] (https://developer.apple.com/contact/request/download/alternate_eu_terms_addendum.pdf), which, among others, gives us the possibility to use an alternative payment provider, other than Apple's In App Purchase PSP system (ref: Apple docs). My company did accept it and was granted the StoreKit External Purchase Entitlement (com.apple.developer.storekit.external-purchase) entitlement, with which we integrated a different PSP, so now we want to incorporate the reporting to Apple's External Purchase Server API. We are currently integrating with the External Purchase Server API and have encountered a couple of issues I would appreciate clarification on:
Question 1
Is there a way to retrieve an overview or summary of the current subscription states on Apple’s servers as a result of the submitted reports to External Purchase Server API? Specifically, I would like to verify the expected outcomes before the monthly invoice is issued by Apple and to understand the subscription states for the test users I used during this process and for future reference as well.
Question 2
In one scenario, I initiated a one-year subscription, and in the middle of its period, I submitted a RENEWAL for one month with a higher price.
I expected the request to fail due to overlapping periods and/or pricing conflicts, but both submissions were accepted without error.
Do you have an idea about:
What happens at the end of the renewed month?
Will the subscription continue with the renewed (higher) amount, revert to the original (lower) annual rate, or be canceled?
Where can I view the final state and billing plan for that subscription?
Thank you for your assistance, we are looking forward for any kind of help or information regarding this topic.
My CoreSpotlight extension seems to exceed the 6 MB memory limit. What’s the best way to debug this?
I've tried to attach the debugger on the Simulator but the extension seems to be never launched when I trigger the reindex from Developer settings. Is this supposed to work?
On device, I am able to attach the debugger. However, I can neither transfer the debug session to Instruments, nor display the memory graph. So I've no idea how the memory is used.
Any recommendations how to move forward? Is there a way to temporarily disable the memory limit since even with LLDB attached, the extension is killed.
Team-scoped keys introduce the ability to restrict your token authentication keys to either development or production environments. Topic-specific keys in addition to environment isolation allow you to associate each key with a specific Bundle ID streamlining key management.
For detailed instructions on accessing these features, read our updated documentation on establishing a token-based connection to APNs.
Hi,
We’re developing a BLE peripheral device and encountered a connection issue when connecting two devices (Device A and Device B) simultaneously to an iOS device.
Problem:
On iOS 18, we are experiencing occasional BLE timeouts and disconnections when both devices are connected at the same time.
On iOS 16, we did not encounter this issue under the same conditions.
What we’ve tried:
Adjusted the connection interval from 30ms to 15ms.
This seems to have improved stability somewhat.
However, we still observe intermittent timeout/disconnection issues.
Questions:
Are there any known changes in BLE connection handling or timing constraints in iOS 18?
Are there recommended connection parameter settings (interval, latency, timeout, etc.) for multi-device BLE connections in iOS?
Is there a way to debug or log more details about the disconnection reasons on the iOS side?
Any guidance or suggestions would be greatly appreciated.
I'm trying to implement live caller id PIR server in python and I have an issue related to evaluation key config. I don't receive the POST /key request even if I try to install the extension on new device and I had this error in device system logs:
error 11:21:30.663022+0200 ciphermld requestData(byKeywords:shardIds:clientConfig:) threw an error: CipherML.CipherMLError.missingSecre t Ke y
I think the reason why the evaluation key is not generated is related to this error but I'm not sure. It might be also related to HE params - I tried with the same params as in swift server example with plaintext_modulus=17 and it works, but for plaintext_modulus=65537 on the same device the system doesn't send me the evaluation key. Is there a limitation that restricts the evaluation key generation for some HE params?
There is how the entire config object that I retrieve looks like:
{
"configs": {
"Live-C aller-ID-Lookup. TestLiveCallerI D.iden tity": {
"pir_config": {
"encry ption_p aram eters": {
"pol ynomial_deg ree": "4096",
"plaint ext_mo dulus": "65537",
"coeff icient_m oduli": [
"134176769",
"268369921",
"268361729"
],
"secu rity_le vel": "SECU RITY LEVEL QUANT UM128",
"h e_sc heme": "H E_SC HEM E_B F V"
},
"shard_configs": [
{
"num_entries": "2",
"entry_size": "55991",
"dimensions": [
"2",
"1"
],
"shard_id": ""
}
],
"keyword_pir_params": {
"num_hash_functions": "2",
"sharding_function": {
"sha256": {}
}
},
"algorithm": "PIR _ALGO RITHM _MUL_PIR",
"batch_size": "2",
"evalu ation_ke config_hash": ""
},
"config_id": ""
}
},
"key_info": [
{
"timestamp": "1738660849",
"key_config": {
"encryp tion_par ameters": {
"polynomial_degree": "4096",
"plaintex t_mo dulus": "65537",
"coeffic ient_m oduli": [
"134176769",
"268369921",
"268361729"
],
"secu rity_level": "SECUR ITY_LEVEL_QU ANTUM128",
"he_sc heme": "HE_SC HEME_BFV"
},
"gal ois_e lements": [
20 49,
40 97
],
"has _rel in_key": true
}
}
]
}
PS evaluation key data is just a placeholder, but anyway it should be skipped cause of expired timestamp
More logs:
```language
default 11:21:30.535865+0200 ciphermld Running rotation task for ["Live-Caller-ID-Lookup.TestLiveCallerID.identity"]
info 11:21:30.535953+0200 ciphermld Skipping groups that manage their own networking: <private>
default 11:21:30.537007+0200 ciphermld Request to fetchConfigs has started for useCases '["Li ve-Caller-ID-Lookup.TestLiveCallerID.identity"]', userId: '<private>', existingConfigIds: '["id"]'
default 11:21:30.542174+0200 ciphermld Request to queries-batch has started for userId: '<private>', length: 28350
default 11:21:30.655914+0200 ciphermld Request to fetchConfigs has finished, response length: 230
default 11:21:30.656182+0200 ciphermld Received configurations: 1 usecase(s), 1 key(s) for group 'Live-Caller-ID-Lookup.TestLiveCallerID.identity'
debug 11:21:30.660868+0200 ciphermld Skipping non-active key: timestamp: 1738660849
key_config {
encryption_parameters {
polynomial_degree: 4096
plaintext_modulus: 65537
coefficient_moduli: [134176769, 268369921, 268361729]
security_level: Quantum128
he_scheme: BFV
}
galois_elements: [2049, 4097]
has_relin_key: true
}
error 11:21:30.662982+0200 ciphermld No key for use-case 'Live-Caller-ID-Lookup.TestLiveCallerID.identity'
error 11:21:30.663022+0200 ciphermld requestData(byKeywords:shardIds:clientConfig:) threw an error: CipherML.CipherMLError.missingSecre t Ke y
default 11:21:30.663824+0200 com.apple.CallKit.CallDirectory <private> XPC request complete, results(0) error:Error Domain=CipherML.CipherMLError Code=32 "missing secre t ke y" UserInfo={NSLocalizedDescription=missing secre t ke y}
default 11:21:30.972372+0200 ciphermld Request to queries-batch has finished response, length: 0
default 11:21:30.974711+0200 com.apple.CallKit.CallDirectory <private> XPC request complete, results(1) error:(null)
default 11:21:36.161964+0200 com.apple.CallKit.CallDirectory <private> Sending XPC request
default 11:21:36.163149+0200 com.apple.CallKit.CallDirectory <private> Sending XPC request
default 11:21:36.169931+0200 ciphermld requestData(byKeywords:shardIds:clientConfig:) method was called
default 11:21:36.170448+0200 ciphermld requestData(byKeywords:shardIds:clientConfig:) method was called
default 11:21:36.174001+0200 ciphermld Cached: 0 / Missing: 1
error 11:21:36.174997+0200 ciphermld No userId or secre t Ke y for use-case '.Lve-Caller-ID-Lookup.TestLiveCallerID.identity'. Running rotation task'
default 11:21:36.175075+0200 ciphermld Running rotation task for ["Live-Caller-ID-Lookup.TestLiveCallerID.identity"]
info 11:21:36.175240+0200 ciphermld Skipping groups that manage their own networking: <private>
default 11:21:36.177700+0200 ciphermld Request to fetchConfigs has started for useCases '["Live-Caller-ID-Lookup.TestLiveCallerID.identity"]', userId: '<private>', existingConfigIds: '["id"]'
default 11:21:36.179914+0200 ciphermld Request to queries-batch has started for userId: '<private>', length: 28350
default 11:21:36.336051+0200 ciphermld Request to fetchConfigs has finished, response length: 230
default 11:21:36.336308+0200 ciphermld Received configurations: 1 usecase(s), 1 key(s) for group 'Live-Caller-ID-Lookup.TestLiveCallerID.identity'
debug 11:21:36.341522+0200 ciphermld Skipping non-active key: timestamp: 1738660849
key_config {
encryption_parameters {
polynomial_degree: 4096
plaintext_modulus: 65537
coefficient_moduli: [134176769, 268369921, 268361729]
security_level: Quantum128
he_scheme: BFV
}
galois_elements: [2049, 4097]
has_relin_key: true
}
error 11:21:36.356497+0200 ciphermld No key for use-case 'Live-Caller-ID-Lookup.TestLiveCallerID.identity'
error 11:21:36.356669+0200 ciphermld requestData(byKeywords:shardIds:clientConfig:) threw an error: CipherML.CipherMLError.missingSecre t Ke y
default 11:21:36.357075+0200 com.apple.CallKit.CallDirectory <private> XPC request complete, results(0) error:Error Domain=CipherML.CipherMLError Code=32 "missing secre t ke y" UserInfo={NSLocalizedDescription=missing secre t ke y}
default 11:21:36.625701+0200 ciphermld Request to queries-batch has finished response, length: 0
default 11:21:36.626749+0200 com.apple.CallKit.CallDirectory
Hello everyone,
I am currently developing a media playback app and want to achieve the following functionality:
Display multiple media contents in the Now Playing control center, instead of just showing the currently playing one.
Allow users to select and switch between different contents, such as videos, music, etc., from the control center.
However, I have encountered some issues:
Although I have integrated the Now Playing control center, it only displays the current media being played.
I would like to display multiple selectable media contents (such as a video list, music list, etc.) in the control center, similar to what is done by some media player apps, and allow users to switch between them.
I’ve tried the following methods:
Using MPNowPlayingInfoCenter to update the current playing media information.
Attempting to set MPNowPlayingInfoPropertyPlaybackQueueCount to show multiple items in the queue, but it doesn’t seem to work.
Can anyone provide guidance on how to display multiple media contents in the Now Playing control center? Any experienced developers who could share their insights or suggestions would be greatly appreciated!
Thank you very much for your help and feedback!
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Platform and Version
iOS
Development Environment: Xcode 16.2.0, macOS 15.3
Run-time Configuration: iOS 18.3, 17.x
Description of Problem
We have started migrating some of the app’s core functionality over to App Intents.
Our first release of App Intent support focused on two settings a user can modify on their Bose products, Audio Modes and Immersive Audio, giving users the ability to modify these settings via Siri and shortcuts. The implementation uses two separate shortcuts for each setting type, with each shortcut supporting a single phrase for Siri each: “Change my Bose mode to ” and “Change my Bose immersive audio to ”. Each shortcut uses their own App Intent, and each App Intent has support for optionally providing both a product and a setting when performing the intent. Failing to provide a device, which happens when the intent is performed via Siri, simply auto selects a currently connected Bose product. Failing to provide a setting, like in cases where a user says “Change my Bose ” without providing a setting will simply have Siri confirm the setting the user wants to change before changing the setting. We are using AppEntity to identify a Bose product for both App Intents. Because the App Intent for the Audio Modes setting has a larger number of supported values (up to 15 maximum), we are also using AppEntity to identify these settings. We are using AppEnum to identify available settings for the Immersive Audio App Intent, as only 3 static values are supported.
Our original implementation of App Intent support had quite a few phrases supported for each shortcut. We had explicit support for direct synonyms of the verb “Change” in other phrases, supporting words like “Switch” and “Set”. We also had support for words that are like the word “Change”, but not directly related, like the word “Toggle” for instance. We also had support for phrases with or without the setting in each phrase. However, early on we had a lot of trouble with phrase detection with Siri. Siri had a hard time identifying what shortcut was being requested, as well as not being able to identify what settings the user was providing for the setting parameter of each App Intent. While researching potential fixes for this issue, we found a response to a thread in the Apple forums (https://developer.apple.com/forums/thread/759909) that seemed to indicate that Siri phrase recognition was very much an aggregate process. With the total number of phrases supported combined with the available settings for each phrase further compounding the total number of phrases Siri needs to learn to recognize for each shortcut. So, to hopefully improve Siri phrase detection, we added logic to limit the amount of Audio Mode settings supported based on what Audio Modes the user had setup on their Bose products. But, more importantly, we limited the number of explicit phrases supported for each shortcut to just a single phrase. In our testing, not only did this improve phrase recognition, but support for synonyms like “Set” or “Switch” seemed to implicitly still be recognized by Siri.
The issues we ran into with Siri phrase detection above has us a bit concerned about scaling App Intent support to other settings and features for our products in the future. Our app supports the ability to modify a large number of settings on their Bose products, with support constantly expanding to new products as they are released. Our roadmap for App Intent support was initially very ambitious, supporting much more than just the two settings mentioned above. But our initial experience with App Intents has us tapering our expectations a little bit as far as how much can be supported in total for App Intents.
One thing we also noticed is less than optimal display of default shortcuts in the Shortcuts app. The default shortcuts appeared like so, with shortcuts displayed based on available settings fro each shortcut:
However, we could not find a way to indicate to users that one particular section pertained specifically to the Audio Mode setting and the other to the Immersive Audio setting. The only information the user has to make this determination for themselves is the available settings (or shortcuts) for each. This may not be immediately clear to a new customer who might be using one of our products for the first time. This display of default shortcuts in the Shortcuts app has us wondering if our shortcuts implementation is what is intended as far as support for the Shortcuts app is concerned. We did survey default shortcuts displayed by other third-party applications and they mostly dealt with navigation with a single section containing default options clearly indicating where the user can navigate with a shortcut. We couldn’t find an example of an application supporting the ability to change different setting types, with each setting type having their own available values for each.
So, to summarize the questions we have concerning App Intent support:
What can we do with our App Intents and Shortcuts implementation to guarantee optimal performance with Siri?
What is an ideal number of phrases to support for each Shortcut.
What limitations should we be placing as far as the total number of available settings for each Shortcut.
Are there phrases that might work better than others for what we’re trying to achieve with App Intent support?
i.e. Is “Change my Bose mode” or “Change my Bose immersive audio” a good phrase to use for this kind of functionality? Or should we be using different verbs or wording?
Assuming optimal support of each Shortcut above. What is a reasonable expectation as far as how many different supported shortcuts we can scale to support at the same time.
One issue we ran into early on was Siri confusing one shortcut with the other and triggering the wrong App Intent at times. While this was ultimately resolved, this outcome seems much more likely the greater the number of individual shortcuts supported.
Are there any recommendations on how to display these App Intents to customers as far as default shortcuts in the Shortcuts app is concerned?
Is what we currently display for default shortcuts in the Shortcuts app what was initially intended for third party support for App Intents?
If what we are currently displaying is expected, would it be possible to support the ability to provide additional context to each section of default shortcuts displayed? We would like to indicate to the user that one set of shortcuts pertains to the Audio Modes settings, and the other to Immersive Audio. Something along the lines of a section header like some of the first-party apps use.
Are there any recommendations or tips for supporting App Intents, particularly phrases for Siri, in other languages?
Hi there,
We have an app targeted for children and we want to use the SkAdNetwork to track installs for campaigns.
We don't want to track further in-app events (purchase etc.), just the install event.
We added the SDK to our Unity app, listed the network identifiers in the plist file, configured the external campaign according to their instructions, but struggle to see any events for several weeks now.
We see the following logs in the app:
Registering install attribution pingback.
Failed to migrate Install Attribution database schema from 17001 => 17400.
SkAdNetwork: No pingbacks found while attempting to register/update.
Error setting install attribution pingback registered for app: 1509727806, error: Error Domain=ASDErrorDomain code=1208
How can we debug this further? What does the error mean?
Thank you very much!
(I hope I posted in the correct forum topic. Apologies if not)
Topic:
App & System Services
SubTopic:
StoreKit
Is there any way I can get updates when I change CarPlay style settings?
I've tried CPSessionConfigurationDelegate.contentStyleChanged and CPTemplateApplicationSceneDelegate.contentStyleDidChange, but they always produce the same result.
When I choose:
Automatic -> I receive light in case of daylight;
Always Dark and Always Show Dark Map toggle on -> dark
Always Dark and Always Show Dark Map toggle off -> light.
But it seems to be wrong, b/c CarPlay's toolbar is still dark, and I receive light.
Is there a way to get a dark style when choosing Always Dark and Always Show Dark Map toggle off? Or at least get updates when the Always Show Dark Map toggle changes?
Hi,
We are using Firebase to configure APNs (Apple Push Notification Service) for sending push notifications. During local testing, the push notifications are received properly when the app is in the foreground or background. After TestFlight testing and passing review, we found that when the app is installed using the developer's Apple ID, push notifications are received correctly whether the app is in the foreground or background.
However, when the app is provided to other testers (using non-developer Apple IDs), notifications are only received when the app is in the foreground, and they are not triggered when the app is in the background or inactive state.
Request for Assistance:
Why, after TestFlight testing and passing review, does the app receive push notifications properly in the background when installed using the developer's Apple ID, but on other testers' devices, notifications are not received when the app is in the background?
Are there any differences in Apple ID types or device configurations (developer ID vs. regular tester ID) that could affect the behavior of push notifications in the background mode?
Do we need to apply any additional settings or permissions, particularly for handling background push notifications?
Are there any iOS version or device-specific limitations that could impact the proper delivery of background push notifications?
Additional Information:
The app is properly configured for APNs, and push notifications are being sent via Firebase.
In the developer's Apple ID test environment, the app receives push notifications properly whether it is in the foreground or background.
On other testers' devices, push notifications are only received when the app is in the foreground, and they are not received when the app is in the background.
All test devices have been verified to have notification permissions enabled, and Firebase configuration is correct.
I'm developing an iPad app and encountered a strange issue with external Bluetooth keyboards.
Issue:
I have a Bluetooth keyboard set to JIS layout in Settings > General > Keyboard > Hardware Keyboard > Keyboard Type.
If I connect the keyboard before launching the app, everything works fine, and the input follows the JIS layout.
However, if I launch the app first and then turn on the Bluetooth keyboard, the input behaves as if the keyboard is in ANSI layout, even though the settings still show JIS.
It seems like iPadOS defaults to ANSI if no external keyboard is connected when the app starts, and later connections do not update the layout properly.
Has anyone encountered a similar issue, and is there a programmatic way to ensure that the correct keyboard layout is applied after the keyboard is connected?
Any help or insights would be greatly appreciated!
Topic:
App & System Services
SubTopic:
Hardware
Howdy,
I'm trying to figure out how to replicate the following behavior for our app:
The system is able to ascertain that the Mac equivalent of some iOS app is installed locally, and it prevents notifications from being mirrored. However, I am unable to determine how this association is inferred. When I check our iOS app under this prefpane, the switch remains enabled and toggleable—we'd like to act like Slack here.
My initial assumption is that an app group containing both the Mac and iOS apps can be used to create the association; however, I would like to confirm that this is indeed the case before doing so. I'm not terribly confident about this.
Details:
The bundle identifiers of both apps do not match. This also applies to Slack; its iOS app is com.tinyspeck.chatlyio while its Mac app is com.tinyspeck.slackmacgap.
In our case, the iOS app's identifier is like com.company.app while the Mac app's identifier is com.company.app.desktop.
Both apps are signed with certificates that have matching team identifiers. The com.apple.developer.team-identifier entitlement is present on the Mac app.
The Mac app shares a keychain access group with the iOS app.
The Mac app is not sandboxed.
The Mac app is an Electron app.
The Mac app does not use APNs. It sends notifications "locally".
I currently only have the iOS app installed on my iPhone via TestFlight, if that matters.
Notification mirroring does work, but we'd like to forcibly disable this by associating the apps together.
To my knowledge, the iOS app makes use of both a UNNotificationServiceExtension and a UNNotificationContentExtension.
The iOS app currently doesn't have an assigned category (at least in Xcode). The Mac app is currently miscategorized as a developer tool (LSApplicationCategoryType = "public.app-category.developer-tools";), but that should be fixed.
(Redacted) bundle information for the Mac app:
CFBundleDisplayName = App;
CFBundleExecutable = "App Desktop";
CFBundleName = App;
Note that our CFBundleExecutable differs from the bundle's display name/name because we're currently migrating our users to a new version of the app that they'd likely want to live alongside the new one. The filename of the bundle itself is, similarly, App Desktop.app.
For the iOS app, to my knowledge, the CFBundleName and CFBundleDisplayName are App.
I am a macOS software developer using Xcode and Objective-C. I have a wallpaper app on the App Store, and recently, a few users have asked if the app can be excluded from the ‘Screen Time’ statistics. Is there a way to allow users to choose whether or not the app should appear in the ‘Screen Time’ tracking? I have already set LSUIElement to YES in the info.plist, but the app is still being tracked in ‘Screen Time.
Hello Apple Developer Community,
I’m working on creating a chart that combines Screen Time Usage data with Workout Time from HealthKit.
I’ve successfully implemented a DeviceActivityReportExtension to fetch Screen Time data and draw a chart. I’m also able to read HealthKit data from the main app.
However, I’m having trouble integrating the HealthKit data into the View generated by the DeviceActivityReportExtension. I’ve attempted to read HealthKit data directly from the extension , but this doesn’t seem to work, likely due to HealthKit access restrictions in extensions.
I also tied using a shared object to pass HealthKit data to the extension, but unfortunately this didn’t seem to work as expected.
I’d greatly appreciate any suggestions on how to successfully integrate HealthKit data into the extension-generated View. Has anyone dealt with a similar challenge or found a workaround for this?
Thanks in advance for your help!
I cannot test IAP using sandbox account that I logged on from settings, it keeps show my regular Apple ID when I try to test IAP from TestFlight
This issue frustrate me and bunch of my colleagues, we cannot manage our subscription when sandbox account is default choosing Apple ID
I've seen people complaining about this issue a lot
Any help on resolving this issue would be really appreaciated