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

Can MailKit be used to manage existing messages?
I would like to create a MailKit extension that will allow me to manage my existing messages. I would like to move them around form folder to folder and reqad and update their headers to store some metadata that will be used by the extension. Looking at the documentation for MailKit suggests that I can only implement 4 types of handlers (content blocker, action handler, compose handler and security handler). I can’t see anything in the docs about being able to get a list of messages in the inbox and manipulate them. Am I missing something? I’d love to hear from someone who knows more about this topic before I get into a dead-end rabbit hole. cheers, -tomek
1
0
621
Jan ’25
Message Filter Extension - Query Parameters in ILMessageFilterExtensionNetworkURL
Hi, I'm implementing a Message Filter Extension and need clarification about the ILMessageFilterExtensionNetworkURL Info.plist key. Is it valid to include query parameters in the URL like: https://example.com/test?id=123 I want to make sure this approach will pass App Review before implementing it. The query parameter would be used to identify the client making the filtering request. Has anyone successfully used URLs with query parameters in their approved Message Filter Extensions? Any insights would be appreciated. Thanks!
1
1
352
Jan ’25
ManagedSettingStore limits and groups
So what's the point of being able to block unto 50 apps per ManagedSettingStore via store.application.blockedApplications (which works fine) until removing the blocked apps or clearing the store. Where the following occurs if you have a social networking group with more than 9 apps only 9 apps will go back into the group and all the others will go onto the springboard all jumbled if you end up with an empty group then tap into the group, it is removed then during the reset all apps are placed back on to the springboard
0
0
324
Jan ’25
Testing Local Experience for App Clip Not Working
I am trying to follow the guidance for testing a Local Experience, as listed in the Testing Your App Clip’s Launch Experience - https://developer.apple.com/documentation/app_clips/testing_your_app_clip_s_launch_experience documentation. I have successfully created my App Clip target, and can confirm that running the App Clip on my device does launch the App Clip app as I expected. Further, I can successfully test the App Clip on device, by setting the _XCAppClipURL argument in the App Clip's scheme. I would like to test a Local Experience. The documentation states that for testing Local Experiences; To test your app clip’s invocation with a local experience, you don’t need to add the Associated Domains Entitlement, make changes to the Apple App Site Association file on your web server, or create an app clip experience for testing in TestFlight. Therefore, I should be able to configure a Local Experience with any desired domain in Settings -> Developer -> Local Experience, generate a QR code or NFC tag with that same URL, and the App Clip experience should appear. I have taken the following steps; Built and run my App Clip on my local device. In Settings -> Developer -> Local Experience, I have registered a new experience using a URL prefix https://somewebsite.com Set my Bundle ID to com.mycompany.myapp.Clip, which exactly matches the Bundle Identifier, as listed in Xcode, under my App Clip target. Generated a QR code which directs me to https://somewebsite.com In theory, I believe I should be able to open the Camera app on my device, point the camera at the QR code, and the App Clip experience should appear. However, I received mixed experiences. 50% of the time, I receive a pop-up directing me to open https://somewebsite.com in Safari, the other 50% of the time, no banner or action occurs whatsoever. Is this an issue anyone has faced before, or have I pursued these steps out of order?
3
0
3.1k
Jan ’25
AppIntents Parameter requestValue not working in iOS 18 when parameter is not in parameterSummary
In iOS 18, the requestValue method no longer works when the parameter it is called on is not included in the parameterSummary of an AppIntent. This issue causes the app to fail to present a prompt for the user to select a value, resulting in an error with the message: Domain=NSCocoaErrorDomain Code=4099 "The connection from pid 40685 on anonymousListener or serviceListener was interrupted, but the message was sent over an additional proxy and therefore this proxy has become invalid." Steps to Reproduce: Create a simple AppIntent with the following code: import AppIntents struct Intent: AppIntent { static let title: LocalizedStringResource = "Intent" static var parameterSummary: some ParameterSummary { Summary("Test \(\.$category)") {} } @Parameter(title: "Category") private var category: CategoryEntity? @Parameter(title: "Hidden Category") private var hidden: CategoryEntity? @MainActor func perform() async throws -> some ReturnsValue<CategoryEntity?> { var result: CategoryEntity? do { result = try await $hidden.requestValue("Select category") // Doesn't work since iOS 18 as $hidden is not set in parameterSummary } catch { print("\(error)") } return .result(value: result) } } Run the code on a device with iOS 18. Observe that the requestValue method fails to present the selection prompt and instead throws an error. Expected Results: The app should successfully present a prompt for the user to select a value for the hidden parameter using requestValue, even if the parameter is not included in the parameterSummary. Actual Results: The app fails to present the selection prompt and throws an error, making it impossible to use requestValue for parameters not included in parameterSummary. Version/Build: iOS 18.0 Configuration: Tested on various devices running iOS 18. Is there a change in the API that I might have missed?
5
2
1.1k
Jan ’25
App disappears after pkg installation
We're running into an issue with our pkg bundle where the main .app file disappears after installation and wanted to see if anyone has an idea about what would cause it. We have a pkg bundle with three separate apps, one primary app and two supporting apps. We distribute this pkg bundle directly to our users, who will manually install it on their devices (rather than through the app store). The installation itself will usually complete without any issues, and we aren't seeing anything in the install or system logs indicating that it was removed afterward (our postinstall script checks that all of the files exist and are in the correct locations), but after the installation the main app disappears while the rest of the files (including the supporting apps) we lay down are still present. Sometimes it will fail with an error similar to this: 2024-10-02 09:43:07-04 MBA-L-8114 installer[9894]: Error getting application status info for file:///Applications/.hiddenfolder/app1.app: Error Domain=NSCocoaErrorDomain Code=260 "The file "app1.app" couldn't be opened because there is no such file." UserInfo={NSURL=file:///Applications/.hiddenfolder/app1.app, NSFilePath=/Applications/.hiddenfolder/app1.app, NSUnderlyingError=0x6000026a0d50 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}} This only happens on certain computers, but on those computers it will happen consistently. We have noticed that it seems to happen more often with computers that are MDM configured. So far we’ve investigated permissions issues with the build process, installation script issues, and signing/notarizing, but have not found anything that might cause this issue. We did verify that we’re setting BundleIsRelocatable NO in the plist file for our package, so in theory it shouldn’t be trying to move the app after installation (we don't see the main app anywhere on the device so macOS doesn't seem to be moving it). We have another post going into more technical detail here: https://developer.apple.com/forums/thread/769443
0
0
210
Jan ’25
Request / Get contactless payment permissions
Dear, I am starting to read the documentation about HCE payments and doing the first tests in my device. I have noticed that the only way to request contactless payment permissions is calling: NFCPresentmentIntentAssertion.acquire() And if it is the first time will prompt a popup asking the permissions and if not and the user denied the permission will throw the error systemEligibilityFailed. My doubt is, is there other way to ask the contactless permissions instead of using the acquire? Because I understand that the acquire method is mainly created to prevent the default contactless app from launching. So I assume that it is not a good practice to use some point in the app just for asking the permission, right? Or for the first time we can use it for that purpose? According to that, is there any way to get the current contactless payment permissions status, just as we can get it from the camera (AVCaptureDevice.authorizationStatus(for: mediaType: AVMediaType))? The main goal is to give to the user a good experience. First asking the permission in a specific screen that explain why we need this permission and if the user denies it show some information in a screen as we can do it with other services as camera, micro, location... Thank you
4
0
460
Jan ’25
Exact Extract of Text from PDF
The problem is that when I read out the text in a PDF with page.string or page.attributedString, the context of the lines is lost. Instead of TermA....23,45 TermB....2,13 in an index document TermA TermB 23,45 2,13 is issued. The context of the lines (and the sequence of the letters) is lost. Is there a way to read the text from a PDF line by line?
1
1
477
Jan ’25
FinanceKit/FinanceStore+FinancialDataAuthorization.swift:27: Fatal error: Process is not entitled
Received entitlement access from Apple yesterday, but I'm getting this error when trying to check app authorization: FinanceKit/FinanceStore+FinancialDataAuthorization.swift:27: Fatal error: Process is not entitled Code of interest: import Foundation import FinanceKit @MainActor class FinanceService: ObservableObject { private let store = FinanceStore.shared @Published private(set) var authorizationStatus: AuthorizationStatus = .notDetermined @Published private(set) var accounts: [Account] = [] @Published private(set) var transactions: [Transaction] = [] @Published private(set) var balances: [AccountBalance] = [] @Published private(set) var wallet: Wallet = Wallet() // Authorization func requestAuthorization() async { do { authorizationStatus = try await store.requestAuthorization() } catch { // If there's an error requesting authorization, set to denied authorizationStatus = .denied print("Error requesting authorization: \(error)") } } func checkAuthorizationStatus() async { do { print("Checking authorization status") authorizationStatus = try await store.authorizationStatus() print("Authorization status: \(authorizationStatus)") } catch { // If there's an error checking status, assume not determined authorizationStatus = .notDetermined print("Error checking authorization status: \(error)") } } } What I've done/checked: Info.plist is set properly, with NSFinancialDataDescription AND NSFinanancialDataUsageDescription both set In my entitlements, key com.apple.developer.financekit is set to financial-data I have am targeting an actual device (min. 17.6) I've followed the instructions here: [https://developer.apple.com/forums/thread/757973] to no avail. Any ideas?
1
0
335
Jan ’25
Is quitting the App programatically now allowed?
Hello, I know that in the past it was explicitly forbidden to programmatically end the app, but I cannot find the reference on the current guidelines. The only thing I found was this: https://developer.apple.com/library/archive/qa/qa1561/_index.html but this site has a box on top saying that is not being updated anymore. What is the current policy about this? Is it allowed now? Thank you! :)
1
0
299
Jan ’25
Unable to distribute watchOS only build
I don't see upload option for the App Store connect, can only export .ipa. Also having issues with Transporter, pasting error message here. Could not create a temporary .itmsp package for the app "Redacted.ipa". Unable to determine app platform for 'Undefined' software type. Is anyone else facing the same issue? I am using Xcode 15.
9
1
1.7k
Feb ’25
FinanceKit - authorization process is not entitled error
I'm currently experimenting with the latest Xcode beta 15.3 (15E5194e) and attempting to integrate FinanceKit](https://developer.apple.com/documentation/financekit) into my project. However, I've encountered a persistent issue where the app crashes upon attempting to read or request authorization, accompanied by the following error message: FinanceKit/FinanceStore+FinancialDataAuthorization.swift:52: Fatal error: Process is not entitled Upon investigation, I've found no evident entitlements for FinanceKit, despite exploring options like Apple Wallet. Furthermore, I thoroughly examined the info.plist for relevant privacy values but found nothing pertinent. Here's the code snippet that triggers the fatal error, whether it's the request or read function: I don't see anything in entitlements for FinanceKit (I tried Apple Wallet and that didn't make a difference). Additionally, I checked for relevant privacy values for the info.plist but again didn't see anything relevant. Here is the code to reproduce the error (note calling either function will result in the same fatal error): import FinanceKit import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() requestFinancePermission() // readFinancePermission() } private func requestFinancePermission() { Task { do { let status = try await FinanceStore.shared.requestAuthorization() } catch { print("Error: \(error)") } } } private func readFinancePermission() { Task { do { let status = try await FinanceStore.shared.authorizationStatus() } catch { print("Error: \(error)") } } } } I'm seeking clarification on whether FinanceKit is currently usable or if there are additional steps needed for proper integration. Any insights or suggestions would be greatly appreciated. Thank you!
12
1
2.4k
Feb ’25
Should weather from the following day at midnight be used for the current day?
I just noticed something really odd with WeatherKit. If the temperate at midnight of the FOLLOWING day is colder than all temps in the day you want weather for then WeatherKit will report that as the low temperature for the day even though it's a different day. Here it's reporting the lowest temp for Feb 6 is 22F. But that's a temp from Feb 7. I'm displaying lowTemperature and lowTemperatureTime from DayWeather as well as the HourWeather in these examples. I wasn't sure if this was working as designed or a bug. I can provide raw data from this example. ----daily formatted start weather for Feb 6 High 41° high at Feb 6 at 2 PM Low 22° low at Feb 7 at 12 AM ----daily formatted end Feb 6 at 12 AM 34° Feb 6 at 1 AM 35° Feb 6 at 2 AM 36° Feb 6 at 3 AM 36° Feb 6 at 4 AM 36° Feb 6 at 5 AM 34° Feb 6 at 6 AM 33° Feb 6 at 7 AM 33° Feb 6 at 8 AM 33° Feb 6 at 9 AM 33° Feb 6 at 10 AM 35° Feb 6 at 11 AM 36° Feb 6 at 12 PM 38° Feb 6 at 1 PM 40° Feb 6 at 2 PM 41° Feb 6 at 3 PM 40° Feb 6 at 4 PM 39° Feb 6 at 5 PM 37° Feb 6 at 6 PM 36° Feb 6 at 7 PM 33° Feb 6 at 8 PM 31° Feb 6 at 9 PM 29° Feb 6 at 10 PM 27° Feb 6 at 11 PM 24° Feb 7 at 12 AM 22°
2
0
318
Feb ’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
921
Feb ’25
Configuring a MacOS application using MDM preferences
Hello. I have a MacOS application to be distributed in a .pkg that is signed and notarized. For the application to work, it needs some settings defined by us (non-secret strings that differ per client). My thought has been to use a .mobileconfig to send these settings using the com.apple.ManagedClient.preferences PayloadType. I can see these settings land correctly into the /Library/Managed Preferences directory (in the correct domain) when distributed using Apple Business Essentials as the MDM. However, I cannot read the settings using NSUserDefaults OR CFPreferences in objective-c (i've tried with my app unsigned and signed, but not signed ant notarized so far). I've seen some posts here and there about managed preferences being deprecated, so I'm not sure if this is my issue or if i'm simply reading the preferences incorrectly. I'll admit the conflict of some of these posts has me a bit confused about how the preferences subsystem works / whether it should be used at all. I'm on MacOS 15.3. Two questions: Does anything stand out as to why I wouldn't be able to read these properties? Is there a better method I should be using to allow sending config via MDM to set application settings? Thanks in advance!
1
0
218
Feb ’25
Blocked calls are blocked but still appearing as unanswered calls in call history
I am using the Call Range Blocker App (App URL: https://apps.apple.com/in/app/call-ranger-spam-call-blocker/id1154832936) to block unwanted calls, so my phone doesn’t ring. However, despite being blocked, these calls still appear as unanswered calls in the call history, which is very frustrating. When users block a number, they expect to block all communication from that number, including call logs. When I contacted the app developer, I was informed that after iOS 18, blocked calls are still showing up as unanswered calls in the call history. I kindly request that Apple’s iOS development team look into this issue and address it in the next update. It is quite annoying to see blocked calls appear in the recent call history, and users would prefer not to have them show up at all. Thank you John
1
0
403
Feb ’25
TransferRepresentation, AppEntities and AppIntents
Hi, I am trying to understand how this mechanism integrates with shortcuts (and i guess siri + apple intelligence in near future) and other apps. Basic setup is an AppEntity that implements 'transferable' and is returning a DataRepresentation of 'text'. got an AppIntent returns a one of the 'entitities' and I'm simply trying to pass the result to initially email or another app using shortcuts. even with canned 'hello world' string being marshalled into DataRepresentation(.text) I am not seeing anything in usual system targets like email, messages, notes. It opens the app ok, but no text is present. (note: if I use an incorrect DataRepresentation type with email it'll flat out fail saying 'not correct 'text' type) What exactly do I need to do here and is there any example code I can look at? thanks
1
0
363
Feb ’25
Any workaround for expanding a large category in FamilyActivityPicker?
I’m developing a self-management app using Family Controls, but I’ve encountered a FamilyActivityPciker's crash due to an XPC(or UIRemoteView) issue when there are too many tokens(maybe 200+ items) in a category. This makes bad UX, so I’m looking for a workaround. (I guess that the crash reason is cross process memory limitations, such as App Extension 50MB memory limitation.) A lot of web domains contribute to increase the number of tokens, However, even after clearing Safari’s browsing history, the tokens displayed in the FamilyActivityPicker remains unchanged. Is there any workaround that a 3rd party developer can implement to address this issue? prevent FamilyActivityPicker crashes or reduce the number of web domain tokens? For example, if there’s a way to reset the web domain tokens shown in FamilyActivityPicker from the Settings app, I could offer a help to users. Does anybody have ideas? Expanding SNS Category (29 items) It succeeded. Expanding Productivity & Finance (214 items) It failed. The screen froze, then appears blank. When the number of items is around 100, the crash rate is 50%, but when the items are over 200, the crash rate is 100%. Search Bar Problem The search bar also has same problem. If the number of search results are small, it works good without any blank, but if there are a lot of search results (200+), the XCP crashes and the screen appears blank. Code to Reproduce import SwiftUI import FamilyControls struct ContentView: View { @State private var selection = FamilyActivitySelection() @State private var isPickerPresented: Bool = false var body: some View { VStack { Button("Open Picker") { isPickerPresented = true } } .familyActivityPicker(isPresented: $isPickerPresented, selection: $selection) } } Steps to Reproduce Prepare a category that has 200+ items Try to open the category in the picker The screen will freeze, then appears blank. Errors in Console [u EDD60B83-5D2A-5446-B2C7-57D47C937916:m (null)] [com.apple.FamilyControls.ActivityPickerExtension(1204)] Connection to plugin interrupted while in use. AX Lookup problem - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID:2164 ( 0 AXRuntime 0x00000001d46c5f08 _AXGetPortFromCache + 796 1 AXRuntime 0x00000001d46ca23c AXUIElementPerformFencedActionWithValue + 700 2 UIKit 0x0000000256b75cec C01ACC79-A5BA-3017-91BD-A03759576BBF + 1527020 3 libdispatch.dylib 0x000000010546ca30 _dispatch_call_block_and_release + 32 4 libdispatch.dylib 0x000000010546e71c _dispatch_client_callout + 20 5 libdispatch.dylib 0x00000001054765e8 _dispatch_lane_serial_drain + 828 6 libdispatch.dylib 0x0000000105477360 _dispatch_lane_invoke + 408 7 libdispatch.dylib 0x00000001054845f0 _dispatch_root_queue_drain_deferred_wlh + 328 8 libdispatch.dylib 0x0000000105483c00 _dispatch_workloop_worker_thread + 580 9 libsystem_pthread.dylib 0x0000000224f77c7c _pthread_wqthread + 288 10 libsystem_pthread.dylib 0x0000000224f74488 start_wqthread + 8 ) Error acquiring assertion: <Error Domain=RBSAssertionErrorDomain Code=2 "Specified target process does not exist" UserInfo={NSLocalizedFailureReason=Specified target process does not exist}>
7
5
2.2k
Feb ’25