Post

Replies

Boosts

Views

Activity

What is the point of thread-id/grouping in push notifications if grouping depends upon user preferences?
There's plenty of articles out there about programatically grouping push notifications. However I have tried setting the thread-id in the push payload when sending a push, or setting the threadIdentifier for a received push in a notification service extension to be the same for several pushes. But if within the iPhone Settings / Notifications the user selects to display pushes as List and turns off Notification Grouping, then each notification resulting from the push appears on its own separately. Is there something other than thread-id/threadidentifier that is used to programmatically group them? If not then whats the point of these as grouping and display is actually under the control of user.
1
0
97
Mar ’25
Inconsistent grouping of notifications
I'm sending push notifications to a notification extension, and within the extension setting the threadIdentifier to be the same. But I'm observing inconsistent grouping behaviour, and behaviour that changes over time. The general iPhone settings are to display notifications as a Stack, and the app settings are to show on lock screen, notification center and banners and the notification grouping is set to by app (changing it to automatic doesn't affect the behaviour below). Pushes are displayed on the lock screen grouped together, then if the device is roused and the screen swiped down to reveal the notification center then they are still grouped. So far so good. If the iphone is active then the notifications appear at the top of the screen, one by one, but in this case if there is a swipe down to reveal the notification center then the notifications are not grouped when displayed, but shown individually. But then if one waits a few minutes and then displays the notification center for a 2nd time, sometimes now they will be grouped, but sometimes not. Why are they not (always) being displayed as grouped in the notification center?
1
0
84
Mar ’25
Is it possible to embed dependencies within a .xcframework?
I'm creating a .xcframework in order to deliver an api/functionality to a customer for inclusion into an app. I'm doing it as a .xcframework as I want it to be a binary so that the source code isn't accessable. The xcframework has dependencies on modules which are installed via SPM (there are a few, an example is PhoneNumberKit) When I build the xcframework and then add it to a test program and invoke its api then there's a run time error saying "PhoneNumberKit/resource_bundle_accessor.swift:44: Fatal error: unable to find bundle named PhoneNumberKit_PhoneNumberKit" How can I build the xcframework so that its dependencies are included within it? (Stepping back a bit, is an xcframework an appropriate approach for this?)
1
0
96
Jun ’25
Binaries nested in frameworks - possible or not with iOS?
I'd like to determine, definitively, if nesting of "binaries" within other "binaries" is possible with iOS. I put binaries in quotes because I've read documentation/forum posts stating things like nested frameworks isn't supported in iOS. A framework is a binary isn't it, or contains one. So does a statement such as that apply specifically and only to nested frameworks, or does it also apple to other scenarios - such as a SPM binary integrated into a framework? Here's the specific scenario I'm seeking clarity on - suppose an SDK providing an API/functionality is built as an .xcframework and that SDK contains dependencies on two other components (Firebase, AlmoFire, RealmSwift, CocoaLumberjack, whatever etc.). Lets say the SDK has two dependencies X and Y and it integrates them via SPM. Q1: If there is an app A which integrates the SDK, and A doesn't use X and Y itself, then can X and Y be embedded within the SDK and thus opague to A? Is this possible in iOS? Q2: If A integrates the SDK as above, but additionally, it itself uses X and Y independently of the SDK, then is this situation possible in iOS? Presumably in Q1 the SDK needs to embed X and Y into the framework? While presumably in Q2 it should not - because the app will be and hence that would lead to duplicate symbols and potential undefined behaviour (and therefore X and Y's SPM package spec needs to specify dynamic?) I've been trying to get a clear picture of this for literally weeks and weeks, without reaching a clear conclusion. So some definitive answer would be very much appreciated.
1
0
130
Jun ’25
Equivalent of Android's SipAudioCall, SipManager etc.
I'm trying to find what/if the iOS equivalent to Android's Sip range of APIs is. For example SipAudioCall is for handling the audio calls, SipManager for initiating SIP connections. I'm aware of iOS's CallKit component and have read its documentation, however all it seems to provide basically is a listening mechanism for Voip Pushes indicating a Voip call request and a means of integrating Voip Calls with the native call screens/system. I can't see anything in the Callkit documentation or tutorials to do things like initiate a SIP connection, or register SIP identify/IP, or start a VoIP call, or actually manage an incomming VoIP call. Could somebody point me to the documentation for those APIs if they exist, if they don't, does that mean if you want to develop a VoIP app you have to implement a load of stuff from scratch?
0
0
1.4k
Nov ’22
Seeing a sudden influx of crashlytics error in an old version as soon as the new version is released
Last week we released an update to the app in the app store, version N.0. It was on a phased rollout. Several users reported a crash so the roll out was paused. A fix to the crash was released to the app store this morning, version N.1 and the rollout resumed. However immediately following the release of N.1 to the app store there are lots of crash reports arriving in Crashlytics all of a sudden for version N.0. Its as if N.0 has suddenly become available on the app store and everybody is downloading it, but that isn't the case, its definately N.1 displayed in the app store. I don't understand why all these reports from a version of the app that is now no longer available has started arriving? Could be there some caching of versions in the app store or something and when N.1 release and the rollout resumed, the app store is actually automatically updateing people's phones with N.0 instead? (There's a small number of non crash reports being reported in Crashlytics for N.1, proving its live and downloaded on some phones)
0
0
445
Oct ’23
App keeps hanging at different locations but always features NSLog and __ulock_wait2
I reported this first here: https://developer.apple.com/forums/thread/746539 But have since discovered more findings. In that report there is a hang stack trace (from an .ips file) showing the 3rd party library KKMV featuring. However since posting that I have discovered that my app is hanging all over the place at random places, I've been collecting .ips files and they are all different - expect they all have one thing in common, which is that it always involves __ulock_wait2 / NSLog. There's one example posted in the linked post, but here's a different example but with the same last lines of __ulock_wait2/NSLog Here's another snippet from a hang, again, just like all the others, it finishes with NSLog/__ulock_wait2 318 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 148 (CoreFoundation + 194472) [0x1988a27a8] 318 @objc CallExtensionManager.appBecameActive() + 28 (Myapp + 296292) [0x100ba8564] 317 CallExtensionManager.appBecameActive() + 912 (Myapp + 295912) [0x100ba83e8] 317 specialized static Logger.always(_:) + 316 (CallFilterFast + 108104) [0x100b7a648] 317 specialized withVaList<A>(_:_:) + 428 (Foundation + 5337508) [0x197c381a4] 317 _NSLogv + 164 (Foundation + 603072) [0x1977b43c0] 317 _CFLogvEx3 + 252 (CoreFoundation + 652276) [0x1989123f4] 317 _CFLogvEx2Predicate + 352 (CoreFoundation + 652792) [0x1989125f8] 317 __CFLogCString + 84 (CoreFoundation + 652948) [0x198912694] 317 _logToStderr + 144 (CoreFoundation + 653980) [0x198912a9c] 317 __ulock_wait2 + 8 (libsystem_kernel.dylib + 59708) [0x1e1a7193c] *317 ??? (<7ABFF6F3-9E55-3D7B-8DB8-8CF19FB41EFE> + 5068548) [0xfffffff008229704] Every time the app hangs, in the .ips logging is featured when the ips is opened in XCode or when the ips is examined it always features in the Heaviest stack for the main thread of the target process. I've drastically reduced the amount of logging within the app in case it was too much, but it made no difference. When the app hangs there's no crash, I'm running the app either from Testflight, or installing via XCode but then running it from XCode. If its installed via XCode then a dialog pops up saying it crashed, but there is not crash stack (there's no .crash files on the iPhone, only .ips files, there's no crash reported to crashlytics, and if reported via Testflight there's also no crash info). Why is NSLog featuring in every .ips file when this happen but at a different location everytime? If the app is hanging and blocking the main thread, then why isn't it being terminated by Watchdog and thus not producing a .crash file?
0
1
791
Feb ’24
Can a Message Filter Extension specify more than ILMessageFilterExtensionNetworkURL or switch which is used?
I asked this question of AI and it said that yes it was possible, and gave some sample code override class func filterConfiguration() -> ILMessageFilterExtensionConfiguration { let config = ILMessageFilterExtensionConfiguration() // You can specify multiple network URLs config.networkURLs = [ URL(string: "https://api1.example.com/filter")!, URL(string: "https://api2.example.com/filter")! ] return config } And said the OS will try the first, and if there's no response within the first few seconds it'll move onto the second. However, there is no such class as ILMessageFilterExtensionConfiguration AFAICT, if there is then how to access/use it, if there isn't, then I wonder how the AI counjured it up? If multiple urls can be specified, then can the extension also specify a particular API to use and switch between them at some point? When does the OS call filterConfiguration()?
0
0
449
Dec ’24
How can a live caller id database be scaled to support millions of numbers that constantly change if it must be KPIR encoded?
The example database/server provided by Apple for Live Caller ID contains a hardcoded database with a tiny number of pre-defined numbers. However, its not expected to be representational of an live real world usage server. But the question is how can that be accomplished if its a requirement that the data be KPIR encrypted? In real world scenarios, the factors that effect whether a number should be blocked or not are continually changing and evolving on a minute-by-minute basis and new information becomes available or existing information changes. If the database supports tens of millions or hundreds of millions of constantly changing phone numbers, in order to meet the requirements of the Live Caller ID being KPIR encrypted, that would imply the database has to re-encrypt its database of millions endlessly for all time. That seems unfeasable and impractical to implement. Therefore how do the Apple designers of this feature envisage/suggest a real-world server supporting millions of changing data should meet the requirement to be KPIR encrypted?
0
0
446
Mar ’25
Issue using RealmSwift in a framework versus using it in an app
If I install RealmSwift into an ios app using SPM, I have no problems. However if I install it into an ios framework, then when building there is this error: error: missing required modules: 'Realm.Private', 'Realm', 'Realm.Swift' I have discovered that if I change the import statement from: import RealmSwift to private import RealmSwift then doing that makes this build error goes away (but doing that isn't a feasible workaround as I would like to publicly export classes stored in Realm from the framework). There's no point in posting issues with Realm on their support board as its being deprecated and its tumble weeds on their forum. But I would be very interested in hearing from the Apple expects explanation or speculation on: why is importing the same framework via SPM into a framework xcode project resulting in different behavior then when importing it into an app? why would changing import to private import make the build error go away? TIA
0
0
98
Mar ’25