Hi, I’m having trouble installing GPT 1.1 on macOS Sequoia 15.3.1 using Xcode Command Line Tools 16.0.
I downloaded Evaluation Environment for Windows Games 2.1, mounted the image, and opened the README file. Then, I followed Option 2 to build the environment from scratch:
Set up your development and Homebrew environment
Ensure you are using Command Line Tools for Xcode 15.1. You can download this older version from:
https://developer.apple.com/downloads
Note: There is a header file layout change that prevents using newer versions of the macOS SDK.
softwareupdate --install-rosetta
arch -x86_64 zsh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
which brew
brew tap apple/apple http://github.com/apple/homebrew-apple
brew -v install apple/apple/game-porting-toolkit
At first, I noticed that I needed to use CLT 15.1, which is not supported on later macOS versions (including mine). Even when I tried using 15.3 (which is somehow supported), I received a message stating that I needed CLT v16.0 or higher to install GPT.
After following all the steps and waiting for the installation to complete, I got the following error:
==> Installing apple/apple/game-porting-toolkit
==> Staging /Users/tycjanfalana/Library/Caches/Homebrew/downloads/7baed2a6fd34b4a641db7d1ea1e380ccb2f457bb24cd8043c428b6c10ea22932--crossover-sources-22.1.1.tar.gz in /private/tmp/game-porting-toolkit-20250316-15122-yxo3un
==> Patching
==> /private/tmp/game-porting-toolkit-20250316-15122-yxo3un/wine/configure --prefix=/usr/local/Cellar/game-porting-toolkit/1.1 --disable-win16 --disable-tests --without-x --without-pulse --without-dbus --without-inotify --without-alsa --without-capi --without-oss --without-udev --without-krb5 --enable-win64 --with-gnutls --with-freetype --with-gstreamer CC=/usr/local/opt/game-porting-toolkit-compiler/bin/clang CXX=/usr/local/opt/game-porting-toolkit-compiler/bin/clang++
checking build system type... x86_64-apple-darwin24.3.0
checking host system type... x86_64-apple-darwin24.3.0
checking whether make sets $(MAKE)... yes
checking for gcc... /usr/local/opt/game-porting-toolkit-compiler/bin/clang
checking whether the C compiler works... no
configure: error: in `/private/tmp/game-porting-toolkit-20250316-15122-yxo3un/wine64-build':
configure: error: C compiler cannot create executables
See `config.log' for more details
==> Formula
Tap: apple/apple
Path: /usr/local/Homebrew/Library/Taps/apple/homebrew-apple/Formula/game-porting-toolkit.rb
==> Configuration
HOMEBREW_VERSION: 4.4.24
ORIGIN: https://github.com/Homebrew/brew
HOMEBREW_PREFIX: /usr/local
Homebrew Ruby: 3.3.7 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.3.7/bin/ruby
CPU: 14-core 64-bit westmere
Clang: 16.0.0 build 1600
Git: 2.39.5 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 15.3.1-x86_64
CLT: 16.0.0.0.1.1724870825
Xcode: N/A
Rosetta 2: true
==> ENV
HOMEBREW_CC: clang
HOMEBREW_CXX: clang++
CFLAGS: [..]
Error: apple/apple/game-porting-toolkit 1.1 did not build
Logs:
/Users/xyz/Library/Logs/Homebrew/game-porting-toolkit/00.options.out
/Users/xyz/Library/Logs/Homebrew/game-porting-toolkit/01.configure
/Users/xyz/Library/Logs/Homebrew/game-porting-toolkit/01.configure.cc
/Users/xyz/Library/Logs/Homebrew/game-porting-toolkit/wine64-build
If reporting this issue, please do so to (not Homebrew/brew or Homebrew/homebrew-core):
apple/apple
In config.log, I found this:
configure:4672: checking for gcc
configure:4704: result: /usr/local/opt/game-porting-toolkit-compiler/bin/clang
configure:5057: checking for C compiler version
configure:5066: /usr/local/opt/game-porting-toolkit-compiler/bin/clang --version >&5
clang version 8.0.0
Target: x86_64-apple-darwin24.3.0
Thread model: posix
InstalledDir: /usr/local/opt/game-porting-toolkit-compiler/bin
configure:5077: $? = 0
configure:5066: /usr/local/opt/game-porting-toolkit-compiler/bin/clang -v >&5
clang version 8.0.0
Target: x86_64-apple-darwin24.3.0
Thread model: posix
InstalledDir: /usr/local/opt/game-porting-toolkit-compiler/bin
configure:5077: $? = 0
configure:5066: /usr/local/opt/game-porting-toolkit-compiler/bin/clang -V >&5
clang-8: error: argument to '-V' is missing (expected 1 value)
clang-8: error: no input files
configure:5077: $? = 1
configure:5066: /usr/local/opt/game-porting-toolkit-compiler/bin/clang -qversion >&5
clang-8: error: unknown argument '-qversion', did you mean '--version'?
clang-8: error: no input files
configure:5077: $? = 1
configure:5066: /usr/local/opt/game-porting-toolkit-compiler/bin/clang -version >&5
clang-8: error: unknown argument '-version', did you mean '--version'?
clang-8: error: no input files
configure:5077: $? = 1
configure:5097: checking whether the C compiler works
configure:5119: /usr/local/opt/game-porting-toolkit-compiler/bin/clang [...]
dyld[15547]: Symbol not found: _lto_codegen_debug_options_array
Referenced from: <E33DCAC4-3116-3019-8003-432FB3E66FB4> /Library/Developer/CommandLineTools/usr/bin/ld
Expected in: <43F5C676-DE37-3F0E-93E1-BF793091141E> /usr/local/Cellar/game-porting-toolkit-compiler/0.1/lib/libLTO.dylib
clang-8: error: unable to execute command: Abort trap: 6
clang-8: error: linker command failed due to signal (use -v to see invocation)
configure:5123: $? = 254
configure:5163: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "Wine"
| #define PACKAGE_TARNAME "wine"
| #define PACKAGE_VERSION "7.7"
| #define PACKAGE_STRING "Wine 7.7"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h. */
|
| int
| main (void)
| {
|
| ;
| return 0;
| }
configure:5168: error: in `/private/tmp/game-porting-toolkit-20250316-15122-yxo3un/wine64-build':
configure:5170: error: C compiler cannot create executables
See `config.log` for more details
Does anyone have any ideas on how to fix this?
General
RSS for tagDive into the vast array of tools and services available to developers.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hey, I am using the terminal a lot. Since I updated to Sonoma (so, really a long time ago). My prompt or more precise the hostname always changes between three states. Sometimes it is username@Macbook-Pro-of-XXX, sometimes username@MacbookPro and sometimes it's username@xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb. The latter is probably my UUID. Does anyone have a clue why this randomly changes?
In our App we have a need to open Apple Developer App from our iOS App to guide user to Developer App.
But looks like there is no confirmed URL Scheme provided.
Can you help on this.
Topic:
Developer Tools & Services
SubTopic:
General
Hey, Since I set up push notifications for my Flutter app following this tutorial https://documentation.onesignal.com/docs/flutter-sdk-setup, my Flutter app no longer builds for iOS in the CD pipeline. I get the following error:
[17:24:47]: ▸ ProcessException: Process exited abnormally with exit code -6:
[17:24:47]: ▸ Command line invocation:
[17:24:47]: ▸ /Applications/Xcode_15.4.app/Contents/Developer/usr/bin/xcodebuild -list
[17:24:47]: ▸ User defaults from command line:
[17:24:47]: ▸ IDEPackageSupportUseBuiltinSCM = YES
[17:24:47]: ▸ 2025-03-10 17:24:46.855 xcodebuild[13337:34491] [MT] DVTAssertions: ASSERTION FAILURE in DevToolsCore/Xcode3Core/LegacyProjects/Frameworks/DevToolsCore/DevToolsCore/ProjectModel/DataModel/References/SynchronizedGroups/PBXFileSystemSynchronizedAbstractGroup.m:28
[17:24:47]: ▸ Details: Assertion failed: IDEFileSystemSynchronizedGroupsAreEnabled()
[17:24:47]: ▸ Object: <PBXFileSystemSynchronizedRootGroup>
[17:24:47]: ▸ Method: +allocWithZone:
[17:24:47]: ▸ Thread: <_NSMainThread: 0x60000026c200>{number = 1, name = main}
[17:24:47]: ▸ Hints:
[17:24:47]: ▸ Backtrace:
[17:24:47]: ▸ 0 -[DVTAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in DVTFoundation)
[17:24:47]: ▸ 1 _DVTAssertionHandler (in DVTFoundation)
[17:24:47]: ▸ 2 _DVTAssertionFailureHandler (in DVTFoundation)
[17:24:47]: ▸ 3 _DVTAssertionWarningHandler (in DVTFoundation)
My pipeline looks like this:
name: iOS Build and Deploy to App Store with Custom Version
on:
workflow_dispatch:
inputs:
version:
description: 'Version number'
required: true
default: '1.0.0'
env:
FLUTTER_CHANNEL: "stable"
RUBY_VERSION: "3.2.2"
jobs:
build_ios:
name: Build iOS
runs-on: macos-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY_VERSION }}
bundler-cache: true
working-directory: 'daytistics/ios'
- name: Clean up vendor
working-directory: 'daytistics/ios'
run: rm -rf vendor
- name: Install Bundler Gems
working-directory: 'daytistics/ios'
run: bundle install
- name: Run Flutter tasks and get pub packages
uses: subosito/flutter-action@v2.16.0
with:
flutter-version-file: 'daytistics/pubspec.yaml'
channel: ${{ env.FLUTTER_CHANNEL }}
cache: true
- name: Get Flutter Packages
working-directory: ./daytistics
run: flutter pub get
- name: Install Bundler Gems
working-directory: 'daytistics/ios'
run: |
bundle install
bundle exec pod repo update # Add this line
# Remove the "Reinstall CocoaPods" step entirely
- name: Pod Install
working-directory: 'daytistics/ios'
run: bundle exec pod install
- name: Clean Flutter build
working-directory: ./daytistics
run: flutter clean
- name: Create .env file
working-directory: ./daytistics
run: touch .env
- uses: maierj/fastlane-action@v3.1.0
with:
lane: 'release_app_store'
subdirectory: daytistics/ios
options: '{
"version_number": "${{ github.event.inputs.version }}",
"env_vars": ["SUPABASE_URL", "SUPABASE_ANON_KEY", "POSTHOG_API_KEY", "SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID", "SENTRY_DSN"]
}'
env:
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
ASC_KEY_P8_BASE64: ${{ secrets.ASC_KEY_P8_BASE64 }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
APP_BUNDLE_ID: ${{ secrets.APP_BUNDLE_ID }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID: ${{ secrets.SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
Everything works as expected in the simulator. However, I think that the problem isn't related to the pipeline. Instead I think it is related to the "Signing Capabilities" in X-Code:
https://i.sstatic.net/E0tSetZP.png
https://i.sstatic.net/oC1xG0A4.png
Thanks for your help!
I have an issue when i use external tester with a public link and emails.
Test fly is well installed but when i have to open the app, it just charge as seen in the screen.
Title basically explains what my issue is, from what I understand the only way to set an icon in an tauri app is using a icns file, I could be wrong but I don't know how to get macos theme changing stuff to work with it because of the icns file.
Hi everyone, I've been trying to integrate with Microsoft EntraID for more than a week. I've followed every tutorial, ChatGPT, Cloude.ai, etc, but nothing works, and I realized that the problem is setting up information inside the Info.plist correctly. In the old days, we were able to edit it, but now it's a mess. I'm working with Xcode 15.2. Unfortunately, my computer does not accept more upgrades. Yes, I know I have to buy a new one, but I'm not sure if the new version will help me solve that. Does anyone have a project example or some experience with Microsoft EntraID authentication using SwiftUI?
All the examples in the project are really old and usually don't use SwiftUI
Topic:
Developer Tools & Services
SubTopic:
General
After combing the forums and release nodes, here are some extra notes to help other developers using Apple-Hosted Background Assets. I don't promise I got this perfect, but it may help direct you.
AssetPack.Status is an OptionSet (not an enum!) - Critical API detail missing from guide
It's a bitmask where values can be combined
2⁰ (1) = available to download
2¹ (2) = update available
2² (4) = up to date
2⁶ (64) = downloaded
Example: status value 69 = 0b1000101 = available + up to date + downloaded
Use .contains() method to check specific flags
AssetPack.version property - Undocumented feature
Auto-assigned by App Store Connect for Apple-hosted packs
Increments with each upload of same asset pack ID
No file deduplication across asset packs
Same file in two packs = counts twice toward 200GB limit
Best practice: create separate pack for shared files
Shared namespace path requirements
Asset pack ID is NOT part of file path
Each file must have unique relative path across ALL app's asset packs
Example: Foo/10/239/414.png and Bar/10/239/414.png are distinct and won't collide
Additional url(for:) bugs beyond iOS 26.1 fix
iOS 26 Beta 5: "item with same name already exists" error
Workaround: Request URL for directory, then manually append filename
TestFlight-only availability - Major limitation not mentioned!
Apple-hosted packs currently ONLY work for internal testers on TestFlight or from App Store.
Won't work from Xcode until "later this year"
HTTP 400 errors expected for non-TestFlight installs
ba-serve port workaround
URL override port bug exists on multiple device types
Use ba-serve -p 443 instead of custom ports
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
In the online documentation for InstallerJS, it is stated that the unit for the availableKilobytes property of the target field is kilobytes.
Isn't it actually bytes because of a bug in the very first release of macOS that supported InstallerJS?
[Q] Has there been a fix in the recent years regarding this property that would explain why the documentation says it's kilobytes? Even though at the time of this writing, the unit is still bytes when you call my.target.availableKilobytes
I'm using this call to dump the value of this property in install.log:
system.log(my.target.availableKilobytes + '');
Ref. https://developer.apple.com/documentation/installer_js/target/1811975-availablekilobytes
(FB20448952)
I have developed a Swift macro called @CodableInit in the SwiftCodableMacro module, and I’m able to use it successfully in my main project.
Here’s an example usage:
import SwiftCodableMacro
@CodableInit // This is for Codable macros
public class ErrorMonitoringWebPlugin {
public var identifier: UUID = UUID()
// MARK: - Codable
required public init(from decoder:Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
identifier = try values.decode(UUID.self, forKey: .identifier)
}
}
However, when I try to write a unit test for the ErrorMonitoringWebPlugin class, I encounter an issue. Here's the test case:
func testCodableSubjectIdentifierShouldEqualDecodedSubjectIdentifier() {
self.measure {
let encoder = JSONEncoder()
let data = try? encoder.encode(subject)
//Here I am getting this error
Class 'JSONEncoder' requires that 'ErrorMonitoringWebPlugin' conform to 'Encodable'
let decoder = JSONDecoder()
let decodedSubject = try? decoder.decode(ErrorMonitoringWebPlugin.self, from: data!)
XCTAssertEqual(subject.identifier, decodedSubject?.identifier)
}
}
The compiler throws an error saying:
Class 'JSONEncoder' requires that 'ErrorMonitoringWebPlugin' conform to 'Encodable'
Even though the @CodableInit macro is supposed to generate conformance, it seems that this macro-generated code is not visible or active inside the test target.
How can I ensure that the @CodableInit macro (from SwiftCodableMacro) is correctly applied and recognized within the XCTest target of my main project?
在将游戏从 Nintendo Switch 移植到 Mac 的过程中使用 .NET (NativeAOT) 有哪些限制和注意事项(尽管两者都是 ARM)?
Topic:
Developer Tools & Services
SubTopic:
General
am I correct in thinking that local agentsic coding is going to come to Xcode at some point ? I'm thinking cursor ai or windsurf / cline style.
Topic:
Developer Tools & Services
SubTopic:
General
I'm attempting to create a proof of concept of a static library, distributed as an XCFramework, which has two local XCFramework dependencies.
The reason for this is because I'm working to provide a single statically linked library to a customer, instead of providing them with the static library plus the two dependencies.
The Issue
With a fairly simple example project, I'm not able to access any code from the static library without the complier throwing a "No such module" error and saying that it cannot find one of the dependent modules.
Project Layout
I have an example project that has some example targets with basic example code.
Example Project on Github
Target: FrameworkA
Mach-0 Type: Dynamic
Build Mergable Library: Yes
Skip Install: No
Build Libraries For Distribution: Yes
Target: FrameworkB
Mach-0 Type: Dynamic
Build Mergable Library: Yes
Skip Install: No
Build Libraries For Distribution: Yes
XCFrameworks are being generated from these two targets using Apple's recommendations. I've verified that the mergable metadata is present in both framework's Info.plist files.
Each exposes a single struct which will return an example String.
Finally I have my SDK target:
Target: ExampleKit
Mach-0 Type: Static
Build Mergable Library: No
Create Merged Binary: Manual
Skip Install: No
Build Libraries For Distribution: Yes
The two .xcframework files are in the Target's folder structure as well. The "Link Binary With Libraries" build phase includes them and they're Required.
Inside of the ExampleKit target, I have a single public struct which has two static properties which return the example strings from FrameworkA and FrameworkB.
I then have another script which generates an XCFramework from this target.
Expectations
Based on Apple's documentation and the "Meet Mergable Libraries" WWDC session I would expect that I could make a simple iOS app, link the ExampleKit.xcframework, import ExampleKit inside of a file, and be able to access the single public struct present in ExampleKit. Unfortunately, all I get is "No such module FrameworkA".
I would expect that FrameworkA and FrameworkB would have been merged into ExampleKit? I'm really unsure of where to go from here in debugging this. And more importantly, is this even a possible thing to do?
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!
Topic:
Developer Tools & Services
SubTopic:
General
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.
I am working on an iOS app and I want to achieve on demand module download inside the app when the user clicks on the module icon which he wants to use.
The idea is that we have a super app consisting of multiple modules say four independent apps/features and I want to separate each one so that when the user selects a specific app/feature, it’s downloaded on demand and then opened directly within the same super app resulting in a lower app size initially
I want to upload all the code of all modules to app store connect but when the user downloads the app, then only one module's code should be available to the user, the rest of the module's code should be downloaded when the user wants to use that module. I know apple restricts downloading new code but in my case I want to upload all the code to app store for review but just give option to the user to get rest of the code when needed. Any guidance, architectural advice, or example implementations would be highly appreciated.
Topic:
Developer Tools & Services
SubTopic:
General
Tags:
App Clips
iOS
App Store Connect
On demand resources
Hi,
is there a compiled version of MailCore.swift? I want to build an easy-to-use mail app for my mother, who is 97, has a MacBook Air, but Apple Mail is too complicated for her. chatGPT said I am too stupid to compile it by myself.
Regards Stephan
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
Topic:
Developer Tools & Services
SubTopic:
General
Hello,
I'm developing a macOS application that uses the Virtualization framework to run Linux virtual machines (specifically Ubuntu and Fedora) on Apple Silicon Macs.
I've noticed that while the macOS host properly supports all trackpad gestures, the two-finger tap gesture for right-click does not work within the Linux guest. Only the primary click is recognized. This behavior is consistent across different Linux distributions and desktop environments (GNOME, KDE, etc.).
I would like to confirm:
Is the macOS Virtualization framework expected to support trackpad gestures such as two-finger tap for right-click within Linux guest VMs?
If not currently supported, is there a known workaround to enable right-click functionality for the trackpad in Linux guests? (e.g., configuration changes in the VM, Linux kernel input modules, or framework-level adjustments.)
Any insights or suggestions would be greatly appreciated.
Thank you!