Build, test, and submit your app using Xcode, Apple's integrated development environment.

Xcode Documentation

Posts under Xcode subtopic

Post

Replies

Boosts

Views

Activity

Main Camera access
Hi, I have downloaded the example to use the Main Camera with Apple Vision Pro. I got the license file, the Entitlements file and I see Main Camera Access on capabilities view. I have attached the AVP with the development kit band, however I don't see the device as option to install the App. I selected Managed Run Destinations and I see the AVP as connected. Do I miss anything to install the App on my AVP?
1
0
93
Jul ’25
Unable to send iMessage game extension on simulator
I recently started building an iMessage game, and whenever I try to send the game through the first contact on the simulator to loop back into the second one, I get an alert saying "Unable to send. The recipient can not receive this item via satellite". Has anyone experienced this? If so, do you have a solution? It is making it a bit difficult to test the flow of my app.
1
0
122
Jun ’25
Xcode doesn't recognise changes in file status, unable to stage and commit to repo.
I'm using Version 16.4 (16F6) of Xcode on macOS 15.5 (24F74) and everything was working fine until I selected an older build to branch out from. Now, Xcode cant properly know the file status as it keeps on changing it after quitting and relaunching it. The changes in the file are there and when trying to commit to the local repo it doesn't show any changes to stage. At present I'm relying on making project folder backups as a way of backing up builds. Any suggestions what can be done?
0
0
224
Jul ’25
TestFlight version of Mac Multiplatform is on the wrong AppStore, but not the iOS TestFlight build
Hello, I'm sure I've probably missed a checkbox somewhere.. I have a mulitiplatform app, when building from Xcode, and not using the testing config, both iOS and macOS show the correct App Store currency.. When I distribute a build through TestFlight, my Mac version shows a different country/currency price (the US one). I can't find anywhere to change this. My Mac is signed into the same sandbox account as my iOS device. Can anyone help?
1
0
217
Jan ’26
Missing StoreKit configuration file option in Xcode
Hello guys, I’ve been recently trying to learn how to implement in app purchases and in every tutorial they create store kit configuration file but in my Xcode there is no such option - I even uninstalled my Xcode and installed 16.4 release version - still missing And when I try to create this file manually, naming it something.storekit I get “The operation couldn’t be completed. (IDEStoreKitEditor.IDEStoreKitEditorConfigurationError error 0)” but such error isn’t documented anywhere :( Few people mentioned that restarting Xcode fixes the problem for them, but that is not the case for me, I'm having this problem on both Xcode 16.3 and 16.4 and nothing seems to fix it - it's really frustrating Any help is greatly appreciated
2
0
216
Jul ’25
Xcode has high CPU usage when apparently doing nothing for hours
In 2020 I created FB7719215, which I updated several times (including just now) and in 2021 I created FB9204092, but the issue is still there: when I keep Xcode open (currently version 16.3), my battery drains much quicker, even when it's apparently idle. For instance, today I barely did anything in Xcode, but still it has been at a constant 90% CPU for the last hours, and I keep checking the battery percentage to check how much time I have left. Does anyone at Apple has an explanation, workaround and/or fix?
2
0
165
Jun ’25
Trouble Distributing iOS + WatchOS App as a Bundle (Info.plist / Target Confusion)
Hi all, I’m running into an issue with my iOS + Apple Watch app project, and I could really use some advice. My WatchOS app requires an iOS companion for settings and configuration, so both apps need to be distributed together. Here’s how I structured my Xcode project: Main iOS App target WatchOS App target WatchOS Extension target However, I’m very confused about how these targets interact, and things are not working as expected. The problem: I can build and run the WatchOS app and its extension independently in the simulator by selecting their schemes. When I select the main iOS app scheme, I get an error about ITSWatchOnlyContainer in the Info.plist—even though there’s no Info tab for that target in Xcode. I’m able to distribute the WatchOS app by itself, and the extension as well. But I can’t distribute them bundled together as a single package, and I haven’t found any clear resources that explain how to fix this. This is my very first app, and it’s frustrating to get stuck just before the finish line! Project Structure / steps to reproduce Let’s say my project is called MyAppProject, with these targets: MyAppProject Main iOS App Embedded target: MyAppProject Watch App Bundle identifier: com.example.MyAppProject MyAppProject Watch App WKCompanionAppBundleIdentifier: com.example.MyAppProject “Requires iOS App”: YES MyAppProject Extension Bundle identifier: com.example.MyAppProject When running from the MyAppProject scheme, I get this error (even though I can’t see or edit the Info.plist in Xcode for this target): “Please try again later. This app has the ITSWatchOnlyContainer key set in its Info.plist, which identifies it as a shell app surrounding a Watch-only app; these are not installable.” As a result, I can’t distribute the app as a bundle. I’d appreciate help understanding: How should the Info.plist files be configured for each target? What do I do if the Info.plist path seems missing in the Xcode UI? Is there a “correct” way to structure an iOS + WatchOS app for bundled distribution?
0
0
132
Jun ’25
Xcode keeps touching readonly xcschemes on launch
We use Perforce for version control, which means that all files not checked out are readonly. Lately Xcode has started displaying a fixed sequence of these dialogs on every launch: This means it is trying to modify some readonly file within the xcodeproj. Out of our 60 subprojects this always comes up for the exact same 6. I have so far uncovered the following: It is really trying to modify the shared xcschemes and not the pbxproj. (If I set those to writable the dialog does not appear.) Actually the files are not changed if I click "Unlock", but the com.apple.provenance xattr flag is removed from them. These xcschemes are of version 1.7 while all others are 1.3. If I change them to 1.3 Xcode still wants to modify them at launch and sets them back to 1.7. This is very annoying. What is it about these xcschemes that upsets Xcode, and how can I stop these dialogs from appearing? (One workaround is to keep them checked out dumped to a changelist that I never submit, but that is error prone when I do need to make changes to those, and also is not really possible when jumping between old states of the repo to find the change that broke something.)
0
0
151
Jul ’25
Signing Issues with VisionOS app
I am having an issue with signing and provisioning a Vision OS app. I have an iOS app and a VisionOS app. Everything works fine on the iOS but having issues with the VisionOS. First, I am having issues with xcodebuild -exportArchive. When I run it on an archive of my VisionOS app I get ** EXPORT FAILED ** error: exportArchive No Accounts error: exportArchive No profiles for 'X' were found Where X is my bundle ID. Meanwhile the iOS app succeeds. This is on a CI machine but I confirmed the distribution provision profile for the vision OS app is installed on the machine. Even if I change the value of the -exportOptionsPlist to the one I used for the iOS project I get this error. Is the issue in the archive itself? The archives are generated from building in Unity and archiving the xcodeproject with xcodebuild archive Second, as a workaround I archived a debug ipa on my machine and uploaded this ipa to my CI machine which has the credentials to sign for distribution. I use this script as an example as how to resign the IPA: https://gist.github.com/lodalo/754a35b48d382ae99b25 I remove the CodeSignatures and codesign both .app and UnityFramework.framework. Using this resigned IPA I get this error when I try to upload to app store connect (via Transporter app and altool) errors: Validation failed (409) Missing or invalid signature. The bundle 'X' at bundle path 'Payload/Y.app' is not signed using an Apple submission certificate. To verify the signing I used codesign -dvvv --entitlements - On both the iOS and VisionOS app and they have the same values under all the Authority fields. Different profiles, of course. So the certificate I used is eligible to upload the iOS app successfully but doesn't work on the VisionOS ipa? Any help on solving any of these issues would be great so I can upload the vision OS app. Thank you!
0
0
463
Jul ’25
Is a modulemap file required when importing a static library objective-c framework? If not when is a modulemap required?
I am a bit confused. My understanding previously was that a modulemap was required in order to have a bridging header be generated. Now it has come to my attention that a modulemap is both a build input and something you can put in the Modules folder of the built product if you so choose. I have tried reading the clang modulemap documentation, but am really struggling to connect most of what it says to the problem at hand. In a project I am working on, the generation of the modulemap file is quite problematic. The framework imports C++ libraries and itself writes Objective-C++ wrappers for them. Currently, the modulemap file is both set as the Module Map File in "Build Settings" and presumably used when the Swift project later imports it. In this project the modulemap is a list of the objective-c++ header files then export * I am trying to understand what I would lose if I do one or both of two things: What happens if I dont set this module map file in the build settings for the objective-c++ framework? What happens if I dont have a modulemap involved whatsoever in this objective-c++ framework and then it is imported into Swift? And does any of this change if its compiled as a static vs dynamic library? What if I embed it vs not embed it? Because the build in the real project is so complicated its hard to isolate what is going on. So I built a smaller sample app. There is CFramework which has an objective-c++ class. There is SwiftProject which imports that framework and is purely Swift. It imports the module and uses it. I did not write a modulemap file, and the Swift project builds just fine. In the timeline it: Prepares packages Computes target dependency graph Builds static cache for iPhoneSimulator18.2sdk As near as I can tell even though the objective-c++ framework is not built with a modulemap in its build settings and there is not a modulemap included in the framework everything works. So then the modulemap file is useless? Perhaps it speeds things up but what step would theoretically be skippable?
0
0
97
Jun ’25
Undefined symbol linker errors after upgrading to Xcode 16 with Flutter iOS integration
Dear Apple Developer Support, We are experiencing a critical issue after upgrading our development environment from Xcode 15 to Xcode 16 (beta). Our iOS application integrates Flutter via CocoaPods (install_all_flutter_pods and flutter_post_install) and uses plugins like webview_flutter. After the upgrade, our project started failing at the linking stage with the following errors: Undefined symbol: _XPluginsGetDataFuncOrAbort Undefined symbol: _XPluginsGetFunctionPtrFromID Undefined symbol: Plugins::SocketThreadLocalScope::SocketThreadLocalScope(int) Undefined symbol: Plugins::SocketThreadLocalScope::~SocketThreadLocalScope() Linker command failed with exit code 1 These symbols seem to originate from Flutter’s new native C++ plugin architecture (possibly via webview_flutter_wkwebview), and were previously resolving fine with Xcode 15. We have ensured the following: Added -lc++ and -ObjC to OTHER_LDFLAGS Cleaned and rebuilt Flutter module via flutter build ios --release Re-installed CocoaPods with pod install Verified Flutter.xcframework and plugin xcframeworks are present Despite this, the linker fails to resolve the mentioned symbols under Xcode 16. This suggests a stricter linker behavior or a compatibility issue with the new C++ plugin system Flutter uses. Can you confirm: If Xcode 16 introduces stricter C++/Objective-C++ linker constraints? Is there an official workaround or updated documentation for dealing with Plugins::SocketThreadLocalScope and related symbol resolution? Should these symbols be declared explicitly or provided in .xcframework format from plugin developers? We would appreciate guidance or clarification on how to proceed with Flutter plugin compatibility under Xcode 16. Thank you.
0
0
128
Jul ’25
Implementing Your Own Crash Reporter
I often get questions about third-party crash reporting. These usually show up in one of two contexts: Folks are trying to implement their own crash reporter. Folks have implemented their own crash reporter and are trying to debug a problem based on the report it generated. This is a complex issue and this post is my attempt to untangle some of that complexity. If you have a follow-up question about anything I've raised here, please put it in a new thread with the Debugging tag. IMPORTANT All of the following is my own direct experience. None of it should be considered official DTS policy. If you have a specific question that needs a direct answer — perhaps you’re trying to convince your boss that implementing your own crash reporter is a very bad idea — start a dedicated thread here on the forums and we can discuss the details there. Use whatever subtopic is appropriate for your issue, but make sure to add the Debugging tag so that I see it go by. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Scope First, I can only speak to the technical side of this issue. There are other aspects that are beyond my remit: I don’t work for App Review, and only they can give definitive answers about what will or won’t be allowed on the store. Implementing your own crash reporter has significant privacy implications. IMPORTANT If you implement your own crash reporter, discuss the privacy impact with a lawyer. This post assumes that you are implementing your own crash reporter. A lot of folks use a crash reporter from another third party. From my perspective these are the same thing. If you use a custom crash reporter, you are responsible for its behaviour, both good and bad, regardless of where the actual code came from. Note If you use a crash reporter from another third party, run the tests outlined in Preserve the Apple Crash Report to verify that it’s working well. General Advice I strongly advise against implementing your own crash reporter. It’s very easy to create a basic crash reporter that works well enough to debug simple problems. It’s impossible to implement a good crash reporter, one that’s reliable, binary compatible, and sufficient to debug complex problems. The bulk of this post is a low-level explanation of that impossibility. Rather than attempting the impossible, I recommend that you lean in to Apple’s crash reporter. In recent years it’s acquired some really cool new features: If you’re creating an App Store app, the Xcode organiser gives you easy, interactive access to Apple crash reports. If you’re an enterprise developer, consider switching to Custom App Distribution. This yields all the benefits of App Store distribution without your app being generally available on the store. iOS 14 and macOS 12 report crashes in MetricKit. This is a very cool feature, and I’m surprised by how few people use it effectively. If you previously dismissed Apple crash reports as insufficient, I encourage you to reconsider that decision. Why Is This Impossible? Earlier I said “It’s impossible to implement a good crash reporter”, and I want to explain why I’m confident enough in my conclusions to use that specific word. There are two fundamental problems here: On iOS (and the other iOS-based platforms, watchOS and tvOS) your crash reporter must run inside the crashed process. That means it can never be 100% reliable. If the process is crashing then, by definition, it’s in an undefined state. Attempting to do real work in that state is just asking for problems [1]. To get good results your crash reporter must be intimately tied to system implementation details. These can change from release to release, which invalidates the assumptions made by your crash reporter. This isn’t a problem for the Apple crash reporter because it ships with the system. However, a crash reporter that’s built in to your product is always going to be brittle. I’m speaking from hard-won experience here. I worked for DTS during the PowerPC-to-Intel transition, and saw a lot of folks with custom crash reporters struggle through that process. Still, this post exists because lots of folks ignore this reality, so the subsequent sections contain advice about specific technical issues. WARNING Do not interpret any of the following as encouragement to implement your own crash reporter. I strongly advise against that. However, if you ignore my advice then you should at least try to minimise the risk, which is what the rest of this document is about. [1] On macOS it’s possible for your crash reporter to run out of process, just like the Apple crash reporter. However, possible is not the same as easy. In fact, running out of process can make things worse: It prevents you from geting critical state for the crashed process without being tightly bound to OS implementation details. It would be nice if Apple provided APIs for this sort of thing, but that’s currently not the case. Preserve the Apple Crash Report You must ensure that your crash reporter doesn’t disrupt the Apple crash reporter. This is important for three reasons: Some fraction of your crashes will not be caused by your code but by problems in framework code, and accurate Apple crash reports are critical in diagnosing such issues. When dealing with really hard-to-debug problems, you need the more obscure info that’s shown in the Apple crash report. If you’re working with someone from Apple (here on the forums, via a bug report, or a DTS case, or whatever), they’re going to want an accurate Apple crash report. If your crash reporter is disrupting the Apple crash reporter — either preventing it from generating crash reports entirely [1], or distorting those crash reports — that limits how much they can help you. IMPORTANT This is not a theoretical concern. The forums have many threads where I’ve been unable to help folks debug a gnarly problem because their third-party crash reporter didn’t preserve the Apple crash report (see here, here, and here for some examples). To avoid these issues I recommend that you test your crash reporter’s impact on the Apple crash reporter. The basic idea is: Create a program that generates a set of specific crashes. Run through each crash. Verify that your crash reporter produces sensible results. Verify that the Apple crash reporter produces the same results as it does without your crash reporter With regards step 1, your test suite should include: An un-handled language exception thrown by your code An un-handled language exception thrown by the OS (accessing an NSArray out of bounds is an easy way to get this) Various machine exceptions (at a minimum, memory access, illegal instruction, and breakpoint exceptions) Stack overflow Make sure to test all of these cases on both the main thread and a secondary thread. With regards step 4, check that the resulting Apple crash report includes correct values for: The exception info The crashed thread That thread’s state Any application-specific info, and especially the last exception backtrace [1] A particularly pathological behaviour here is to end your crash reporter by calling exit. This completely suppresses the Apple crash report. Some third-party language runtimes ‘helpfully’ include such a crash reporter, which makes it very hard to debug problems that occur within your process but outside of that language. Signals Many third-party crash reporters use UNIX signals to catch the crash. This is a shame because using Mach exception handling, the mechanism used by the Apple crash reporter, is generally a better option. However, there are two reasons to favour UNIX signals over Mach exception handling: On iOS-based platforms your crash reporter must run in-process, and doing in-process Mach exception handling is not feasible. Folks are a lot more familiar with UNIX signals. Mach exception handling, and Mach messaging in general, is pretty darned obscure. If you use UNIX signals for your crash reporter, be aware that this API has some gaping pitfalls. First and foremost, your signal handler can only use async signal safe functions [1]. You can find a list of these functions in sigaction man page [2] [3]. WARNING This list does not include malloc. This means that a crash reporter’s signal handler cannot use Objective-C or Swift, as there’s no way to constrain how those language runtimes allocate memory [4]. That means you’re stuck with C or C++, but even there you have to be careful to comply with this constraint. The Operative: It’s worse than you know. Captain Malcolm Reynolds: It usually is. Many crash reports use functions like backtrace (see its man page) to get a backtrace from their signal handler. There’s two problems with this: backtrace is not an async signal safe function. backtrace uses a naïve algorithm that doesn’t deal well with cross signal handler stack frames [5]. The latter point is particularly worrying, because it hides the identity of the stack frame that triggered the signal. If you’re going to backtrace out of a signal, you must use the crashed thread’s state (accessible via the handlers uap parameter) to start your backtrace. Apropos that, if your crash reporter wants to log the state of the crashed thread, that’s the place to get it. Your signal handler must be prepared to be called by multiple threads. A typical crashing signal (like SIGSEGV) is delivered to the thread that triggered the machine exception. While your signal handler is running on that thread, other threads in your process continue to run. One of these threads could crash, causing it to call your signal handler. It’s a good idea to suspend all threads in your process early in your signal handler. However, there’s no way to completely eliminate this window. Note The need to suspend all the other threads in your process is further evidence that sticking to async signal safe functions is required. An unsafe function might depend on a thread you’ve suspended. A typical crashing signal is delivered on the thread that triggered the machine exception. If the machine exception was caused by a stack overflow, the system won’t have enough stack space to call your signal handler. You can tell the system to switch to an alternative stack (see the discussion of SA_ONSTACK in the sigaction man page) but that isn’t a complete solution (because of the thread issue discussed immediately above). Finally, there’s the question of how to exit from your signal handler. You must not call exit. There’s two problems with doing that: exit is not async signal safe. In fact, exit can run arbitrary code via handlers registered with atexit. If you want to exit the process, call _exit. Exiting the process is a bad idea anyway, because it will prevent the Apple crash reporter from running. This is very poor form. For an explanation as to why, see Preserve the Apple Crash Report (above). A better solution is to unregister your signal handler (set it to SIG_DFL) and then return. This will cause the crashed process to continue execution, crash again, and generate a crash report via the Apple crash reporter. [1] While the common signals caught by a crash reporter are not technically async signals (except SIGABRT), you still have to treat them as async signals because they can occur on any thread at any time. [2] It’s reasonable to extend this list to other routines that are implemented as thin shims on a system call. For example, I have no qualms about calling vm_read (see below) from a signal handler. [3] Be aware, however, that even this list has caveats. See my Async Signal Safe Functions vs Dyld Lazy Binding post for details. [4] I expect that it’ll eventually be possible to write signal handlers in Swift, possibly using some facility that evolves from the the existing, but unsupported, @_noAllocation and @_noLocks attributes. If you’d like to get involved with that effort, I recommend that engage with the Swift Evolution process. [5] Cross signal handler stack frames are pushed on to the stack by the kernel when it runs a signal handler on a thread. As there’s no API to learn about the structure of these frames, there’s no way to backtrace across one of these frames in isolation. I’m happy to go into details but it’s really not relevant to this discussion [6]. If you’re interested, start a new thread with the Debugging tag and we can chat there. [6] (Arg, my footnotes have footnotes!) The exception to this is where your trying to generate a crash report for code running in a signal handler. That’s not easy, and frankly you’re better off avoiding signal handlers in general. Where possible, handle signals via a Dispatch event source. Reading Memory A signal handler must be very careful about the memory it touches, because the contents of that memory might have been corrupted by the crash that triggered the signal. My general rule here is that the signal handler can safely access: Its code Its stack (subject to the constraints discussed earlier) Its arguments Immutable global state In the last point, I’m using immutable to mean immutable after startup. It’s reasonable to set up some global state when the process starts, before installing your signal handler, and then rely on it in your signal handler. Changing any global state after the signal handler is installed is dangerous, and if you need to do that you must be careful to ensure that your signal handler sees consistent state, even though a crash might occur halfway through your change. You can’t protect this global state with a mutex because mutexes are not async signal safe (and even if they were you’d deadlock if the mutex was held by the thread that crashed). You should be able to use atomic operations for this, but atomic operations are notoriously hard to use correctly (if I had a dollar for every time I’ve pointed out to a developer they’re using atomic operations incorrectly, I’d be very badly paid (-: but that’s still a lot of developers!). If your signal handler reads other memory, it must take care to avoid crashing while doing that read. There’s no BSD-level API for this [1], so I recommend that you use vm_read. [1] The traditional UNIX approach for doing this is to install a signal handler to catch any memory access exceptions triggered by the read, but now we’re talking signal handling within a signal handler and that’s just silly. Writing Files If your want to write a crash report from your signal handler, you must use low-level UNIX APIs (open, write, close) because only those low-level APIs are documented to be async signal safe. You must also set up the path in advance because the standard APIs for determining where to write the file (NSFileManager, for example) are not async signal safe. Offline Symbolication Do not attempt to do symbolication from your signal handler. Rather, write enough information to your crash report to support offline symbolication. Specifically: The addresses to symbolicate For each Mach-O image in the process: The image’s path The image’s build UUID [1] The image’s load address You can get most of the Mach-O image information using the APIs in <mach-o/dyld.h> [2]. Be aware, however, that these APIs are not async signal safe. You’ll need to get this information in advance and cache it for your signal handler to record. This is complicated by the fact that the list of Mach-O images can change as you process loads and unloads code. This requires you to share mutable state with your signal handler, which is exactly what I recommend against in Reading Memory. Note You can learn about images loading and unloading using _dyld_register_func_for_add_image and _dyld_register_func_for_remove_image respectively. [1] If you’re unfamiliar with that term, see TN3178 Checking for and resolving build UUID problems and the documents it links to. [2] I believe you’ll need to parse the Mach-O load commands to get the build UUID. What to Include When deciding what to include in a crash report, there’s a three-way balance to be struck: The more information you include, the easier it is to diagnose problems. Some information is hard to obtain, either because there’s no public API to get that information, or because the API is not available to your crash reporter. Some information is so privacy-sensitive that it has no place in a crash report. Apple’s crash reporter strikes its own balance here, and I recommend that you try to include everything that it includes, subject to the limitations described in the second point. Here’s what I’d considered to be a minimal list: Information about the machine exception that triggered the crash For memory access exceptions, the address of the access that triggered the crash Backtraces of all the threads (sometimes the backtrace of a non-crashing thread can yield critical information about the crash) The crashed thread Its thread state A list of Mach-O images, as discussed in the Offline Symbolication section IMPORTANT Make sure you report the thread backtraces in a consistent order. Without that it’s hard to correlate information across crash reports. Revision History 2025-08-25 Added some links to examples of third-party crash reports not preserving the Apple crash report. Added a link to TN3178. Made other minor editorial changes. 2022-05-16 Fixed a broken link. 2021-09-10 Expanded the General Advice section to include pointers to Apple crash report resources, including MetricKit. Split the second half of that section out in to a new Why Is This Impossible? section. Made minor editoral changes. 2021-02-27 Fixed the formatting. Made minor editoral changes. 2019-05-13 Added a reference to my Async Signal Safe Functions vs Dyld Lazy Binding post. 2019-02-15 Expanded the introduction to the Preserve the Apple Crash Report section. 2019-02-14 Clarified the complexities of an out-of-process crash reporter. Added the What to Include section. Enhanced the Signals section to cover reentrancy and stack overflow. Made minor editoral changes. 2019-02-13 Made minor editoral changes. Added a new footnote to the Signals section. 2019-02-12 First posted.
0
0
19k
Aug ’25
Device not detected
Trying to test applications on AVP as opposed to simulator. AVP can connect to MacBook via Mac virtual display so connection exists, but in X code under Windows devices the AVP does not show up same holds true on the AVP itself under remote devices. The MacBook Pro does not appear. I am signed in under the same account on the same Wi-Fi network. I have tried all basic troubleshooting. It is not clear to me that I am logged in as a developer, which could be the issue, but I am using OS 26, which does not appear to have the developer option under privacy and security where it used to reside in previous versions of the OS.
0
0
125
Jul ’25
Proper includes into Package.swift
Ok, I have a bit of special problem. I want to use the "Swift Upcoming Feature Flags" in my packages. The problem is that we have quite a lot of Packages in a quite deep tree: at the root of the Package directory there are four dirs: AppA/ AppB/ Shared/ Temporary/ also the packages ExternalLibs and BuildPlugins. Temporary contains Packages that need rework and the other three subdirs each contain the subdirs: Features/ Utilities/ Services/ All in all there are over 100 packages. Now I would like to use definitions like https://github.com/treastrain/swift-upcomingfeatureflags-cheatsheet to use in the Package.swift files. And as you might guess, I do not want to copy those into each and every Package.swift file. It seems like SPM is only finding includes by itself if they are in the exact same directory as the Package.swift file 🙄 That's not at all helpful… Has anyone found a way to do useful includes into Package.swift files? Any help appreciated. Thank You Roddi
0
0
124
Jul ’25
Main Camera access
Hi, I have downloaded the example to use the Main Camera with Apple Vision Pro. I got the license file, the Entitlements file and I see Main Camera Access on capabilities view. I have attached the AVP with the development kit band, however I don't see the device as option to install the App. I selected Managed Run Destinations and I see the AVP as connected. Do I miss anything to install the App on my AVP?
Replies
1
Boosts
0
Views
93
Activity
Jul ’25
Unable to send iMessage game extension on simulator
I recently started building an iMessage game, and whenever I try to send the game through the first contact on the simulator to loop back into the second one, I get an alert saying "Unable to send. The recipient can not receive this item via satellite". Has anyone experienced this? If so, do you have a solution? It is making it a bit difficult to test the flow of my app.
Replies
1
Boosts
0
Views
122
Activity
Jun ’25
How to install beta2 simulators?
New betas of the platforms were released today (June 23), but I don't see any update for Xcode. Is there a way to get the Xcode 26 beta 1 to install the beta2 OSes for the simulator somehow? Or do we simply need to wait for an update?
Replies
0
Boosts
0
Views
133
Activity
Jun ’25
iOS Simulator (18.4) crashes when user clicks allow for microphone permission popup
Start from clean iOS 18.4 simulator. Application tried to request authorisation from user for microphone access. Clicking allow caused the application crashed. Used Swift 6. Report Identifier FB17686864.
Replies
0
Boosts
0
Views
217
Activity
May ’25
Incorrect Syntax Color for Raw Identifiers
Using Xcode 26.0 beta (17A5241e) Wanted to try out raw identifiers for Swift Testing tests, and while they work, syntax colorization is dreadful. Much less readable then just using a custom name with @Test. Feedback: FB18260756 Example with a raw identifier of some example test name:
Replies
0
Boosts
0
Views
93
Activity
Jun ’25
Bug: Xcode Refactor -> Rename with Conditional Compilation
When renaming A.value, it also causes the value inside the conditional compilation in checkRename to be renamed. How to resolve or avoid this situation? class A { let value = "1" } class B { var value = 0 } func checkRename() { var b = B() #if os(iOS) b.value = 456 #elseif os(macOS) b.value = 789 #endif } Xcode Version 15.4 (15F31d).
Replies
1
Boosts
0
Views
253
Activity
Jun ’25
Xcode doesn't recognise changes in file status, unable to stage and commit to repo.
I'm using Version 16.4 (16F6) of Xcode on macOS 15.5 (24F74) and everything was working fine until I selected an older build to branch out from. Now, Xcode cant properly know the file status as it keeps on changing it after quitting and relaunching it. The changes in the file are there and when trying to commit to the local repo it doesn't show any changes to stage. At present I'm relying on making project folder backups as a way of backing up builds. Any suggestions what can be done?
Replies
0
Boosts
0
Views
224
Activity
Jul ’25
TestFlight version of Mac Multiplatform is on the wrong AppStore, but not the iOS TestFlight build
Hello, I'm sure I've probably missed a checkbox somewhere.. I have a mulitiplatform app, when building from Xcode, and not using the testing config, both iOS and macOS show the correct App Store currency.. When I distribute a build through TestFlight, my Mac version shows a different country/currency price (the US one). I can't find anywhere to change this. My Mac is signed into the same sandbox account as my iOS device. Can anyone help?
Replies
1
Boosts
0
Views
217
Activity
Jan ’26
Missing StoreKit configuration file option in Xcode
Hello guys, I’ve been recently trying to learn how to implement in app purchases and in every tutorial they create store kit configuration file but in my Xcode there is no such option - I even uninstalled my Xcode and installed 16.4 release version - still missing And when I try to create this file manually, naming it something.storekit I get “The operation couldn’t be completed. (IDEStoreKitEditor.IDEStoreKitEditorConfigurationError error 0)” but such error isn’t documented anywhere :( Few people mentioned that restarting Xcode fixes the problem for them, but that is not the case for me, I'm having this problem on both Xcode 16.3 and 16.4 and nothing seems to fix it - it's really frustrating Any help is greatly appreciated
Replies
2
Boosts
0
Views
216
Activity
Jul ’25
Receiving Permissions error when moving files to subfolders
I'm new to Apple Development. I've converted a python program to swift. The operator selects a top level folder and the program moves files in and out of subFolders within the selected folder. How do I resolve the Permissions errors whenever accessing subfolders?
Replies
2
Boosts
0
Views
63
Activity
Jun ’25
inapp purchase submit for review button grey out
My inapp purchase is on "Ready to Submit" status but the button of "Submit for review" is grey out? Is there any reason why I cannot submit for review? Thank you very much
Replies
1
Boosts
0
Views
670
Activity
Jan ’26
Xcode has high CPU usage when apparently doing nothing for hours
In 2020 I created FB7719215, which I updated several times (including just now) and in 2021 I created FB9204092, but the issue is still there: when I keep Xcode open (currently version 16.3), my battery drains much quicker, even when it's apparently idle. For instance, today I barely did anything in Xcode, but still it has been at a constant 90% CPU for the last hours, and I keep checking the battery percentage to check how much time I have left. Does anyone at Apple has an explanation, workaround and/or fix?
Replies
2
Boosts
0
Views
165
Activity
Jun ’25
Trouble Distributing iOS + WatchOS App as a Bundle (Info.plist / Target Confusion)
Hi all, I’m running into an issue with my iOS + Apple Watch app project, and I could really use some advice. My WatchOS app requires an iOS companion for settings and configuration, so both apps need to be distributed together. Here’s how I structured my Xcode project: Main iOS App target WatchOS App target WatchOS Extension target However, I’m very confused about how these targets interact, and things are not working as expected. The problem: I can build and run the WatchOS app and its extension independently in the simulator by selecting their schemes. When I select the main iOS app scheme, I get an error about ITSWatchOnlyContainer in the Info.plist—even though there’s no Info tab for that target in Xcode. I’m able to distribute the WatchOS app by itself, and the extension as well. But I can’t distribute them bundled together as a single package, and I haven’t found any clear resources that explain how to fix this. This is my very first app, and it’s frustrating to get stuck just before the finish line! Project Structure / steps to reproduce Let’s say my project is called MyAppProject, with these targets: MyAppProject Main iOS App Embedded target: MyAppProject Watch App Bundle identifier: com.example.MyAppProject MyAppProject Watch App WKCompanionAppBundleIdentifier: com.example.MyAppProject “Requires iOS App”: YES MyAppProject Extension Bundle identifier: com.example.MyAppProject When running from the MyAppProject scheme, I get this error (even though I can’t see or edit the Info.plist in Xcode for this target): “Please try again later. This app has the ITSWatchOnlyContainer key set in its Info.plist, which identifies it as a shell app surrounding a Watch-only app; these are not installable.” As a result, I can’t distribute the app as a bundle. I’d appreciate help understanding: How should the Info.plist files be configured for each target? What do I do if the Info.plist path seems missing in the Xcode UI? Is there a “correct” way to structure an iOS + WatchOS app for bundled distribution?
Replies
0
Boosts
0
Views
132
Activity
Jun ’25
Xcode keeps touching readonly xcschemes on launch
We use Perforce for version control, which means that all files not checked out are readonly. Lately Xcode has started displaying a fixed sequence of these dialogs on every launch: This means it is trying to modify some readonly file within the xcodeproj. Out of our 60 subprojects this always comes up for the exact same 6. I have so far uncovered the following: It is really trying to modify the shared xcschemes and not the pbxproj. (If I set those to writable the dialog does not appear.) Actually the files are not changed if I click "Unlock", but the com.apple.provenance xattr flag is removed from them. These xcschemes are of version 1.7 while all others are 1.3. If I change them to 1.3 Xcode still wants to modify them at launch and sets them back to 1.7. This is very annoying. What is it about these xcschemes that upsets Xcode, and how can I stop these dialogs from appearing? (One workaround is to keep them checked out dumped to a changelist that I never submit, but that is error prone when I do need to make changes to those, and also is not really possible when jumping between old states of the repo to find the change that broke something.)
Replies
0
Boosts
0
Views
151
Activity
Jul ’25
Signing Issues with VisionOS app
I am having an issue with signing and provisioning a Vision OS app. I have an iOS app and a VisionOS app. Everything works fine on the iOS but having issues with the VisionOS. First, I am having issues with xcodebuild -exportArchive. When I run it on an archive of my VisionOS app I get ** EXPORT FAILED ** error: exportArchive No Accounts error: exportArchive No profiles for 'X' were found Where X is my bundle ID. Meanwhile the iOS app succeeds. This is on a CI machine but I confirmed the distribution provision profile for the vision OS app is installed on the machine. Even if I change the value of the -exportOptionsPlist to the one I used for the iOS project I get this error. Is the issue in the archive itself? The archives are generated from building in Unity and archiving the xcodeproject with xcodebuild archive Second, as a workaround I archived a debug ipa on my machine and uploaded this ipa to my CI machine which has the credentials to sign for distribution. I use this script as an example as how to resign the IPA: https://gist.github.com/lodalo/754a35b48d382ae99b25 I remove the CodeSignatures and codesign both .app and UnityFramework.framework. Using this resigned IPA I get this error when I try to upload to app store connect (via Transporter app and altool) errors: Validation failed (409) Missing or invalid signature. The bundle 'X' at bundle path 'Payload/Y.app' is not signed using an Apple submission certificate. To verify the signing I used codesign -dvvv --entitlements - On both the iOS and VisionOS app and they have the same values under all the Authority fields. Different profiles, of course. So the certificate I used is eligible to upload the iOS app successfully but doesn't work on the VisionOS ipa? Any help on solving any of these issues would be great so I can upload the vision OS app. Thank you!
Replies
0
Boosts
0
Views
463
Activity
Jul ’25
Is a modulemap file required when importing a static library objective-c framework? If not when is a modulemap required?
I am a bit confused. My understanding previously was that a modulemap was required in order to have a bridging header be generated. Now it has come to my attention that a modulemap is both a build input and something you can put in the Modules folder of the built product if you so choose. I have tried reading the clang modulemap documentation, but am really struggling to connect most of what it says to the problem at hand. In a project I am working on, the generation of the modulemap file is quite problematic. The framework imports C++ libraries and itself writes Objective-C++ wrappers for them. Currently, the modulemap file is both set as the Module Map File in "Build Settings" and presumably used when the Swift project later imports it. In this project the modulemap is a list of the objective-c++ header files then export * I am trying to understand what I would lose if I do one or both of two things: What happens if I dont set this module map file in the build settings for the objective-c++ framework? What happens if I dont have a modulemap involved whatsoever in this objective-c++ framework and then it is imported into Swift? And does any of this change if its compiled as a static vs dynamic library? What if I embed it vs not embed it? Because the build in the real project is so complicated its hard to isolate what is going on. So I built a smaller sample app. There is CFramework which has an objective-c++ class. There is SwiftProject which imports that framework and is purely Swift. It imports the module and uses it. I did not write a modulemap file, and the Swift project builds just fine. In the timeline it: Prepares packages Computes target dependency graph Builds static cache for iPhoneSimulator18.2sdk As near as I can tell even though the objective-c++ framework is not built with a modulemap in its build settings and there is not a modulemap included in the framework everything works. So then the modulemap file is useless? Perhaps it speeds things up but what step would theoretically be skippable?
Replies
0
Boosts
0
Views
97
Activity
Jun ’25
Undefined symbol linker errors after upgrading to Xcode 16 with Flutter iOS integration
Dear Apple Developer Support, We are experiencing a critical issue after upgrading our development environment from Xcode 15 to Xcode 16 (beta). Our iOS application integrates Flutter via CocoaPods (install_all_flutter_pods and flutter_post_install) and uses plugins like webview_flutter. After the upgrade, our project started failing at the linking stage with the following errors: Undefined symbol: _XPluginsGetDataFuncOrAbort Undefined symbol: _XPluginsGetFunctionPtrFromID Undefined symbol: Plugins::SocketThreadLocalScope::SocketThreadLocalScope(int) Undefined symbol: Plugins::SocketThreadLocalScope::~SocketThreadLocalScope() Linker command failed with exit code 1 These symbols seem to originate from Flutter’s new native C++ plugin architecture (possibly via webview_flutter_wkwebview), and were previously resolving fine with Xcode 15. We have ensured the following: Added -lc++ and -ObjC to OTHER_LDFLAGS Cleaned and rebuilt Flutter module via flutter build ios --release Re-installed CocoaPods with pod install Verified Flutter.xcframework and plugin xcframeworks are present Despite this, the linker fails to resolve the mentioned symbols under Xcode 16. This suggests a stricter linker behavior or a compatibility issue with the new C++ plugin system Flutter uses. Can you confirm: If Xcode 16 introduces stricter C++/Objective-C++ linker constraints? Is there an official workaround or updated documentation for dealing with Plugins::SocketThreadLocalScope and related symbol resolution? Should these symbols be declared explicitly or provided in .xcframework format from plugin developers? We would appreciate guidance or clarification on how to proceed with Flutter plugin compatibility under Xcode 16. Thank you.
Replies
0
Boosts
0
Views
128
Activity
Jul ’25
Implementing Your Own Crash Reporter
I often get questions about third-party crash reporting. These usually show up in one of two contexts: Folks are trying to implement their own crash reporter. Folks have implemented their own crash reporter and are trying to debug a problem based on the report it generated. This is a complex issue and this post is my attempt to untangle some of that complexity. If you have a follow-up question about anything I've raised here, please put it in a new thread with the Debugging tag. IMPORTANT All of the following is my own direct experience. None of it should be considered official DTS policy. If you have a specific question that needs a direct answer — perhaps you’re trying to convince your boss that implementing your own crash reporter is a very bad idea — start a dedicated thread here on the forums and we can discuss the details there. Use whatever subtopic is appropriate for your issue, but make sure to add the Debugging tag so that I see it go by. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Scope First, I can only speak to the technical side of this issue. There are other aspects that are beyond my remit: I don’t work for App Review, and only they can give definitive answers about what will or won’t be allowed on the store. Implementing your own crash reporter has significant privacy implications. IMPORTANT If you implement your own crash reporter, discuss the privacy impact with a lawyer. This post assumes that you are implementing your own crash reporter. A lot of folks use a crash reporter from another third party. From my perspective these are the same thing. If you use a custom crash reporter, you are responsible for its behaviour, both good and bad, regardless of where the actual code came from. Note If you use a crash reporter from another third party, run the tests outlined in Preserve the Apple Crash Report to verify that it’s working well. General Advice I strongly advise against implementing your own crash reporter. It’s very easy to create a basic crash reporter that works well enough to debug simple problems. It’s impossible to implement a good crash reporter, one that’s reliable, binary compatible, and sufficient to debug complex problems. The bulk of this post is a low-level explanation of that impossibility. Rather than attempting the impossible, I recommend that you lean in to Apple’s crash reporter. In recent years it’s acquired some really cool new features: If you’re creating an App Store app, the Xcode organiser gives you easy, interactive access to Apple crash reports. If you’re an enterprise developer, consider switching to Custom App Distribution. This yields all the benefits of App Store distribution without your app being generally available on the store. iOS 14 and macOS 12 report crashes in MetricKit. This is a very cool feature, and I’m surprised by how few people use it effectively. If you previously dismissed Apple crash reports as insufficient, I encourage you to reconsider that decision. Why Is This Impossible? Earlier I said “It’s impossible to implement a good crash reporter”, and I want to explain why I’m confident enough in my conclusions to use that specific word. There are two fundamental problems here: On iOS (and the other iOS-based platforms, watchOS and tvOS) your crash reporter must run inside the crashed process. That means it can never be 100% reliable. If the process is crashing then, by definition, it’s in an undefined state. Attempting to do real work in that state is just asking for problems [1]. To get good results your crash reporter must be intimately tied to system implementation details. These can change from release to release, which invalidates the assumptions made by your crash reporter. This isn’t a problem for the Apple crash reporter because it ships with the system. However, a crash reporter that’s built in to your product is always going to be brittle. I’m speaking from hard-won experience here. I worked for DTS during the PowerPC-to-Intel transition, and saw a lot of folks with custom crash reporters struggle through that process. Still, this post exists because lots of folks ignore this reality, so the subsequent sections contain advice about specific technical issues. WARNING Do not interpret any of the following as encouragement to implement your own crash reporter. I strongly advise against that. However, if you ignore my advice then you should at least try to minimise the risk, which is what the rest of this document is about. [1] On macOS it’s possible for your crash reporter to run out of process, just like the Apple crash reporter. However, possible is not the same as easy. In fact, running out of process can make things worse: It prevents you from geting critical state for the crashed process without being tightly bound to OS implementation details. It would be nice if Apple provided APIs for this sort of thing, but that’s currently not the case. Preserve the Apple Crash Report You must ensure that your crash reporter doesn’t disrupt the Apple crash reporter. This is important for three reasons: Some fraction of your crashes will not be caused by your code but by problems in framework code, and accurate Apple crash reports are critical in diagnosing such issues. When dealing with really hard-to-debug problems, you need the more obscure info that’s shown in the Apple crash report. If you’re working with someone from Apple (here on the forums, via a bug report, or a DTS case, or whatever), they’re going to want an accurate Apple crash report. If your crash reporter is disrupting the Apple crash reporter — either preventing it from generating crash reports entirely [1], or distorting those crash reports — that limits how much they can help you. IMPORTANT This is not a theoretical concern. The forums have many threads where I’ve been unable to help folks debug a gnarly problem because their third-party crash reporter didn’t preserve the Apple crash report (see here, here, and here for some examples). To avoid these issues I recommend that you test your crash reporter’s impact on the Apple crash reporter. The basic idea is: Create a program that generates a set of specific crashes. Run through each crash. Verify that your crash reporter produces sensible results. Verify that the Apple crash reporter produces the same results as it does without your crash reporter With regards step 1, your test suite should include: An un-handled language exception thrown by your code An un-handled language exception thrown by the OS (accessing an NSArray out of bounds is an easy way to get this) Various machine exceptions (at a minimum, memory access, illegal instruction, and breakpoint exceptions) Stack overflow Make sure to test all of these cases on both the main thread and a secondary thread. With regards step 4, check that the resulting Apple crash report includes correct values for: The exception info The crashed thread That thread’s state Any application-specific info, and especially the last exception backtrace [1] A particularly pathological behaviour here is to end your crash reporter by calling exit. This completely suppresses the Apple crash report. Some third-party language runtimes ‘helpfully’ include such a crash reporter, which makes it very hard to debug problems that occur within your process but outside of that language. Signals Many third-party crash reporters use UNIX signals to catch the crash. This is a shame because using Mach exception handling, the mechanism used by the Apple crash reporter, is generally a better option. However, there are two reasons to favour UNIX signals over Mach exception handling: On iOS-based platforms your crash reporter must run in-process, and doing in-process Mach exception handling is not feasible. Folks are a lot more familiar with UNIX signals. Mach exception handling, and Mach messaging in general, is pretty darned obscure. If you use UNIX signals for your crash reporter, be aware that this API has some gaping pitfalls. First and foremost, your signal handler can only use async signal safe functions [1]. You can find a list of these functions in sigaction man page [2] [3]. WARNING This list does not include malloc. This means that a crash reporter’s signal handler cannot use Objective-C or Swift, as there’s no way to constrain how those language runtimes allocate memory [4]. That means you’re stuck with C or C++, but even there you have to be careful to comply with this constraint. The Operative: It’s worse than you know. Captain Malcolm Reynolds: It usually is. Many crash reports use functions like backtrace (see its man page) to get a backtrace from their signal handler. There’s two problems with this: backtrace is not an async signal safe function. backtrace uses a naïve algorithm that doesn’t deal well with cross signal handler stack frames [5]. The latter point is particularly worrying, because it hides the identity of the stack frame that triggered the signal. If you’re going to backtrace out of a signal, you must use the crashed thread’s state (accessible via the handlers uap parameter) to start your backtrace. Apropos that, if your crash reporter wants to log the state of the crashed thread, that’s the place to get it. Your signal handler must be prepared to be called by multiple threads. A typical crashing signal (like SIGSEGV) is delivered to the thread that triggered the machine exception. While your signal handler is running on that thread, other threads in your process continue to run. One of these threads could crash, causing it to call your signal handler. It’s a good idea to suspend all threads in your process early in your signal handler. However, there’s no way to completely eliminate this window. Note The need to suspend all the other threads in your process is further evidence that sticking to async signal safe functions is required. An unsafe function might depend on a thread you’ve suspended. A typical crashing signal is delivered on the thread that triggered the machine exception. If the machine exception was caused by a stack overflow, the system won’t have enough stack space to call your signal handler. You can tell the system to switch to an alternative stack (see the discussion of SA_ONSTACK in the sigaction man page) but that isn’t a complete solution (because of the thread issue discussed immediately above). Finally, there’s the question of how to exit from your signal handler. You must not call exit. There’s two problems with doing that: exit is not async signal safe. In fact, exit can run arbitrary code via handlers registered with atexit. If you want to exit the process, call _exit. Exiting the process is a bad idea anyway, because it will prevent the Apple crash reporter from running. This is very poor form. For an explanation as to why, see Preserve the Apple Crash Report (above). A better solution is to unregister your signal handler (set it to SIG_DFL) and then return. This will cause the crashed process to continue execution, crash again, and generate a crash report via the Apple crash reporter. [1] While the common signals caught by a crash reporter are not technically async signals (except SIGABRT), you still have to treat them as async signals because they can occur on any thread at any time. [2] It’s reasonable to extend this list to other routines that are implemented as thin shims on a system call. For example, I have no qualms about calling vm_read (see below) from a signal handler. [3] Be aware, however, that even this list has caveats. See my Async Signal Safe Functions vs Dyld Lazy Binding post for details. [4] I expect that it’ll eventually be possible to write signal handlers in Swift, possibly using some facility that evolves from the the existing, but unsupported, @_noAllocation and @_noLocks attributes. If you’d like to get involved with that effort, I recommend that engage with the Swift Evolution process. [5] Cross signal handler stack frames are pushed on to the stack by the kernel when it runs a signal handler on a thread. As there’s no API to learn about the structure of these frames, there’s no way to backtrace across one of these frames in isolation. I’m happy to go into details but it’s really not relevant to this discussion [6]. If you’re interested, start a new thread with the Debugging tag and we can chat there. [6] (Arg, my footnotes have footnotes!) The exception to this is where your trying to generate a crash report for code running in a signal handler. That’s not easy, and frankly you’re better off avoiding signal handlers in general. Where possible, handle signals via a Dispatch event source. Reading Memory A signal handler must be very careful about the memory it touches, because the contents of that memory might have been corrupted by the crash that triggered the signal. My general rule here is that the signal handler can safely access: Its code Its stack (subject to the constraints discussed earlier) Its arguments Immutable global state In the last point, I’m using immutable to mean immutable after startup. It’s reasonable to set up some global state when the process starts, before installing your signal handler, and then rely on it in your signal handler. Changing any global state after the signal handler is installed is dangerous, and if you need to do that you must be careful to ensure that your signal handler sees consistent state, even though a crash might occur halfway through your change. You can’t protect this global state with a mutex because mutexes are not async signal safe (and even if they were you’d deadlock if the mutex was held by the thread that crashed). You should be able to use atomic operations for this, but atomic operations are notoriously hard to use correctly (if I had a dollar for every time I’ve pointed out to a developer they’re using atomic operations incorrectly, I’d be very badly paid (-: but that’s still a lot of developers!). If your signal handler reads other memory, it must take care to avoid crashing while doing that read. There’s no BSD-level API for this [1], so I recommend that you use vm_read. [1] The traditional UNIX approach for doing this is to install a signal handler to catch any memory access exceptions triggered by the read, but now we’re talking signal handling within a signal handler and that’s just silly. Writing Files If your want to write a crash report from your signal handler, you must use low-level UNIX APIs (open, write, close) because only those low-level APIs are documented to be async signal safe. You must also set up the path in advance because the standard APIs for determining where to write the file (NSFileManager, for example) are not async signal safe. Offline Symbolication Do not attempt to do symbolication from your signal handler. Rather, write enough information to your crash report to support offline symbolication. Specifically: The addresses to symbolicate For each Mach-O image in the process: The image’s path The image’s build UUID [1] The image’s load address You can get most of the Mach-O image information using the APIs in <mach-o/dyld.h> [2]. Be aware, however, that these APIs are not async signal safe. You’ll need to get this information in advance and cache it for your signal handler to record. This is complicated by the fact that the list of Mach-O images can change as you process loads and unloads code. This requires you to share mutable state with your signal handler, which is exactly what I recommend against in Reading Memory. Note You can learn about images loading and unloading using _dyld_register_func_for_add_image and _dyld_register_func_for_remove_image respectively. [1] If you’re unfamiliar with that term, see TN3178 Checking for and resolving build UUID problems and the documents it links to. [2] I believe you’ll need to parse the Mach-O load commands to get the build UUID. What to Include When deciding what to include in a crash report, there’s a three-way balance to be struck: The more information you include, the easier it is to diagnose problems. Some information is hard to obtain, either because there’s no public API to get that information, or because the API is not available to your crash reporter. Some information is so privacy-sensitive that it has no place in a crash report. Apple’s crash reporter strikes its own balance here, and I recommend that you try to include everything that it includes, subject to the limitations described in the second point. Here’s what I’d considered to be a minimal list: Information about the machine exception that triggered the crash For memory access exceptions, the address of the access that triggered the crash Backtraces of all the threads (sometimes the backtrace of a non-crashing thread can yield critical information about the crash) The crashed thread Its thread state A list of Mach-O images, as discussed in the Offline Symbolication section IMPORTANT Make sure you report the thread backtraces in a consistent order. Without that it’s hard to correlate information across crash reports. Revision History 2025-08-25 Added some links to examples of third-party crash reports not preserving the Apple crash report. Added a link to TN3178. Made other minor editorial changes. 2022-05-16 Fixed a broken link. 2021-09-10 Expanded the General Advice section to include pointers to Apple crash report resources, including MetricKit. Split the second half of that section out in to a new Why Is This Impossible? section. Made minor editoral changes. 2021-02-27 Fixed the formatting. Made minor editoral changes. 2019-05-13 Added a reference to my Async Signal Safe Functions vs Dyld Lazy Binding post. 2019-02-15 Expanded the introduction to the Preserve the Apple Crash Report section. 2019-02-14 Clarified the complexities of an out-of-process crash reporter. Added the What to Include section. Enhanced the Signals section to cover reentrancy and stack overflow. Made minor editoral changes. 2019-02-13 Made minor editoral changes. Added a new footnote to the Signals section. 2019-02-12 First posted.
Replies
0
Boosts
0
Views
19k
Activity
Aug ’25
Device not detected
Trying to test applications on AVP as opposed to simulator. AVP can connect to MacBook via Mac virtual display so connection exists, but in X code under Windows devices the AVP does not show up same holds true on the AVP itself under remote devices. The MacBook Pro does not appear. I am signed in under the same account on the same Wi-Fi network. I have tried all basic troubleshooting. It is not clear to me that I am logged in as a developer, which could be the issue, but I am using OS 26, which does not appear to have the developer option under privacy and security where it used to reside in previous versions of the OS.
Replies
0
Boosts
0
Views
125
Activity
Jul ’25
Proper includes into Package.swift
Ok, I have a bit of special problem. I want to use the "Swift Upcoming Feature Flags" in my packages. The problem is that we have quite a lot of Packages in a quite deep tree: at the root of the Package directory there are four dirs: AppA/ AppB/ Shared/ Temporary/ also the packages ExternalLibs and BuildPlugins. Temporary contains Packages that need rework and the other three subdirs each contain the subdirs: Features/ Utilities/ Services/ All in all there are over 100 packages. Now I would like to use definitions like https://github.com/treastrain/swift-upcomingfeatureflags-cheatsheet to use in the Package.swift files. And as you might guess, I do not want to copy those into each and every Package.swift file. It seems like SPM is only finding includes by itself if they are in the exact same directory as the Package.swift file 🙄 That's not at all helpful… Has anyone found a way to do useful includes into Package.swift files? Any help appreciated. Thank You Roddi
Replies
0
Boosts
0
Views
124
Activity
Jul ’25