I made an update to my app's code to make use of the new Contact access limited permission (CNAuthorizationStatusLimited), like so:
if (@available(iOS 18.0, *)) {
switch ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]) {
case CNAuthorizationStatusLimited:
<snip>
However, later I discovered there's another totally unrelated issue which only manifests when the app is built with XCode 16. It isn't a trivial change to workaround, so for now I would like to make a release to the app store which makes use of the new CNAuthorizationStatusLimited status but is built using XCode 15.
However, building with XCode 15 results in a "Use of undeclared identifier 'CNAuthorizationStatusLimited' error.
If the code were making use of a new API, I could workaround using a selector for example, however as this is an enum, is there Is there any workaround possible for this - or its just not possible to build using XCode 15 and the source code contain references to CNAuthorizationStatusLimited?
Post
Replies
Boosts
Views
Activity
I just received a message upon app submission saying
"Although submission for App Store review was successful, you may want to correct the following issues in your next submission for App Store review.
Invalid privacy manifest - The PrivacyInfo.xcprivacy file from the following path is invalid"
This is due to a 3rd party dependency being used by the app, but the thing is I was able to submit the app a few weeks ago, and a few months ago prior to that, and this warning wasn't present despite the exact same version of the 3rd party dependency being in those previous submissions as for the current submission.
As the deadline for including privacy manifests was earlier this year, and as the message says " you may want to correct the following issues in your next submission", then whats the point, is there any point in this message?
The wording doesn't even say must or should resubmit, it simply says "may like to".
Is there therefore any need to address this or not bother if the message just says "may like to"?
If I run an app with a message filter extension on < iOS 18 everything is as expected, if I run the same app, without any changes on iOS 18 then it doesn't work.
I've discovered that problems occur if the extension has the following code:
extension MessageFilterExtension: ILMessageFilterQueryHandling, ILMessageFilterCapabilitiesQueryHandling {
func handle(_ capabilitiesQueryRequest: ILMessageFilterCapabilitiesQueryRequest, context: ILMessageFilterExtensionContext, completion: @escaping (ILMessageFilterCapabilitiesQueryResponse) -> Void) {
let response = ILMessageFilterCapabilitiesQueryResponse()
response.transactionalSubActions = [.transactionalCarrier, .transactionalHealth, .transactionalPublicServices, .transactionalFinance, .transactionalWeather, .transactionalRewards, .transactionalOrders, .transactionalOthers, .transactionalReminders]
response.transactionalSubActions = [.transactionalFinance,
.transactionalOrders,
.transactionalHealth]
completion(response)
}
This code doesn't run on iOS 18, however the following code does run on iOS 18:
let response = ILMessageFilterCapabilitiesQueryResponse()
completion(response)
I downloaded several apps from the app store which provide message filtering, within the Message app they all had one thing in common, on < iOS 18 they all show 12 filtering categories, but within iOS 18 they only show 2. So it seems the issue is endemic and effects other apps, not just mine.
I've got an existing app using storyboards and would like to incorporate the new iOS 18 ContactAccessButton() and contactAccessPicker() into the GUI.
However, how can that be done? If I try to do something like add a UIView to a view controller in the storyboard, then ContactAccessButton can't be assigned to it (even though ContactAccessButton inherits from UIView).
Nor can a ContactAccessButton be used as a type within the Storyboard/the View Controller.
How do I go about integrating this new iOS feature into an existing app using Storyboards and view controllers?
When I run my app on iOS 18, the following gets logged to the XCode console.
error: Error reading commands from file lldbinit - file not found.
I've never heard of that file before. What is it, why is it needed, why does the app (unbeknown to me) try to read from it, and why is it missing?
In iOS 18 if a number is registered with CallKit to be blocked, then if that number is also in contacts, then the number isn't blocked.
If a user has added a number to their contacts, then in all probability they might not want the number blocked, so this might seem reasonable behaviour.
However the point is, this is new behaviour for CallKit in iOS 18, and its never been like this before going back several years to the very first release. Why suddenly change it now, after all these years, without notice nor documentation, and take away that option from the user, should for some reason, they want to block a number which is also in their contacts.
This is quite a disruptive change for apps using CallKit.
I have account holder/admin status for an Apple developer account.
I would like to add a user to the account and grant them the ability to be able to generate app ids, apply for entitlements, generate/edit provisioning profiles, register devices to an app id, upload the app to Testflgith etc. etc. for just one specific app.
However it seems this isn't possible.
If I add them with the App Manger role, then its possible to specify the particular app which they can manage, however the App Manager role hides the Certificates, App IDs, & Profiles section, meaning they are unable to do many of these things listed about.
If I change their role to Admin, then now the Certificates, App IDs, & Profiles section is now available to them, but then the apps automatically changes to all apps and its not possible to select just one.
This seems like a very common scenario that occurs, but its not possible to enable. Whereby company X wants to publish an app and sub-contracts the development of that app to company Y. It seems its not possible to register developers from company Y with the level of access required to develop the app without simultaneously limiting their powers to just one app.
You have a choice, give them all access to all apps, or insufficient access to just one app.
Is there something I've overlooking?
I would like to add both a Notification Service Extension and a Notification Content Extension to my application.
After reading some documentation and tutorials etc. I'm not clear if the Communication Notifications capability is needed or not.
If it is, should it get added to the App ID or the notification IDs, or both?
While searching I've seen more than one url form used for launching from an app into the iPhone's App Store app. Both of these work, but is one preferred to the other, if so why, or are they exactly equivalent?
let appStoreLink1 = "https://itunes.apple.com/us/app/apple-store/idNNNNN?mt=8"
let appStoreLink2 = "https://apps.apple.com/us/app/name-of-app/idNNNNN"
if let url = URL(string: appStoreLink1 or appStoreLink2), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: {(success: Bool) in
...
I have a requirement to launch an app from another app (there is no requirement to launch the app from a website), and if its not installed then for the user to be redirected to the app store to download the app.
The app already has a custom url scheme implemented, however the documentation and tutorials in this area are confusing and unclear.
In order to launch the app, the custom url scheme will provide that, however, in order to get the redirection to the app store then firstly does the custom url scheme have to be replaced with universal links?
Secondly, is it necessary to have a webpage that links to the app store? Is it possible to get this behaviour without having a website?
Is it the case that Apple doesn't provide this functionality and developers have to have the hassle of hosting a website purely just for the sake of redirecting to the App Store?
Hello
I have a few questions regarding the Live Caller ID lookup feature
First question:
The documentation for Live Caller ID Lookup says that "the system does not use private relay when the application is installed directly from XCode.This allows the application & the service deployment to be tested before filling out the onboarding form and setting up private relay."
What is the situation regarding development distribution signed .ipas? Would they be able to bypass the private relay too?
Second question:
Is there anyway an application could dynamically switch which blocking dataset gets used? The use case for this is providing the option to the user whether a set of numbers gets blocked or not.
If the OS makes a blocking lookup and an identity lookup, then if these always map to the same blocking dataset then it means the blocking behaviour is the same for every user there is.
That means whatever decisions the server makes as to what numbers to block applies to every user. Whether to block a number of not is a fuzzy decision, it would be good if users had the ability to decide for themselves if fuzzy numbers should be blocked or not rather than have that imposed upon them.
Third question:
It looks from the way things are set up that 2) is not actually possible. If that is the case then will it be permitted for two endpoints to be registered with Apple? (then the app could implement more than one Live Caller ID extension which provide different blocking behaviour)?
Thank you very much.
I have a real problem with XCode (15 and 16) which is that all the time it'll get stuck installing/attaching to an app.
It'll be working fine one minute, I can make a code change, build, and run the app (on hardware) and everything will be fine. But then make another change, build and run again and now XCode will get stuck saying "Installing app to phone" / "Attaching to app on phone".
If I click stop and try and run again now there'll be two "Installing app to phone" instances running, do it again and then there'll be three and so on.
If I quit XCode and relaunch it then it does not fix the issue, I have to terminate XCode and reboot the phone.
And then it'll be ok again, but only for about 10 minutes, but then it'll start doing the exact same thing again.
Its impossible to work like this, having to reboot the phone every 10 minutes or so.
Is there any solution or tricks? (is it possible to kill the hung task within XCode for example?)
In the documentation for the Contact Provider Extension
contact provider it says
Use the Contact Provider framework if your app manages its own contacts and wants to make them available in other apps that use the Contacts framework.
But how does an app manage its own contacts? What needs to be done differently if it manages its own contacts versus managing a user's contacts? Does the user still need to grant contacts access for example?
Is there a special group/domain that should be used (how) to add app contacts?
There's no mention of any of this that I can see in the documentation for CNContact or CNContactStore.
I'm getting confused reading conflicting information about Swift Packages (for example, many sources say its for distributing source code only, but Apple's documentation says a binary framework can be included in them).
What I would like to be able to do is to distribute a project as a binary to external customers (so they cannot see the source code) but distribute it as source code for internal consumption (so when developing a test app that uses the project, source code can be stepped through in the debugger etc.)
Is the feasible/easy?
Could a package manifest be created that can easily be flipped between creating a package containing source only, and a binary only. Or would it be better to have two separate manifests?
If a server is sending a push to an app, then how can it know whether it should be sending the push using the Apple sandbox push server, or the production server?
If the app is on the app store or testflight then it needs to be using the sandbox server, but if the app is being run via XCode interactively as devs are developing/testing then the push needs to be sent via the sandbox server.
But the server itself has no idea if the app was installed via Testflight/app store/XCode/ or a development .ipa. So the server can't know how to send the push.
The app has to send the push token to the server anyway, so the app could inform the server which environment it should be sent over. But then how can the app detect that itself?
A naive answer is to use #ifdef DEBUG to detect this, but that is incorrect. Which environment a push should be sent over is not correlated with that. For example an app could be being run with a debug scheme or a release scheme, but in both cases if the app is installed/running via xcode then the push environment has to be the sandbox.
So my question is, is there a way the app can detect which push environment a push should be sent over in order than it can instruct the server accordingly?