Dive into the vast array of tools and services available to developers.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

My app crashes and I don't know why
Hi! I'm new at developing apps. I built my app with Expo and it's working fine in simulator and my iPhone 14 as well. But when I try to run the build in my iPhone with TestFlight it crashes instantly :/ This is part of the log: Incident Identifier: B0ED8DEF-A0F0-4D0C-B3BB-3BB9CAB3242A Distributor ID: com.apple.TestFlight Hardware Model: iPhone14,7 Process: colbakapp [83024] Path: /private/var/containers/Bundle/Application/44211687-140E-4DF3-A577-CB68CE6414B0/colbakapp.app/colbakapp Identifier: com.colbak.colbakapp Version: 1.0.0 (3) AppStoreTools: 16F3 AppVariant: 1:iPhone14,7:18 Beta: YES Code Type: ARM-64 (Native) Role: Foreground Parent Process: launchd [1] Coalition: com.colbak.colbakapp [18141] Date/Time: 2025-06-22 13:26:29.0142 -0400 Launch Time: 2025-06-22 13:26:28.6532 -0400 OS Version: iPhone OS 18.5 (22F76) Release Type: User Baseband Version: 3.60.02 Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: SIGNAL 6 Abort trap: 6 Terminating Process: colbakapp [83024] Triggered by Thread: 2 Thread 0: 0 libsystem_kernel.dylib 0x00000001f2e4fce4 mach_msg2_trap + 8 1 libsystem_kernel.dylib 0x00000001f2e5339c mach_msg2_internal + 76 (mach_msg.c:201) 2 libsystem_kernel.dylib 0x00000001f2e532b8 mach_msg_overwrite + 428 (mach_msg.c:0) 3 libsystem_kernel.dylib 0x00000001f2e53100 mach_msg + 24 (mach_msg.c:323) 4 CoreFoundation 0x00000001a1c42900 __CFRunLoopServiceMachPort + 160 (CFRunLoop.c:2637) 5 CoreFoundation 0x00000001a1c411f0 __CFRunLoopRun + 1208 (CFRunLoop.c:3021) 6 CoreFoundation 0x00000001a1c42c3c CFRunLoopRunSpecific + 572 (CFRunLoop.c:3434) 7 GraphicsServices 0x00000001eee21454 GSEventRunModal + 168 (GSEvent.c:2196) 8 UIKitCore 0x00000001a4655274 -[UIApplication _run] + 816 (UIApplication.m:3845) 9 UIKitCore 0x00000001a4620a28 UIApplicationMain + 336 (UIApplication.m:5540) 10 colbakapp 0x00000001046296b0 main + 64 (AppDelegate.swift:6) 11 dyld 0x00000001c8b17f08 start + 6040 (dyldMain.cpp:1450) Thread 1: 0 libsystem_pthread.dylib 0x000000022c350aa4 start_wqthread + 0 Thread 2 Crashed: 0 libsystem_kernel.dylib 0x00000001f2e5a1dc __pthread_kill + 8 1 libsystem_pthread.dylib 0x000000022c357c60 pthread_kill + 268 (pthread.c:1721) 2 libsystem_c.dylib 0x00000001a9c782d0 abort + 124 (abort.c:122) 3 libc++abi.dylib 0x000000022c2815a0 abort_message + 132 (abort_message.cpp:78) 4 libc++abi.dylib 0x000000022c26fef4 demangling_terminate_handler() + 316 (cxa_default_handlers.cpp:72) 5 libobjc.A.dylib 0x000000019f1e7c08 _objc_terminate() + 172 (objc-exception.mm:499) 6 libc++abi.dylib 0x000000022c2808b4 std::__terminate(void ()()) + 16 (cxa_handlers.cpp:59) 7 libc++abi.dylib 0x000000022c2840d0 __cxa_rethrow + 188 (cxa_exception.cpp:658) 8 libobjc.A.dylib 0x000000019f1e5568 objc_exception_rethrow + 44 (objc-exception.mm:399) 9 colbakapp 0x00000001049f7b68 invocation function for block in facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const, NSInvocation*, NSMutableArray*) + 200 (RCTTurboModule.mm:444) 10 colbakapp 0x00000001049fc538 facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1::operator()() const + 36 (RCTTurboModule.mm:463) 11 colbakapp 0x00000001049fc538 decltype(std::declval<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1&>()()) std::__1::__invoke[abi:ne190102... + 36 (invoke.h:149) 12 colbakapp 0x00000001049fc538 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:ne190102]<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMu... + 36 (invoke.h:224) 13 colbakapp 0x00000001049fc538 std::__1::__function::__alloc_func<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1, std::__1::allocator<face... + 36 (function.h:171) 14 colbakapp 0x00000001049fc538 std::__1::__function::__func<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1, std::__1::allocator<facebook::... + 104 (function.h:313) 15 libdispatch.dylib 0x00000001a9bbcaac _dispatch_call_block_and_release + 32 (init.c:1575) 16 libdispatch.dylib 0x00000001a9bd6584 _dispatch_client_callout + 16 (client_callout.mm:85) 17 libdispatch.dylib 0x00000001a9bc52d0 _dispatch_lane_serial_drain + 740 (queue.c:3939) 18 libdispatch.dylib 0x00000001a9bc5dac _dispatch_lane_invoke + 388 (queue.c:4030) 19 libdispatch.dylib 0x00000001a9bd01dc _dispatch_root_queue_drain_deferred_wlh + 292 (queue.c:7198) 20 libdispatch.dylib 0x00000001a9bcfa60 _dispatch_workloop_worker_thread + 540 (queue.c:6792) 21 libsystem_pthread.dylib 0x000000022c350a0c _pthread_wqthread + 292 (pthread.c:2696) 22 libsystem_pthread.dylib 0x000000022c350aac start_wqthread + 8 Thread 3: 0 libsystem_pthread.dylib 0x000000022c350aa4 start_wqthread + 0 ... EOF
1
0
107
Jun ’25
iOS 18.5 crash with iPad 7 only
Weirdness going on here. Our app is crashing on startup with iPad 7s running iOS 18.5. Before updating to iOS 18.5, it was working fine on iPad 7s. Even with iOS 18.5, it is working fine on every device we have tried including dozens of other iPads and iPhones. We have narrowed it down to the SquareReaderSDK. If we remove that SDK, it will launch and work without issues. But, many of our users need the SquareReaderSDK. The crash happens at app load, before appDelegate didFinishLaunchingWithOptions. So we can't figure out any way to debug the issue. Is anyone else having a similar issue? Square thinks it is an Apple issue.
4
0
132
Jun ’25
Rapport de Bug : Problème Entitlements Family Controls / EAS Build
Le build iOS via EAS échoue systématiquement lors de la phase Xcode. Bien que les capacités Family Controls et App Groups soient activées sur le portail Apple Developer et configurées dans le app.json, les profils de provisionnement générés par EAS sont rejetés par Xcode car ils ne contiendraient pas les droits nécessaires. Configuration du projet : Targets (4) : App principale + 3 extensions (ShieldConfiguration, ShieldAction, ActivityMonitorExtension). Capabilities requises : Family Controls (Development), App Groups. EAS CLI Version : 18.0.6 (et versions antérieures testées). Erreur Xcode récurrente : error: Provisioning profile "[expo] com.*****.*** AdHoc 177230..." doesn't support the Family Controls (Development) capability.. error: Provisioning profile "... AdHoc ..." doesn't include the com.apple.developer.family-controls entitlement.. Ce qui a déjà été tenté (sans succès) : Configuration app.json : Ajout manuel des entitlements pour le bundle principal et configuration du plugin react-native-device-activity. Nettoyage Credentials : Suppression totale des profils et des identifiants sur le site Expo.dev ET sur le portail Apple Developer. +1 Forçage Sync : Utilisation de eas build --clear-cache et réponse "No" à la réutilisation des profils existants. Observation étrange : Le terminal indique souvent ✔ Synced capabilities: No updates, alors que les droits viennent d'être modifiés sur le portail Apple. Sur le portail Apple, les profils affichent pourtant bien "Family Controls (Development)" dans les capacités activées. Je met en piece jointe un des profiles.
1
0
68
2w
Feedbacks stay “unread" forever
I have two feedbacks now where I’ve been requested additional info, and provided it, but the feedback still has an “unread” dot, and is still in the “Requests” folder. I’ve asked multiple times to clear this status in one of those feedbacks (FB14888965), but got no response. Not the end of the world as long as the engineers are notified, but iirc the dot would disappear as soon as I replied.
6
0
242
Nov ’25
Watch App Not available to install
I added an Apple Watch app target for an iOS app. If I install it directly through Xcode it runs, however it seems to be able to communicate with iphone through Watch Connectivity framework and once I close the app it seems to uninstall itself from the watch. When I installed the iphone app frist, the app does not show up on the available apps on the iphone Watch application, what could be the issue ? The iphone app was created using react native through expo. Testing Devices Iphone 13 pro max IOS 26.0.1 --- Apple Watch Series 4 WatchOS 10.6
2
0
470
Nov ’25
Running tests on multiple simulators and local mock servers
Hello, I have a question about running tests on multiple simulators. Currently, my company has a WDIO+Appium test suite with XCUITEST driver that runs on a single simulator through a mockttp proxy (we are intercepting and mocking some of the responses from our APIs and pass through the rest). In order to route the traffic we are currently using 'networksetup -setsecurewebproxy '. Everything works as expected. With growing number of tests we'd like to scale number of simulators on a single host to 3-5. We have a working setup but the problem are system-wide proxy settings routing traffic from multiple simulators, which we can't distinguish by UDID or any other means, we know of. We can spin multiple mock servers on the same machine but we are struggling to find the way to route the traffic on a simulator basis. In the end, both options are viable: 1 mock server running for multiple simulators N number of mock servers for N number of simulators Has anyone had the same/similar problem? How to approach this? We are currently running on Sequoia OSX and platform version 18.6. Thanks!
1
0
330
Feb ’26
symbolicate crashlog using .symbols files instead of dSYMs
Hi, Some crashes downloaded from TestFlight aren't symbolicated by Xcode and I don't know why, here's an example: Although all uploaded builds contain debug symbols (Symbols directory with .symbols files) and other crashlogs in the same version are symbolicated just fine (also visible on the above SS). I have access only to the .symbols files but not to the original dSYMs and I wonder how to perform symbolication manually. I tried pointing atos and symbolicatecrash utilities to respective .symbols file, but they are unable to work with it. I'm sure it's possible as TestFlight symbolicates crashlogs using only .symbols files somehow. Could you give a hint?
1
0
222
Feb ’26
App Icon Dimension
I am trying to make an app icon 20 x 20 pixel dimension. I cannot get the icon to be sized this way. It gets blurry. I have used adobe express + illustrator. I have not been able to size it. It is a 400 x 400 dimension png. I want the proportion to be 20 x 20 without losing the clarity.
1
0
233
Feb ’26
Questions about macOS App Store update package generation and optimization
Hello, According to documentation, the App Store does not re-download the entire app when updating, but instead generates an update package containing only the changed content compared to the previous version. I’d like to clarify the following points: 1. Granularity of file changes If only part of a large file changes, does the update package include the entire file, or does it patch only the modified portions within that file? 2. Guideline on separating files The documentation recommends separating files that are likely to change from those that are not. How should this be interpreted in practice? 3. Verifying the diff result Is there a way for developers to check the actual diff result of the update package generated by the App Store without submitting the app? Is there a diff command tool or comparison method closer to the actual App Store update process? 4. Estimating update size during development For apps with large-scale resources, minimizing update size is critical. Are there any tools or best practices to estimate the size of the update package before submitting to the App Store? Any clarification or reference materials would be greatly appreciated. Thank you.
1
0
173
Jan ’26
Unable to open dependencies file when using a icon from Icon Composer (Xcode 26)
How to replicate: Design a icon in icon composer Save it and put the .icon file in your project, then in your targets put the name of the .icon file in there. Either clean build folder or restart IDE One Error: unable to open dependencies file (/Users/user/Library/Developer/Xcode/DerivedData/project-fqrfzzkwgrutdabmcqjeupvyetci/Build/Intermediates.noindex/project.build/Debug/project.build/assetcatalog_dependencies_thinned) And one warning: Icon export exited with status 255, signal 0 Is this a known issue or a easy fix? Or is it a issue on my end? Thanks
1
0
197
Jan ’26
On-demand resource exporting?
I'm a newbie to on-demand resources and I feel like I'm missing something very obvious. I've successfully tagged and set up ODR in my Xcode project, but now I want to upload the assets to my own server so I can retrieve them from within the app, and I can't figure out how to export the files I need. I'm following the ODR Guide and I'm stuck at Step #4, after I've selected my archive in the Archives window it says to "Click the Export button", but this is what I see: As shown in the screenshot, there is no export button visible. I have tried different approaches, including distributing to appstore connect, and doing a local development release. The best I've been able to do is find a .assetpack folder inside the archive package through the finder, but uploading that, or the asset.car inside it, just gives me a "cannot parse response" error from the ODR loading code. I've verified I uploaded those to the correct URL. Can anyone walk me through how to save out the file(s) I need, in a form I can just upload to my server? Thanks, Pete
0
0
101
May ’25
How to install cocoapods and pod
Hi, I am developing IOS(Android App) with React Native. I am very confused about cocoapods and pod and how to correctly install it on my new Macbook Pro M4. I am not using bash but I am using zsh. Note, actuallywhich pod return nothing During the preparation of my environment, it say CocoaPods is one of the dependency management system available for iOS. CocoaPods is a Ruby gem. You can install CocoaPods using the version of Ruby that ships with the latest version of macOS. the web site show two commands gem install cocoapods sudo gem install cocoapods I saw another command as well brew install cocoapods During different processes, I experienced several time the following error (Command 'pod install failed) Command pod install failed. └─ Cause: pod install --repo-update --ansi exited with non-zero code: 1 Then I am confused about cocoapods and pod. Are both he same? With my previous MacBook pro, I spend time to install cocoapod on my profile because Ruby was not the latest version on the system. But apparently, on my new Macbook Pro M4, the command ruby -v return (as well) ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25] The current stable version is 4.0.0. I bought a new macbook pro M4 and I reinstalled node and all package for Rect Native 0.81 a expo 54 excepted cocoapods. Now, I need to configure the push notification and it's time to install cocoapods as it's require here But on my new macbook pro, I would like to make sure I do it correctly and I kindly ask your help and recommandation to install Ruby and cocoapods/pod Q1: Should I install cocoapods with brew install cocoapods or gem install cocoapods? Q2: what's is the difference or the common point with cocoapods and pod? Cocoapod web site said If using the default Ruby included with macOS, installation will require you to use sudo when installing gems As ruby -v print 'ruby 2.6.10p210', I suppose, I should not install cocoapod with sudo You can use a Ruby Version manager such as RVM or rbenv to manage multiple Ruby versions, or you can use Homebrew to install a newer Ruby with brew install ruby. As far I understand, I should not install cocoapods with the Ruby version of the system, then I suppose the command Q3: Will 'brew install cocopads' install the latest version on my profile? Will it upgrade the system version Q4: What will do the command brew install rbenv ruby-build rbenv install 3.2.2 (or better: rbenv install 4.0.0) in comparison with brew install ruby My guess I suppose that the following will help, but it would nice if you could correct me and clarify # All should be done in my profile brew install rbenv ruby-build echo 'eval "$(rbenv init - bash)"' >> ~/.zprofile source ~/.zprofile rbenv install 4.0.0 # rbenv global 4.0.0 # What is it? ruby -v gem install cocoapods Q5: But then, what about pod and the error message Command pod install failed. As you can see, I am a bit confused and I would appreciate your clarification I thanks you for your help and clarification and I wish you a happy new years
2
0
239
Jan ’26
AR location errors on cellular + WiFi model iPad with device connected to Wi-Fi
I am developing an Augmented Reality (AR) navigation application for the iPad, utilizing the ARCL library to place Points of Interest (POIs) in the real world. The application's behavior varies significantly based on the device's networking configuration: Cellular Network (Expected Behavior): On an iPad with a cellular modem, when using the cellular network, all POIs are placed accurately with correct orientation. Wi-Fi Only (Expected Behavior): On a Wi-Fi-only model (no GPS chip), POI placement is inaccurate, confirming the need for an external GPS receiver for that hardware configuration. Cellular + Wi-Fi (Anomalous Behavior): The iPad is a cellular model (equipped with GNSS/GPS). The device is connected to a Wi-Fi network (enforced via an MDM profile, preventing the user from disabling Wi-Fi). When actively connected to this specific Wi-Fi network, the AR POIs consistently display with an incorrect orientation and placement, even though the device hardware has a dedicated GPS chip. The placement error strongly suggests that the device's determined location or heading is erroneous. It appears that the active Wi-Fi connection is somehow interfering with or overriding the high-accuracy GNSS/GPS data, leading to a flawed Core Location determination that negatively impacts the ARCL world tracking and anchor placement. Has anyone experienced a scenario where an active Wi-Fi connection on a cellular iPad model causes Core Location to prioritize less accurate location data (potentially Wi-Fi-based location services) over the device's built-in GNSS/GPS, resulting in severe orientation errors? We observed that on Apple map(native application) as well it is showing wrong location and orientation when it is connected to WiFi
0
0
296
Dec ’25
Unable to Enable “Media Services (MusicKit, ShazamKit)” When Creating a Key
I am trying to integrate Apple Music API using MusicKit and need to generate a Developer Token. However, when I try to create a new key from the Certificates, Identifiers &amp; Profiles section, the “Media Services (MusicKit, ShazamKit, Apple Music Feed)” option is grayed out. We are getting the error 'there are no identifiers available that can be associated with the key.' Although we did checkmark 'musickit' in app services. I have already: Enrolled in the paid Apple Developer Program Created a valid App ID under Identifiers Logged in as the Account Holder Tried multiple browsers and devices Despite this, the option remains disabled. Could you please enable this or let me know what further steps I need to take? Thank you!
0
0
251
Apr ’25
WeatherKit "Pricing and Additional Endpoints" question.
In the availability and pricing section, we have reviewed the plans and we will be upgrading to 50 or 100 million calls/month but before we do, we have a couple questions. Does the API have rate limit or throttling? Do you have additional weather forecast endpoints like hail, radar, or pollen forecast? I see in this thread https://developer.apple.com/forums/thread/795642 that air quality is not available Thanks
0
0
188
Aug ’25
Best replacement for MCL
So, as we found out from WWDC, the migration to Apple Silicon is inevitable. Does anyone have a good recommendation for a replacement for Macintosh Common Lisp on Apple Silicon? I was using it back in the MPW days and struggling to keep the Lisp code working, but Apple Silicon has thrown a money wrench at it! Thanks in advance for any advice on any available Apple Silicon Lisp development tools!
2
0
132
Jul ’25
[REQUEST] for a tool/method/guidance how to create privacy manifest (PrivacyInfo.xcprivacy) when you don't have Xcode/mac
Hello, PrivacyInfo.xcprivacy Is primordial and without it the app is rejected from the Store I believe. All 5 ressources I had found related to it, mention XCODE, or explain how to add the code to langages that I don't use (Switf i think?) etc. I am building the app thought CI/CD, so prior to building it the app does not have privacy manifest and there is not way to generate it automatically without xcode it seems. My app is written in Flutter prior to becoming an iOS app. I am seeking for a method to do that. Thanks.
1
0
138
Sep ’25
Testing and Debugging Code Running in the Background
I regularly bump into folks confused by this issue, so I thought I’d collect my thoughts on the topic into a single (hopefully) coherent post. If you have questions or comments, put them in a new thread here on the forums. Feel free to use whatever subtopic and tags that apply to your situation, but make sure to add the Debugging tag so that I see your thread go by. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Testing and Debugging Code Running in the Background I regularly see questions like this: My background code works just fine in Xcode but fails when I download the app from the App Store. or this: … or fails when I run my app from the Home screen. or this: How do I step through my background code? These suggest a fundamental misunderstanding of how the debugger interacts with iOS’s background execution model. The goal of this post is to explain that misunderstanding so that you can effectively test and debug background code. Note The focus of this post is iOS. The advice here generally applies to any of iOS’s ‘child’ platforms, so iPadOS, tvOS, and so on. However, there will be some platform specific differences, especially on watchOS. This advice here doesn’t apply to macOS. It’s background execution model is completely different than the one used by iOS. Understand the Fundamentals The key point to note here is that the debugger prevents your app from suspending. This has important consequences for iOS’s background execution model. Normally: iOS suspends your app when it’s in the background. Once your app is suspended, it becomes eligible for termination. The most common reason for this is that the system wants to recover memory, but it can happen for various other reasons. For example, the system might terminate a suspended app in order to update it. Under various circumstances your app can continue running after moving to the background. A great example of this is the continued processed task feature, introduced in iOS 26 beta. Alternatively, your app can be resumed or relaunched in the background to perform some task. For example, the region monitor feature of Core Location can resume or relaunch your app in the background when the user enters or leaves a region. If no app needs to be executing, the system can sleep the CPU. None of this happens in the normal way if the debugger is attached to your app, and it’s vital that you take that into account when debugging code that runs in the background. An Example of the Problem For an example of how this can cause problems, imagine an app that uses an URLSession background session. A background session will resume or relaunch your app in the background when specific events happen. This involves two separate code paths: If your app is suspended, the session resumes it in the background. If your app is terminated, it relaunches it in the background. Neither code path behaves normally if the debugger is attached. In the first case, the app never suspends, so the resume case isn’t properly exercised. Rather, your background session acts like it would if your app were in the foreground. Normally this doesn’t cause too many problems, so this isn’t a huge concern. On the other hand, the second case is much more problematic. The debugger prevents your app from suspending, and hence from terminating, and thus you can’t exercise this code path at all. Seek Framework-Specific Advice The above is just an example, and there are likely other things to keep in mind when debugging background code for a specific framework. Consult the documentation for the framework you’re working with to see if it has specific advice. Note For URLSession background sessions, check out Testing Background Session Code. The rest of this post focuses on the general case, offering advice that applies to all frameworks that support background execution. Run Your App Outside of Xcode When debugging background execution, launch your app from the Home screen. For day-to-day development: Run the app from Xcode in the normal way (Product > Run). Stop it. Run it again from the Home screen. Alternatively, install a build from TestFlight. This accurately replicates the App Store install experience. Write Code with Debugging in Mind It’s obvious that, if you run the app without attaching the debugger, you won’t be able to use the debugger to debug it. Rather: Extract the core logic of your code into libraries, and then write extensive unit tests for those libraries. You’ll be able to debug these unit tests with the debugger. Add log points to help debug your integration with the system. Treat your logging as a feature of your product. Carefully consider where to add log points and at what level to log. Check this logging code into your source code repository and ship it — or at least the bulk of it — as part of your final product. This logging will be super helpful when it comes to debugging problems that only show up in the field. My general advice is that you use the system log for these log points. See Your Friend the System Log for lots of advice on that front. One of the great features of the system log is that disabled log points are very cheap. In most cases it’s fine to leave these in your final product. Attach and Detach In some cases it really is helpful to debug with the debugger. One option here is to attach to your running app, debug a specific thing, and then detach from it. Specifically: To attach to a running app, choose Debug > Attach to Process > YourAppName in Xcode. To detach, choose Debug > Detach. Understand Force Quit iOS allows users to remove an app from the multitasking UI. This is commonly known as force quit, but that’s not a particularly accurate term: The multitasking UI doesn’t show apps that are running, it shows apps that have been run by the user. The UI shows recently run apps regardless of whether they’re in the foreground, running in the background, suspended, or terminated. So, removing an app from the UI may not actually quit anything. Removing an app sets a flag that prevents the app from being launched in the background. That flag gets cleared when the user next launches the app manually. Note In some circumstances iOS will not honour this flag. The exact cases where this happens are not documented and have changed over time. Keep these behaviours in mind as you debug your background execution code. For example, imagine you’re trying to test the URLSession background relaunch code path discussed above. If you force quit your app, you’ll never hit this code path because iOS won’t relaunch your app in the background. Rather, add a debug-only button that causes your app to call exit. IMPORTANT This suggestion is for debugging only. Don’t include a Quit button in your final app! This is specifically proscribed by QA1561. Alternatively, if you’re attached to your app with Xcode, simply choose Product > Stop. This is like calling exit; it has no impact on your app’s ability to run in the background. Test With Various Background App Refresh Settings iOS puts users in control of background execution via the options in Settings > General > Background App Refresh. Test how your app performs with the following settings: Background app refresh turned off overall Background app refresh turned on in general but turned off for your app Background app refresh turned on in general and turned on for your app IMPORTANT While these settings are labelled Background App Refresh, they affect subsystems other than background app refresh. Test all of these cases regardless of what specific background execution feature you’re using. Test Realistic User Scenarios In many cases you won’t be able to fully test background execution code at your desk. Rather, install a TestFlight build of your app and then use the device as a normal user would. For example: To test Core Location background execution properly, actual leave your office and move around as a user might. To test background app refresh, use your app regularly during the day and then put your device on charge at night. Testing like this requires two things: Patience Good logging The system log may be sufficient here, but you might need to investigate other logging solutions that are more appropriate for your product. These testing challenges are why it’s critical that you have unit tests to exercise your core logic. It takes a lot of time to run integration tests like this, so you want to focus on integration issues. Before starting your integration tests, make sure that your unit tests have flushed out any bugs in your core logic. Revision History 2025-08-12 Made various editorial changes. 2025-08-11 First posted.
0
0
220
Aug ’25
My app crashes and I don't know why
Hi! I'm new at developing apps. I built my app with Expo and it's working fine in simulator and my iPhone 14 as well. But when I try to run the build in my iPhone with TestFlight it crashes instantly :/ This is part of the log: Incident Identifier: B0ED8DEF-A0F0-4D0C-B3BB-3BB9CAB3242A Distributor ID: com.apple.TestFlight Hardware Model: iPhone14,7 Process: colbakapp [83024] Path: /private/var/containers/Bundle/Application/44211687-140E-4DF3-A577-CB68CE6414B0/colbakapp.app/colbakapp Identifier: com.colbak.colbakapp Version: 1.0.0 (3) AppStoreTools: 16F3 AppVariant: 1:iPhone14,7:18 Beta: YES Code Type: ARM-64 (Native) Role: Foreground Parent Process: launchd [1] Coalition: com.colbak.colbakapp [18141] Date/Time: 2025-06-22 13:26:29.0142 -0400 Launch Time: 2025-06-22 13:26:28.6532 -0400 OS Version: iPhone OS 18.5 (22F76) Release Type: User Baseband Version: 3.60.02 Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: SIGNAL 6 Abort trap: 6 Terminating Process: colbakapp [83024] Triggered by Thread: 2 Thread 0: 0 libsystem_kernel.dylib 0x00000001f2e4fce4 mach_msg2_trap + 8 1 libsystem_kernel.dylib 0x00000001f2e5339c mach_msg2_internal + 76 (mach_msg.c:201) 2 libsystem_kernel.dylib 0x00000001f2e532b8 mach_msg_overwrite + 428 (mach_msg.c:0) 3 libsystem_kernel.dylib 0x00000001f2e53100 mach_msg + 24 (mach_msg.c:323) 4 CoreFoundation 0x00000001a1c42900 __CFRunLoopServiceMachPort + 160 (CFRunLoop.c:2637) 5 CoreFoundation 0x00000001a1c411f0 __CFRunLoopRun + 1208 (CFRunLoop.c:3021) 6 CoreFoundation 0x00000001a1c42c3c CFRunLoopRunSpecific + 572 (CFRunLoop.c:3434) 7 GraphicsServices 0x00000001eee21454 GSEventRunModal + 168 (GSEvent.c:2196) 8 UIKitCore 0x00000001a4655274 -[UIApplication _run] + 816 (UIApplication.m:3845) 9 UIKitCore 0x00000001a4620a28 UIApplicationMain + 336 (UIApplication.m:5540) 10 colbakapp 0x00000001046296b0 main + 64 (AppDelegate.swift:6) 11 dyld 0x00000001c8b17f08 start + 6040 (dyldMain.cpp:1450) Thread 1: 0 libsystem_pthread.dylib 0x000000022c350aa4 start_wqthread + 0 Thread 2 Crashed: 0 libsystem_kernel.dylib 0x00000001f2e5a1dc __pthread_kill + 8 1 libsystem_pthread.dylib 0x000000022c357c60 pthread_kill + 268 (pthread.c:1721) 2 libsystem_c.dylib 0x00000001a9c782d0 abort + 124 (abort.c:122) 3 libc++abi.dylib 0x000000022c2815a0 abort_message + 132 (abort_message.cpp:78) 4 libc++abi.dylib 0x000000022c26fef4 demangling_terminate_handler() + 316 (cxa_default_handlers.cpp:72) 5 libobjc.A.dylib 0x000000019f1e7c08 _objc_terminate() + 172 (objc-exception.mm:499) 6 libc++abi.dylib 0x000000022c2808b4 std::__terminate(void ()()) + 16 (cxa_handlers.cpp:59) 7 libc++abi.dylib 0x000000022c2840d0 __cxa_rethrow + 188 (cxa_exception.cpp:658) 8 libobjc.A.dylib 0x000000019f1e5568 objc_exception_rethrow + 44 (objc-exception.mm:399) 9 colbakapp 0x00000001049f7b68 invocation function for block in facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const, NSInvocation*, NSMutableArray*) + 200 (RCTTurboModule.mm:444) 10 colbakapp 0x00000001049fc538 facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1::operator()() const + 36 (RCTTurboModule.mm:463) 11 colbakapp 0x00000001049fc538 decltype(std::declval<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1&>()()) std::__1::__invoke[abi:ne190102... + 36 (invoke.h:149) 12 colbakapp 0x00000001049fc538 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:ne190102]<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMu... + 36 (invoke.h:224) 13 colbakapp 0x00000001049fc538 std::__1::__function::__alloc_func<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1, std::__1::allocator<face... + 36 (function.h:171) 14 colbakapp 0x00000001049fc538 std::__1::__function::__func<facebook::react::ObjCTurboModule::performVoidMethodInvocation(facebook::jsi::Runtime&, char const*, NSInvocation*, NSMutableArray*)::$_1, std::__1::allocator<facebook::... + 104 (function.h:313) 15 libdispatch.dylib 0x00000001a9bbcaac _dispatch_call_block_and_release + 32 (init.c:1575) 16 libdispatch.dylib 0x00000001a9bd6584 _dispatch_client_callout + 16 (client_callout.mm:85) 17 libdispatch.dylib 0x00000001a9bc52d0 _dispatch_lane_serial_drain + 740 (queue.c:3939) 18 libdispatch.dylib 0x00000001a9bc5dac _dispatch_lane_invoke + 388 (queue.c:4030) 19 libdispatch.dylib 0x00000001a9bd01dc _dispatch_root_queue_drain_deferred_wlh + 292 (queue.c:7198) 20 libdispatch.dylib 0x00000001a9bcfa60 _dispatch_workloop_worker_thread + 540 (queue.c:6792) 21 libsystem_pthread.dylib 0x000000022c350a0c _pthread_wqthread + 292 (pthread.c:2696) 22 libsystem_pthread.dylib 0x000000022c350aac start_wqthread + 8 Thread 3: 0 libsystem_pthread.dylib 0x000000022c350aa4 start_wqthread + 0 ... EOF
Replies
1
Boosts
0
Views
107
Activity
Jun ’25
iOS 18.5 crash with iPad 7 only
Weirdness going on here. Our app is crashing on startup with iPad 7s running iOS 18.5. Before updating to iOS 18.5, it was working fine on iPad 7s. Even with iOS 18.5, it is working fine on every device we have tried including dozens of other iPads and iPhones. We have narrowed it down to the SquareReaderSDK. If we remove that SDK, it will launch and work without issues. But, many of our users need the SquareReaderSDK. The crash happens at app load, before appDelegate didFinishLaunchingWithOptions. So we can't figure out any way to debug the issue. Is anyone else having a similar issue? Square thinks it is an Apple issue.
Replies
4
Boosts
0
Views
132
Activity
Jun ’25
Rapport de Bug : Problème Entitlements Family Controls / EAS Build
Le build iOS via EAS échoue systématiquement lors de la phase Xcode. Bien que les capacités Family Controls et App Groups soient activées sur le portail Apple Developer et configurées dans le app.json, les profils de provisionnement générés par EAS sont rejetés par Xcode car ils ne contiendraient pas les droits nécessaires. Configuration du projet : Targets (4) : App principale + 3 extensions (ShieldConfiguration, ShieldAction, ActivityMonitorExtension). Capabilities requises : Family Controls (Development), App Groups. EAS CLI Version : 18.0.6 (et versions antérieures testées). Erreur Xcode récurrente : error: Provisioning profile "[expo] com.*****.*** AdHoc 177230..." doesn't support the Family Controls (Development) capability.. error: Provisioning profile "... AdHoc ..." doesn't include the com.apple.developer.family-controls entitlement.. Ce qui a déjà été tenté (sans succès) : Configuration app.json : Ajout manuel des entitlements pour le bundle principal et configuration du plugin react-native-device-activity. Nettoyage Credentials : Suppression totale des profils et des identifiants sur le site Expo.dev ET sur le portail Apple Developer. +1 Forçage Sync : Utilisation de eas build --clear-cache et réponse "No" à la réutilisation des profils existants. Observation étrange : Le terminal indique souvent ✔ Synced capabilities: No updates, alors que les droits viennent d'être modifiés sur le portail Apple. Sur le portail Apple, les profils affichent pourtant bien "Family Controls (Development)" dans les capacités activées. Je met en piece jointe un des profiles.
Replies
1
Boosts
0
Views
68
Activity
2w
Feedbacks stay “unread" forever
I have two feedbacks now where I’ve been requested additional info, and provided it, but the feedback still has an “unread” dot, and is still in the “Requests” folder. I’ve asked multiple times to clear this status in one of those feedbacks (FB14888965), but got no response. Not the end of the world as long as the engineers are notified, but iirc the dot would disappear as soon as I replied.
Replies
6
Boosts
0
Views
242
Activity
Nov ’25
Watch App Not available to install
I added an Apple Watch app target for an iOS app. If I install it directly through Xcode it runs, however it seems to be able to communicate with iphone through Watch Connectivity framework and once I close the app it seems to uninstall itself from the watch. When I installed the iphone app frist, the app does not show up on the available apps on the iphone Watch application, what could be the issue ? The iphone app was created using react native through expo. Testing Devices Iphone 13 pro max IOS 26.0.1 --- Apple Watch Series 4 WatchOS 10.6
Replies
2
Boosts
0
Views
470
Activity
Nov ’25
How to pick which simulator i want to use in xcode
currently i'm in xcode 26.2 which want's me to use ios 26.2 but i only have ios 18.2 and i can't figure out how to make xcode use that simulator
Replies
1
Boosts
0
Views
99
Activity
Feb ’26
Running tests on multiple simulators and local mock servers
Hello, I have a question about running tests on multiple simulators. Currently, my company has a WDIO+Appium test suite with XCUITEST driver that runs on a single simulator through a mockttp proxy (we are intercepting and mocking some of the responses from our APIs and pass through the rest). In order to route the traffic we are currently using 'networksetup -setsecurewebproxy '. Everything works as expected. With growing number of tests we'd like to scale number of simulators on a single host to 3-5. We have a working setup but the problem are system-wide proxy settings routing traffic from multiple simulators, which we can't distinguish by UDID or any other means, we know of. We can spin multiple mock servers on the same machine but we are struggling to find the way to route the traffic on a simulator basis. In the end, both options are viable: 1 mock server running for multiple simulators N number of mock servers for N number of simulators Has anyone had the same/similar problem? How to approach this? We are currently running on Sequoia OSX and platform version 18.6. Thanks!
Replies
1
Boosts
0
Views
330
Activity
Feb ’26
symbolicate crashlog using .symbols files instead of dSYMs
Hi, Some crashes downloaded from TestFlight aren't symbolicated by Xcode and I don't know why, here's an example: Although all uploaded builds contain debug symbols (Symbols directory with .symbols files) and other crashlogs in the same version are symbolicated just fine (also visible on the above SS). I have access only to the .symbols files but not to the original dSYMs and I wonder how to perform symbolication manually. I tried pointing atos and symbolicatecrash utilities to respective .symbols file, but they are unable to work with it. I'm sure it's possible as TestFlight symbolicates crashlogs using only .symbols files somehow. Could you give a hint?
Replies
1
Boosts
0
Views
222
Activity
Feb ’26
Marking video as watched doesn’t work in Apple’s Developer iOS app
I’m using Developer iOS app to watch WWDC session videos. i notice it doesn’t record a video as watched after I watched it and even manual marking it using Mark as Watch has no effect. I remember the issue started several years ago because some old WWDC videos were marked watches.
Replies
0
Boosts
0
Views
107
Activity
Jul ’25
App Icon Dimension
I am trying to make an app icon 20 x 20 pixel dimension. I cannot get the icon to be sized this way. It gets blurry. I have used adobe express + illustrator. I have not been able to size it. It is a 400 x 400 dimension png. I want the proportion to be 20 x 20 without losing the clarity.
Replies
1
Boosts
0
Views
233
Activity
Feb ’26
Questions about macOS App Store update package generation and optimization
Hello, According to documentation, the App Store does not re-download the entire app when updating, but instead generates an update package containing only the changed content compared to the previous version. I’d like to clarify the following points: 1. Granularity of file changes If only part of a large file changes, does the update package include the entire file, or does it patch only the modified portions within that file? 2. Guideline on separating files The documentation recommends separating files that are likely to change from those that are not. How should this be interpreted in practice? 3. Verifying the diff result Is there a way for developers to check the actual diff result of the update package generated by the App Store without submitting the app? Is there a diff command tool or comparison method closer to the actual App Store update process? 4. Estimating update size during development For apps with large-scale resources, minimizing update size is critical. Are there any tools or best practices to estimate the size of the update package before submitting to the App Store? Any clarification or reference materials would be greatly appreciated. Thank you.
Replies
1
Boosts
0
Views
173
Activity
Jan ’26
Unable to open dependencies file when using a icon from Icon Composer (Xcode 26)
How to replicate: Design a icon in icon composer Save it and put the .icon file in your project, then in your targets put the name of the .icon file in there. Either clean build folder or restart IDE One Error: unable to open dependencies file (/Users/user/Library/Developer/Xcode/DerivedData/project-fqrfzzkwgrutdabmcqjeupvyetci/Build/Intermediates.noindex/project.build/Debug/project.build/assetcatalog_dependencies_thinned) And one warning: Icon export exited with status 255, signal 0 Is this a known issue or a easy fix? Or is it a issue on my end? Thanks
Replies
1
Boosts
0
Views
197
Activity
Jan ’26
On-demand resource exporting?
I'm a newbie to on-demand resources and I feel like I'm missing something very obvious. I've successfully tagged and set up ODR in my Xcode project, but now I want to upload the assets to my own server so I can retrieve them from within the app, and I can't figure out how to export the files I need. I'm following the ODR Guide and I'm stuck at Step #4, after I've selected my archive in the Archives window it says to "Click the Export button", but this is what I see: As shown in the screenshot, there is no export button visible. I have tried different approaches, including distributing to appstore connect, and doing a local development release. The best I've been able to do is find a .assetpack folder inside the archive package through the finder, but uploading that, or the asset.car inside it, just gives me a "cannot parse response" error from the ODR loading code. I've verified I uploaded those to the correct URL. Can anyone walk me through how to save out the file(s) I need, in a form I can just upload to my server? Thanks, Pete
Replies
0
Boosts
0
Views
101
Activity
May ’25
How to install cocoapods and pod
Hi, I am developing IOS(Android App) with React Native. I am very confused about cocoapods and pod and how to correctly install it on my new Macbook Pro M4. I am not using bash but I am using zsh. Note, actuallywhich pod return nothing During the preparation of my environment, it say CocoaPods is one of the dependency management system available for iOS. CocoaPods is a Ruby gem. You can install CocoaPods using the version of Ruby that ships with the latest version of macOS. the web site show two commands gem install cocoapods sudo gem install cocoapods I saw another command as well brew install cocoapods During different processes, I experienced several time the following error (Command 'pod install failed) Command pod install failed. └─ Cause: pod install --repo-update --ansi exited with non-zero code: 1 Then I am confused about cocoapods and pod. Are both he same? With my previous MacBook pro, I spend time to install cocoapod on my profile because Ruby was not the latest version on the system. But apparently, on my new Macbook Pro M4, the command ruby -v return (as well) ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin25] The current stable version is 4.0.0. I bought a new macbook pro M4 and I reinstalled node and all package for Rect Native 0.81 a expo 54 excepted cocoapods. Now, I need to configure the push notification and it's time to install cocoapods as it's require here But on my new macbook pro, I would like to make sure I do it correctly and I kindly ask your help and recommandation to install Ruby and cocoapods/pod Q1: Should I install cocoapods with brew install cocoapods or gem install cocoapods? Q2: what's is the difference or the common point with cocoapods and pod? Cocoapod web site said If using the default Ruby included with macOS, installation will require you to use sudo when installing gems As ruby -v print 'ruby 2.6.10p210', I suppose, I should not install cocoapod with sudo You can use a Ruby Version manager such as RVM or rbenv to manage multiple Ruby versions, or you can use Homebrew to install a newer Ruby with brew install ruby. As far I understand, I should not install cocoapods with the Ruby version of the system, then I suppose the command Q3: Will 'brew install cocopads' install the latest version on my profile? Will it upgrade the system version Q4: What will do the command brew install rbenv ruby-build rbenv install 3.2.2 (or better: rbenv install 4.0.0) in comparison with brew install ruby My guess I suppose that the following will help, but it would nice if you could correct me and clarify # All should be done in my profile brew install rbenv ruby-build echo 'eval "$(rbenv init - bash)"' >> ~/.zprofile source ~/.zprofile rbenv install 4.0.0 # rbenv global 4.0.0 # What is it? ruby -v gem install cocoapods Q5: But then, what about pod and the error message Command pod install failed. As you can see, I am a bit confused and I would appreciate your clarification I thanks you for your help and clarification and I wish you a happy new years
Replies
2
Boosts
0
Views
239
Activity
Jan ’26
AR location errors on cellular + WiFi model iPad with device connected to Wi-Fi
I am developing an Augmented Reality (AR) navigation application for the iPad, utilizing the ARCL library to place Points of Interest (POIs) in the real world. The application's behavior varies significantly based on the device's networking configuration: Cellular Network (Expected Behavior): On an iPad with a cellular modem, when using the cellular network, all POIs are placed accurately with correct orientation. Wi-Fi Only (Expected Behavior): On a Wi-Fi-only model (no GPS chip), POI placement is inaccurate, confirming the need for an external GPS receiver for that hardware configuration. Cellular + Wi-Fi (Anomalous Behavior): The iPad is a cellular model (equipped with GNSS/GPS). The device is connected to a Wi-Fi network (enforced via an MDM profile, preventing the user from disabling Wi-Fi). When actively connected to this specific Wi-Fi network, the AR POIs consistently display with an incorrect orientation and placement, even though the device hardware has a dedicated GPS chip. The placement error strongly suggests that the device's determined location or heading is erroneous. It appears that the active Wi-Fi connection is somehow interfering with or overriding the high-accuracy GNSS/GPS data, leading to a flawed Core Location determination that negatively impacts the ARCL world tracking and anchor placement. Has anyone experienced a scenario where an active Wi-Fi connection on a cellular iPad model causes Core Location to prioritize less accurate location data (potentially Wi-Fi-based location services) over the device's built-in GNSS/GPS, resulting in severe orientation errors? We observed that on Apple map(native application) as well it is showing wrong location and orientation when it is connected to WiFi
Replies
0
Boosts
0
Views
296
Activity
Dec ’25
Unable to Enable “Media Services (MusicKit, ShazamKit)” When Creating a Key
I am trying to integrate Apple Music API using MusicKit and need to generate a Developer Token. However, when I try to create a new key from the Certificates, Identifiers &amp; Profiles section, the “Media Services (MusicKit, ShazamKit, Apple Music Feed)” option is grayed out. We are getting the error 'there are no identifiers available that can be associated with the key.' Although we did checkmark 'musickit' in app services. I have already: Enrolled in the paid Apple Developer Program Created a valid App ID under Identifiers Logged in as the Account Holder Tried multiple browsers and devices Despite this, the option remains disabled. Could you please enable this or let me know what further steps I need to take? Thank you!
Replies
0
Boosts
0
Views
251
Activity
Apr ’25
WeatherKit "Pricing and Additional Endpoints" question.
In the availability and pricing section, we have reviewed the plans and we will be upgrading to 50 or 100 million calls/month but before we do, we have a couple questions. Does the API have rate limit or throttling? Do you have additional weather forecast endpoints like hail, radar, or pollen forecast? I see in this thread https://developer.apple.com/forums/thread/795642 that air quality is not available Thanks
Replies
0
Boosts
0
Views
188
Activity
Aug ’25
Best replacement for MCL
So, as we found out from WWDC, the migration to Apple Silicon is inevitable. Does anyone have a good recommendation for a replacement for Macintosh Common Lisp on Apple Silicon? I was using it back in the MPW days and struggling to keep the Lisp code working, but Apple Silicon has thrown a money wrench at it! Thanks in advance for any advice on any available Apple Silicon Lisp development tools!
Replies
2
Boosts
0
Views
132
Activity
Jul ’25
[REQUEST] for a tool/method/guidance how to create privacy manifest (PrivacyInfo.xcprivacy) when you don't have Xcode/mac
Hello, PrivacyInfo.xcprivacy Is primordial and without it the app is rejected from the Store I believe. All 5 ressources I had found related to it, mention XCODE, or explain how to add the code to langages that I don't use (Switf i think?) etc. I am building the app thought CI/CD, so prior to building it the app does not have privacy manifest and there is not way to generate it automatically without xcode it seems. My app is written in Flutter prior to becoming an iOS app. I am seeking for a method to do that. Thanks.
Replies
1
Boosts
0
Views
138
Activity
Sep ’25
Testing and Debugging Code Running in the Background
I regularly bump into folks confused by this issue, so I thought I’d collect my thoughts on the topic into a single (hopefully) coherent post. If you have questions or comments, put them in a new thread here on the forums. Feel free to use whatever subtopic and tags that apply to your situation, but make sure to add the Debugging tag so that I see your thread go by. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Testing and Debugging Code Running in the Background I regularly see questions like this: My background code works just fine in Xcode but fails when I download the app from the App Store. or this: … or fails when I run my app from the Home screen. or this: How do I step through my background code? These suggest a fundamental misunderstanding of how the debugger interacts with iOS’s background execution model. The goal of this post is to explain that misunderstanding so that you can effectively test and debug background code. Note The focus of this post is iOS. The advice here generally applies to any of iOS’s ‘child’ platforms, so iPadOS, tvOS, and so on. However, there will be some platform specific differences, especially on watchOS. This advice here doesn’t apply to macOS. It’s background execution model is completely different than the one used by iOS. Understand the Fundamentals The key point to note here is that the debugger prevents your app from suspending. This has important consequences for iOS’s background execution model. Normally: iOS suspends your app when it’s in the background. Once your app is suspended, it becomes eligible for termination. The most common reason for this is that the system wants to recover memory, but it can happen for various other reasons. For example, the system might terminate a suspended app in order to update it. Under various circumstances your app can continue running after moving to the background. A great example of this is the continued processed task feature, introduced in iOS 26 beta. Alternatively, your app can be resumed or relaunched in the background to perform some task. For example, the region monitor feature of Core Location can resume or relaunch your app in the background when the user enters or leaves a region. If no app needs to be executing, the system can sleep the CPU. None of this happens in the normal way if the debugger is attached to your app, and it’s vital that you take that into account when debugging code that runs in the background. An Example of the Problem For an example of how this can cause problems, imagine an app that uses an URLSession background session. A background session will resume or relaunch your app in the background when specific events happen. This involves two separate code paths: If your app is suspended, the session resumes it in the background. If your app is terminated, it relaunches it in the background. Neither code path behaves normally if the debugger is attached. In the first case, the app never suspends, so the resume case isn’t properly exercised. Rather, your background session acts like it would if your app were in the foreground. Normally this doesn’t cause too many problems, so this isn’t a huge concern. On the other hand, the second case is much more problematic. The debugger prevents your app from suspending, and hence from terminating, and thus you can’t exercise this code path at all. Seek Framework-Specific Advice The above is just an example, and there are likely other things to keep in mind when debugging background code for a specific framework. Consult the documentation for the framework you’re working with to see if it has specific advice. Note For URLSession background sessions, check out Testing Background Session Code. The rest of this post focuses on the general case, offering advice that applies to all frameworks that support background execution. Run Your App Outside of Xcode When debugging background execution, launch your app from the Home screen. For day-to-day development: Run the app from Xcode in the normal way (Product > Run). Stop it. Run it again from the Home screen. Alternatively, install a build from TestFlight. This accurately replicates the App Store install experience. Write Code with Debugging in Mind It’s obvious that, if you run the app without attaching the debugger, you won’t be able to use the debugger to debug it. Rather: Extract the core logic of your code into libraries, and then write extensive unit tests for those libraries. You’ll be able to debug these unit tests with the debugger. Add log points to help debug your integration with the system. Treat your logging as a feature of your product. Carefully consider where to add log points and at what level to log. Check this logging code into your source code repository and ship it — or at least the bulk of it — as part of your final product. This logging will be super helpful when it comes to debugging problems that only show up in the field. My general advice is that you use the system log for these log points. See Your Friend the System Log for lots of advice on that front. One of the great features of the system log is that disabled log points are very cheap. In most cases it’s fine to leave these in your final product. Attach and Detach In some cases it really is helpful to debug with the debugger. One option here is to attach to your running app, debug a specific thing, and then detach from it. Specifically: To attach to a running app, choose Debug > Attach to Process > YourAppName in Xcode. To detach, choose Debug > Detach. Understand Force Quit iOS allows users to remove an app from the multitasking UI. This is commonly known as force quit, but that’s not a particularly accurate term: The multitasking UI doesn’t show apps that are running, it shows apps that have been run by the user. The UI shows recently run apps regardless of whether they’re in the foreground, running in the background, suspended, or terminated. So, removing an app from the UI may not actually quit anything. Removing an app sets a flag that prevents the app from being launched in the background. That flag gets cleared when the user next launches the app manually. Note In some circumstances iOS will not honour this flag. The exact cases where this happens are not documented and have changed over time. Keep these behaviours in mind as you debug your background execution code. For example, imagine you’re trying to test the URLSession background relaunch code path discussed above. If you force quit your app, you’ll never hit this code path because iOS won’t relaunch your app in the background. Rather, add a debug-only button that causes your app to call exit. IMPORTANT This suggestion is for debugging only. Don’t include a Quit button in your final app! This is specifically proscribed by QA1561. Alternatively, if you’re attached to your app with Xcode, simply choose Product > Stop. This is like calling exit; it has no impact on your app’s ability to run in the background. Test With Various Background App Refresh Settings iOS puts users in control of background execution via the options in Settings > General > Background App Refresh. Test how your app performs with the following settings: Background app refresh turned off overall Background app refresh turned on in general but turned off for your app Background app refresh turned on in general and turned on for your app IMPORTANT While these settings are labelled Background App Refresh, they affect subsystems other than background app refresh. Test all of these cases regardless of what specific background execution feature you’re using. Test Realistic User Scenarios In many cases you won’t be able to fully test background execution code at your desk. Rather, install a TestFlight build of your app and then use the device as a normal user would. For example: To test Core Location background execution properly, actual leave your office and move around as a user might. To test background app refresh, use your app regularly during the day and then put your device on charge at night. Testing like this requires two things: Patience Good logging The system log may be sufficient here, but you might need to investigate other logging solutions that are more appropriate for your product. These testing challenges are why it’s critical that you have unit tests to exercise your core logic. It takes a lot of time to run integration tests like this, so you want to focus on integration issues. Before starting your integration tests, make sure that your unit tests have flushed out any bugs in your core logic. Revision History 2025-08-12 Made various editorial changes. 2025-08-11 First posted.
Replies
0
Boosts
0
Views
220
Activity
Aug ’25