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.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Strange behavior of Speakerbox (or CallKit) with headset operation
I've run Speakerbox(https://docs-assets.developer.apple.com/published/8e99045a90e2/MakingAndReceivingVoIPCallsWithCallKit.zip) to check the behavior of CallKit. When there was one active call and one on hold and another call was received, the behavior was defferent depending on whether I operated it from a headset or not. No headset or operated from CallKit screen When "End & Accept" tapped: the active call is hung up, and the received call is answered. When "End Held & Accept" tapped: the held call is hung up, the active call is held, and the received call is answered. Operated from headset Answer opeation cannot be performed for unknown reasons Disconnect operation caused that all calls other than the one on hold are hung up and the held call is unheld. Hold operation caused that the active call is held and the received call is answered. (Strangely, there are two held calls.) And when I toggle calls at this time, one of the two on hold is hung up for unknown reasons. I tried changing the settings of CXProviderConfiguration and CXCallUpdate, and changing the options in the Audio Session category, but it did not improve. I checked CXActions occurring, and it was as follows. (Call A = held call, Call B = active call, Call C = received call) Disconnect (or Answer?) operation (lacking CXEndCallAction for Call A) CXEndCallAction for Call B CXAnswerCallAction for Call C CXEndCallAction for Call C <- weird CXSetHeldCallAction for Call A onHold=false Hold operation (lacking lacking CXEndCallAction for Call A) CXSetHeldCallAction for Call B CXAnswerCallAction for Call C Toggle calls CXSetHeldCallAction for Call C onHold=true CXSetHeldCallAction for Call A onHold=false CXSetHeldCallAction for Call B onHold=false <- weird CXEndCallAction for Call B
1
0
107
Jul ’25
When Using Callkit audio doesn't have permission to work
I am creating a voip app, I am trying to use call kit to answer calls, however audio doesn't seem to work when using callKit when looking at the systems logs I see no server connection when checking background audio state, won't allow background audio! background audio processAllowed = 0 for displayID com.apple.TelephonyUtilities no server connection when checking background audio state, won't allow background audio! background audio processAllowed = 0 for displayID {my app id} I have the plist entries for background ui modes for voip, audio, fetch and background notifications along with the backgrounds modes for Voip, Audio, AirPlay, and Picture in Picture, Background notifications. I am unsure what to do about this, like my reading of the error is I can't use audio cause I am not connected to a server, but like is it any server, Am I suppose to connect to the voip call before setting up audio, I am not sure how to do that.
1
0
280
Feb ’25
Universal Links: Is the 'paths' Array Deprecated in Favor of 'components' in AASA?
Hello! I'm working with universal links in my app and have configured the /.well-known/apple-app-site-association file. Currently, I use the paths array in this file to define URL routing rules. However, I’m struggling to find up-to-date documentation on the pattern syntax supported by the paths field. "paths": [ "/page/*", "NOT /page/*/subpage" ] Could someone clarify: Is the paths array still officially supported, or is it deprecated in favor of the newer components dictionary (as referenced here https://developer.apple.com/documentation/bundleresources/applinks/details-swift.dictionary/components-swift.dictionary)? If paths is still valid, where can I find documentation for its pattern-matching capabilities? I want to ensure my implementation aligns with Apple’s current best practices. Thank you!
1
0
140
Mar ’25
Shielding all apps
I am trying to create an app that allows users to opt in and apply a shield to all of their apps during a specified amount of time each day, but they can always turn the shield off from our app or directly ignore the shield for 1 minute from a shield button. It is important that the user doesn't choose what apps to apply a shield to through the activity picker, as some users might not apply it to all apps. Currently I am doing everything I described in my app and shield all apps and webdomain categories with this: store.shield.applicationCategories = .all() store.shield.webDomainCategories = .all() But the, store.shield.applicationCategories = .all(), seems to block everything except for some system apps like Messages, Phone, FaceTime, Maps, Clock, Settings, Safari, Find My, Clock, Compass, Health, etc. It does block some system apps like Weather, Photos, Camera, Measure, App Store, etc. I know I can fully block applications from it's bundle identifier but I do not want to remove apps from the home screen. I only want to apply a shield to all of them. I have read every apple documentation possible about this and can't see a way to do it, currently how I am doing it seems to be the best way but it is still not enough. Even blocking a specific category token taken from the activity picker won't apply to some system level applications under it unless you get all the application tokens and apply the shield by applications and not category. I am really looking for help to see if there is something I can do to achieve my app's goal.
1
0
156
Jul ’25
Couple simple suggestions to make WKExtendedRuntimeSession a lot better
I just launched my watch app with alarms using WKExtendedRuntimeSession, as an api I wish it was possible to: set a small title/message on the alarm ui itself, right now all it displays is the "Alarm from < app name >" with the app icon, but it would be nice to be able to set a short 1~2 line message below it as well! be able to read the current scheduled date, right now it's only possible to know it's scheduled.
2
0
97
Jul ’25
CSSearchableItemAttributeSet is missing recordingYear
I'd like to set the recordingYear in my Spotlight File Importer extension but the property is missing from CSSearchableItemAttributeSet e.g. in the resulting in mdls I'd like to see: kMDItemRecordingYear = 2008; This would allow me to search in Finder by the recording year criteria. There is a recordingDate property and I tried setting it to Date that only has a year but it didn't work. It just resulted in this: kMDItemRecordingDate = "2008-01-01 00:00:00 +0000";
0
0
80
Mar ’25
macOS app can be excluded from the ‘Screen Time’ statistics?
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.
0
0
179
Feb ’25
A Summary of the WWDC25 Group Lab - watchOS (Part 2)
At WWDC25 we launched a new type of Lab event for the developer community - Group Labs. A Group Lab is a panel Q&A designed for a large audience of developers. Group Labs are a unique opportunity for the community to submit questions directly to a panel of Apple engineers and designers. Here are the highlights from the WWDC25 Group Lab for watchOS (part 2). 7. For widget (complication) update budgets, is there an overall budget or are scheduled update separate from APNS updates? For context I have a complication that is updated on a fixed schedule (every 20 min), but there can be times of the day that are more "interesting" where pushes make sense. Like timeline updates, the system budgets WidgetKit push notifications and delivers them opportunistically. You can use WidgetKit push notification updates as an addition to timeline updates. For more information, see Updating widgets with WidgetKit push notifications. 8. It seems like the new Control Center widgets can be sourced from either the iPhone or directly on the Watch. Can we control whether a control appears in the watch list, or will it always be a combination of all controls from both sources? iPhone controls will be automatically available on the companion Apple Watch, even if they don’t have an associated watchOS app. When an iPhone control is tapped on the Apple Watch, the action is performed on the iPhone. Controls whose actions foreground the iOS app will not appear on Apple Watch. If a watchOS app has controls, no controls will appear on Apple Watch from the companion iOS app. 9. From UI/UX perspective, what are the current practices for Designing watchOS apps that feels native. The WWDC23 session Design and build apps for WatchOS 10 covers the details of watchOS design principles and how to apply them in your app using SwiftUI. A lot of SwiftUI APIs, such as NavigationSplitView, vertical tab view, list view, and etc, already implement the look and feel native to watchOS. 10. When adopting the new design system on watchOS, it seems like the main place we will use the glass effect is for our buttons in toolbar? Standard buttons in system apps seem to continue to use a flat appearance and full width. We leave the choice to you – You can use the new GlassButtonStyle API or .buttonStyle(.glass) to apply the liquid glass material to buttons. Learn when to use the Liquid Glass styles in Get to know the new design system. 11. Is there any way to gracefully migrate extensions when their bundleIDs have to change? e.g., converting a multi-target watch app to single-target, which drops the .watchkitextension from both the app and WidgetKit ext bundleIDs Updating a watchOS app to single-target is covered in TechNote TN3157: Updating your watchOS project for SwiftUI and WidgetKit. Xcode provides a tool that can do the update automatically, and the technote describes the details about how to use it and how to clean up the project after the automatic update. If there's something that technote doesn't address, please reach out to us on the Developer Forums. 12. What is the status of WatchConnectivity? Is that still the preferred way for iOS + watchOS communications? The Watch Connectivity framework is still supported, and is appropriate for the communication between an watchOS app and its companion iOS app. The systems also provide other APIs for the apps to exchange data. For example, watchOS supports Apple Push Notification service (APNs). If data for your widget changes on your server, your widget can receive a WidgetKit push notification, and update accordingly. That’s the preferred mechanism for widget updates.
0
0
130
Jul ’25
Universal Links not working with subdomains without AASA on root domain
Hi all, I'm trying to set up universal links for my app but it's not working. What I want: cogover.com → Safari (website) - NOT my app *.cogover.com (any subdomain like abc.cogover.com) → My app What I did: Added applinks:*.cogover.com in Xcode Put AASA files on all subdomains They work fine (checked with curl) Problem: All links still open in Safari, not my app. I do not put AASA on my root domain cogover.com because I don't want open my app with root domain. I have checked TN3155: Debugging universal links | Apple Developer Documentation but it only say about universal link works with both root domain and subdomains. Weird thing I found: I checked how Salesforce does it - their *.force.com subdomains work perfectly. But when I tried to check their setup, (https://force.com/.well-known/apple-app-site-association) doesn't seem to exist either! So how does theirs work? Even stranger - Apple's CDN has their file cached at (https://app-site-association.cdn-apple.com/a/v1/force.com) but the actual domain doesn't serve it. Can Apple's CDN have a file cached even if it's not on the website anymore? Thanks for any help!
0
0
154
Jul ’25
On-Demand Resources Update
Hi, I have a question about On-Demand Resources, I tried to put some bundles into the Initial Install Tags and Download Only On Demand, and I uploaded the build to TestFlight, then I tried to make 2 builds, and the sample is like this: Build A: Initial Install Tags have 100 Tags. Download Only On Demand have 5 Tags. Build B: all contents of Initial Install Tags are the same as in Build A. Download Only On Demand are the same as Build A but I added 5 more tags, so the total is 10 tags, 5 tags that are the same as Build A and 5 new tags. Then I tried to download Build A for the first time which is in TestFlight, and it runs normally, Initial Install Tags are downloaded when the main app is downloaded and Download Only On Demand is downloaded when I request the tag. However, when I tried to update to Build B which is in TestFlight, why are the Initial Install Tags deleted? and why should it be downloaded via request? not when the main app is downloaded? has anyone ever experienced something like this? Thanks!
0
0
253
Feb ’25
Core Spotlight searching only for title
I just adding a way to donate my app's data to Core Spotlight using CSSearchableIndex, but I'm finding that spotlight is only searching for the title of the CSSearchableItem I create. I know the index is working, because it always finds the item through the title property, but nothing else. This is how I'm creating the CSSearchableItem: - (CSSearchableItem *) createSearchableItem { CSSearchableItemAttributeSet* attributeSet = [[CSSearchableItemAttributeSet alloc] initWithContentType: UTTypeText]; attributeSet.title = [self titleForIndex]; attributeSet.displayName = [self titleForIndex]; attributeSet.contentDescription = [self contentDescriptionForIndex]; attributeSet.thumbnailData = [self thumbnailDataForIndex]; attributeSet.textContent = [self contentDescriptionForIndex]; CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier: [self referenceURLString] domainIdentifier:@"com.cjournal.cjournal-Logs" attributeSet:attributeSet]; item.expirationDate = [NSDate distantFuture]; return item; } There's a lot of confusing tips around which say specifying the 'textContent' should work, and/or setting the displayName is essential, but none of these are working. Is there something I'm missing with my setup? Thanks.
0
0
131
Jun ’25
AlarmKit can we automatically acknowledge the alarm or set a time period the alarm should alert for
My use case is a Repeat Timer app. The user can configure a repeating timer, say: 8 minutes with 3 sets So I would like to configure either 3 alarms (8mins, 16mins, 24mins) or a repeating alarm (8mins every 3 mins) BUT... I would like the first and second alarms to break through but only for 5 seconds for example, and then stop (so the user doesn't need to tap the screen to silence the alarm). I don't think this is possible after reading the API docs, but am asking the question anyway. Thanks for any advice or guidance here, and happy WWDC!
0
0
109
Jun ’25
Localization issue for appname(Singapore)
I need to display a different app name based on the user's region/language. This setup works correctly for regions like the United Kingdom, Australia. However, for Singapore, the app always falls back to the UK version (en-GB) instead of picking the localized name defined under en-SG. Interestingly, system alerts like location permission and app deletion do use the en-SG localization correctly. Could you help identify why the app name isn't picking up the en-SG version and suggest how we can resolve this?
2
0
122
Jun ’25
Watch Ultra 2: How Do I list my app on Auto-Launch Settings
I'm developing a watchOS app for Watch Ultra 2 that implements water detection using CMSubmersionManager. I would like to make it appear in the Auto-Launch settings menu, but my app is not appearing in the settings (Settings &gt; General &gt; Auto-Launch &gt; When Submerged &gt; Selected App).... What additional steps should I take to make this work? Environment Device: Watch Ultra 2 watchOS: 11.2 Xcode: 16.0 Implementation I have implemented the following as per documentation: Added the Shallow Depth and Pressure capability and Entitlement. Added the "Shallow Depth and Pressure" capability Confirmed entitlement "com.apple.developer.submerged-shallow-depth-and-pressure" was automatically added Note: I initially thought I should use "com.apple.developer.submerged-depth-and-pressure" (without "-shallow") since I'm targeting a maximum depth of 6 meters, but this resulted in compilation errors. ref: https://developer.apple.com/forums/thread/740083 ref: https://developer.apple.com/forums/thread/735296 Added NSMotionUsageDescription and WKBackgroundModes &lt;key&gt;NSMotionUsageDescription&lt;/key&gt; &lt;string&gt;Required for water detection&lt;/string&gt; &lt;key&gt;WKBackgroundModes&lt;/key&gt; &lt;array&gt; &lt;string&gt;underwater-depth&lt;/string&gt; &lt;/array&gt; According to the documentation: "It also adds your app to the list of apps that the system can autolaunch when the wearer submerges the watch." What additional steps are needed to make the app appear in Auto-Launch settings? Has anyone successfully implemented this feature?
3
0
947
Feb ’25