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?
Post
Replies
Boosts
Views
Activity
Released app repeatedly crashing on launch, Crashlytics is enabled but no crash reports getting sent
I've users reporting a crash on app launch which I'm unable to reproduce. The app has Crashlytics but none of the crashes are getting sent to the Crashlytics console (Crashlytics is set up correctly and reports can get through for when the app doesn't crash on startup, but not getting sent for this).
I've managed to get a crash report off a phone, but can't see anything useful. Are there any clues in here as to the possible cause?
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6
Terminating Process: AppName [566]`
Last Exception Backtrace:
0 CoreFoundation 0x192622870 __exceptionPreprocess + 164
1 libobjc.A.dylib 0x18a94fc00 objc_exception_throw + 59
2 AppName 0x1046b7450 0x10401c000 + 6927440
3 AppName 0x104683990 0x10401c000 + 6715792
4 AppName 0x10468542c 0x10401c000 + 6722604
5 AppName 0x1040b5900 0x10401c000 + 628992
6 AppName 0x1040b593c 0x10401c000 + 629052
7 AppName 0x10408a3b0 0x10401c000 + 451504
8 AppName 0x10407f320 0x10401c000 + 406304
9 AppName 0x10407f4a4 0x10401c000 + 406692
10 AppName 0x1040346c0 0x10401c000 + 100032
11 UIKitCore 0x194969ddc -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 319
12 UIKitCore 0x194968f44 -[UIApplication _callInitializationDelegatesWithActions:forCanvas:payload:fromOriginatingProcess:] + 2855
13 UIKitCore 0x194967f28 -[UIApplication _runWithMainScene:transitionContext:completion:] + 855
14 UIKitCore 0x194967b74 -[_UISceneLifecycleMultiplexer completeApplicationLaunchWithFBSScene:transitionContext:] + 131
15 UIKitCore 0x1948e4434 _UIScenePerformActionsWithLifecycleActionMask + 111
16 UIKitCore 0x19496bb70 __101-[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:]_block_invoke + 215
17 UIKitCore 0x19489329c -[_UISceneLifecycleMultiplexer _performBlock:withApplicationOfDeactivationReasons:fromReasons:] + 219
18 UIKitCore 0x194891d14 -[_UISceneLifecycleMultiplexer _evalTransitionToSettings:fromSettings:forceExit:withTransitionStore:] + 607
19 UIKitCore 0x19489167c -[_UISceneLifecycleMultiplexer uiScene:transitionedFromState:withTransitionContext:] + 247
20 UIKitCore 0x19489154c __186-[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:]_block_invoke + 147
21 UIKitCore 0x194891454 +[BSAnimationSettings(UIKit) tryAnimatingWithSettings:fromCurrentState:actions:completion:] + 735
22 UIKitCore 0x194890cdc _UISceneSettingsDiffActionPerformChangesWithTransitionContextAndCompletion + 223
23 UIKitCore 0x19489098c -[_UIWindowSceneFBSSceneTransitionContextDrivenLifecycleSettingsDiffAction _performActionsForUIScene:withUpdatedFBSScene:settingsDiff:fromSettings:transitionContext:lifecycleActionType:] + 315
24 UIKitCore 0x194c13520 __64-[UIScene scene:didUpdateWithDiff:transitionContext:completion:]_block_invoke.225 + 611
25 UIKitCore 0x19488fb10 -[UIScene _emitSceneSettingsUpdateResponseForCompletion:afterSceneUpdateWork:] + 215
26 UIKitCore 0x19488f980 -[UIScene scene:didUpdateWithDiff:transitionContext:completion:] + 243
27 UIKitCore 0x1949a826c -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 507
28 UIKitCore 0x1949a8004 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 287
29 FrontBoardServices 0x1ab0766d4 -[FBSScene _callOutQueue_didCreateWithTransitionContext:completion:] + 323
30 FrontBoardServices 0x1ab076570 __92-[FBSWorkspaceScenesClient createSceneWithIdentity:parameters:transitionContext:completion:]_block_invoke.108 + 279
31 FrontBoardServices 0x1ab07519c -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 167
32 FrontBoardServices 0x1ab080f8c __92-[FBSWorkspaceScenesClient createSceneWithIdentity:parameters:transitionContext:completion:]_block_invoke + 351
33 libdispatch.dylib 0x19a4cf300 _dispatch_client_callout + 19
34 libdispatch.dylib 0x19a4d2d48 _dispatch_block_invoke_direct + 283
35 FrontBoardServices 0x1ab071520 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 51
36 FrontBoardServices 0x1ab0714a0 -[FBSMainRunLoopSerialQueue _targetQueue_performNextIfPossible] + 239
37 FrontBoardServices 0x1ab071378 -[FBSMainRunLoopSerialQueue _performNextFromRunLoopSource] + 27
38 CoreFoundation 0x19256d31c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 27
39 CoreFoundation 0x19256c598 __CFRunLoopDoSource0 + 175
40 CoreFoundation 0x19256adac __CFRunLoopDoSources0 + 339
41 CoreFoundation 0x192569a88 __CFRunLoopRun + 827
42 CoreFoundation 0x192569668 CFRunLoopRunSpecific + 607
43 GraphicsServices 0x1d648f5ec GSEventRunModal + 163
44 UIKitCore 0x1949850d4 -[UIApplication _run] + 887
45 UIKitCore 0x194984710 UIApplicationMain + 339
46 AppName 0x10402bba8 0x10401c000 + 64424
47 dyld 0x1b5be6d44 start + 2103
Thread 0 posted as comment
In this Apple documentation https://developer.apple.com/documentation/xcode/acquiring-crash-reports-and-diagnostic-logs
it says "If a customer reports a crash, they can transfer the crash report to either a Mac or Windows computer. See Find device crash and energy logs on a Mac or Windows computer."
In the page that links to (https://help.apple.com/xcode/mac/current/#/dev0f3181c2c) it says "When an app crashes or uses excessive CPU on a device, the operating system creates a log of that event. The next time you connect the device to your Mac, the system downloads those records (known as crash or energy logs) to your Mac. "
But where on your Mac, it doesn't say where. Where does it the Mac download the crash reports to?
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)
An hour ago I received a new iPhone 15 Pro, however I can't enable developer mode for it.
Developer mode doesn't appear in the Setting | Privacy & Security | Security section. However I read thats to be expected now for iOS 17, and that it can be enable within XCode (although I didn't have to do that with any of my other phones which have iOS 17 on them, and for all of those Developer Mode does appear in Settings).
However XCode (v15, release version not beta version) doesn't recognize the device.
On the iPhone I've Trusted the Mac and restarted the phone and XCode but XCode just won't see it.
Apple Configurator 2 has no problem seeing/connecting to the iPhone, nor does the iExplorer app, but XCode just won't.
What can I try next?
I've got a .ips file from a handset that had hang detection turned on.
Its not fully symbolicated, how can I symbolicate it?
On that topic, the instructions for symbolicating a .crash file are out of date:
https://developer.apple.com/documentation/xcode/adding-identifiable-symbol-names-to-a-crash-report
It says "click the Device Logs button in the Devices and Simulators window, then drag and drop the crash report file into the list of device logs."
However with XCode 15.1 there is no Device Logs button in the Devices and Simulators window.
(If there were that button, presumably these instructions only apply for logs collected from the same device as listed in Devices and Simulators. What if you have a log collected from a device to which you don't have access for it to be in Devices and Simulators?)
I've got an app which is hanging, I turned on Hang Detection and got an .ips file and the top of the hang stack has this:
Dispatch queue: com.apple.main-thread (0)
0 __ulock_wait2
7 NSLog
8 _MMKVLogWithLevel
<snip>
MMKV is a 3rd party library being used in the app. But this looks like MMKV is calling NSLog and then that is hanging? Is that correct, if so then how and why is NSLog hanging and how to solve this issue?
Here's an image of the full stack from XCode when the .ips file is imported:
And here is the heaviest stack info when the .ips is opened as a text file:
Heaviest stack for the main thread of the target process:
411 start + 2240 (dyld + 23940) [0x1bcacad84]
411 main + 96 (MyApp + 108384) [0x10232e760]
411 UIApplicationMain + 340 (UIKitCore + 2270528) [0x19ad20540]
411 -[UIApplication _run] + 888 (UIKitCore + 2273028) [0x19ad20f04]
411 GSEventRunModal + 164 (GraphicsServices + 13536) [0x1dd8554e0]
411 CFRunLoopRunSpecific + 608 (CoreFoundation + 211304) [0x1988a6968]
397 __CFRunLoopRun + 1996 (CoreFoundation + 213528) [0x1988a7218]
397 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CoreFoundation + 226588) [0x1988aa51c]
397 _dispatch_main_queue_callback_4CF + 44 (libdispatch.dylib + 74168) [0x1a07831b8]
396 _dispatch_main_queue_drain + 1060 (libdispatch.dylib + 75244) [0x1a07835ec]
396 _dispatch_client_callout + 20 (libdispatch.dylib + 15828) [0x1a0774dd4]
396 _dispatch_call_block_and_release + 32 (libdispatch.dylib + 8508) [0x1a077313c]
396 __49-[RCTCxxBridge _prepareModulesWithDispatchGroup:]_block_invoke + 156 (MyApp + 11155392) [0x102db77c0]
396 -[RCTModuleData instance] + 816 (MyApp + 11498212) [0x102e0b2e4]
396 RCTUnsafeExecuteOnMainQueueSync + 52 (MyApp + 11906956) [0x102e6ef8c]
396 __25-[RCTModuleData instance]_block_invoke + 44 (MyApp + 11499132) [0x102e0b67c]
392 -[RCTModuleData setUpInstanceAndBridge:] + 1324 (MyApp + 11490784) [0x102e095e0]
392 __115-[RCTModuleData initWithModuleClass:bridge:moduleRegistry:viewRegistry_DEPRECATED:bundleManager:callableJSModules:]_block_invoke + 36 (MyApp + 11488056) [0x102e08b38]
392 -[MMKVNative init] + 100 (MyApp + 20934364) [0x10370aedc]
392 RCTExecuteOnMainQueue + 52 (MyApp + 11906684) [0x102e6ee7c]
392 __18-[MMKVNative init]_block_invoke + 232 (MyApp + 20934688) [0x10370b020]
392 +[MMKV initializeMMKV:] + 48 (MyApp + 9265708) [0x102bea22c]
392 +[MMKV initializeMMKV:logLevel:] + 80 (MyApp + 9265800) [0x102bea288]
392 _MMKVLogWithLevel(mmkv::MMKVLogLevel, char const*, char const*, int, char const*, ...) + 348 (MyApp + 9518596) [0x102c27e04]
392 NSLog + 56 (Foundation + 602868) [0x1977b42f4]
392 _NSLogv + 164 (Foundation + 603072) [0x1977b43c0]
392 _CFLogvEx3 + 252 (CoreFoundation + 652276) [0x1989123f4]
392 _CFLogvEx2Predicate + 352 (CoreFoundation + 652792) [0x1989125f8]
392 __CFLogCString + 84 (CoreFoundation + 652948) [0x198912694]
392 _logToStderr + 144 (CoreFoundation + 653980) [0x198912a9c]
392 __ulock_wait2 + 8 (libsystem_kernel.dylib + 59708) [0x1e1a7193c]
*392 ??? (<7ABFF6F3-9E55-3D7B-8DB8-8CF19FB41EFE> + 5068548) [0xfffffff008229704]
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?
Many months ago Apple stated:
"From Fall 2023 you’ll receive an email from Apple if you upload an app to App Store Connect that uses required reason API without describing the reason in its privacy manifest file"
Yet it seems nobody has received them?
So whats the latest situation with this, if there's a mandatory requirement to add the privacy manifest by Spring how can people meet that now looming deadline if they haven't received the email that was due in the Fall?
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?
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?
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 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?)
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 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?