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

Xcode Documentation

Posts under Xcode subtopic

Post

Replies

Boosts

Views

Activity

waiting for reply from DTS engineer.
Hello , am facing issue in submitting my app to store I have submitted my case to apple developer team my case ids "101969263018","101975805043". they told me to submit the report from feedback assistance my case id : FB12141270. but still I don't get any replay form feedback assistance. after that I submitted my case to DTS engineer case id : 2394373. got email to submit some file which I have submitted after that still I don't get any reply from DTS team. please help me to short out this issue. last one month am trying to short out this issue with apple developer team. still I don't get solution.
2
0
969
Sep ’25
ISO 14443-4 Reading issue
I am working with a Texas Instruments RF430 NFC tag, which is compliant with: ISO/IEC 14443-4 (ISO-DEP) NFC Forum Type 4 Tag NFC-B protocol NDEF-formatted storage I’m using an iPhone 12 running iOS 18, and my app uses the Core NFC framework. Using NFCNDEFReaderSessionDelegate, I am able to successfully read the first NDEF message from the tag. However, the tag stores multiple NDEF messages, and I would like to access the others. Based on the tag’s specification, these messages are accessible via an NDEF file located at file ID 0xE104. To try and access this additional NDEF file, I attempted to use NFCTagReaderSession with the NFCTagReaderSessionDelegate, intending to issue APDU commands. However, the tagReaderSession(_:didDetect:) delegate method is never called, even though the tag is present and detected using NFCNDEFReaderSession. My questions: Does Core NFC on iOS 18 support issuing custom APDU commands to ISO 14443-4 (NFC-B) tags like the TI RF430? Is the use of NFCTagReaderSession with NFC-B fully supported for tags that implement ISO-DEP (even if they are NDEF-formatted)? Is there any known limitation or configuration required to ensure tagReaderSession(_:didDetect:) is triggered for NFC-B/ISO-DEP tags?
3
0
375
Jan ’26
new rsync version not working as expected
after upgrade macos version to 15.4 the rsync start failing that cause the xcodebuild fail and not generate ipa rsync: on remote machine: --extended-attributes: unknown option rsync error: syntax or usage error (code 1) at main.c(1802) [server=3.4.1] rsync(73444): error: unexpected end of file rsync(73444): error: io_read_nonblocking rsync(73444): error: io_read_buf rsync(73444): error: io_read_int rsync(73444): warning: child 73445 exited with status 1
0
0
266
Apr ’25
CoreData in Swift Packages
I am having issues loading my model from a Swift Package with the following structure: | Package.swift | Sources | - | SamplePackage | - | - Core | - | - | - SamplePackageDataStack.swift | - | - | - DataModel.xcdatamodeld | - | - | - | - Model.xcdatamodel ( <- is this new? ) As mentioned, I am not required to list the xcdatamodeld as a resource in my Package manifest. When trying to load the model in the main app, I am getting CoreData: error:  Failed to load model named DataModel Code: In my swift Package: public class SamplePackageDataStack: NSObject {     public static let shared = SamplePackageDataStack()     private override init() {}     public lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "DataModel") container.loadPersistentStores(completionHandler: { (storeDescription, error) in             if let error = error as NSError? {                 fatalError("Unresolved error \(error), \(error.userInfo)")             }         })         return container     }()     /// The managed object context associated with the main queue. (read-only)     public var context: NSManagedObjectContext {         return self.persistentContainer.viewContext     }     public func saveContext () {         if context.hasChanges {             do {                 try context.save()             } catch {                 let nserror = error as NSError                 fatalError("Unresolved error \(nserror), \(nserror.userInfo)")             }         }     } } Main App: import SamplePackage class ViewController: UIViewController { override func viewDidLoad() { &#9;&#9;&#9;&#9;&#9;super.viewDidLoad() &#9;var container = SamplePackageDataStack.shared.persistentContainer         print(container) &#9;&#9;} }
5
0
5.6k
Jul ’25
devicectl: clarify username requirement for "certain" domains
Hi there, When using devicectl to manage files: It's unclear for which domains the username should be provided It's unclear how to determine the username Listing files USAGE: devicectl device info files [<options>] --device <uuid|ecid|serial_number|udid|name|dns_name> --domain-type <domain-type> FILE OPTIONS: --username <username> The username of the user we should target. Only relevant for certain domains. --domain-type <domain-type> The file service domain. Valid values are: temporary, appDataContainer, appGroupDataContainer, systemCrashLogs. You must specify a valid domain and identifier pair. Certain domains must be accompanied by an identifier that provides additional context. For example, if the domain is an app data container, the identifier is the bundle ID of the app. For temporary directories, the identifier is a unique client-provided string which is used to get your own space, separate from those of other clients. --domain-identifier <domain-identifier> A unique string used to provide additional context to the domain. --username The username of the user we should target. Only relevant for certain domains. In the domains, the username requirements are not mentioned. Copying files USAGE: devicectl device copy to --device <uuid|ecid|serial_number|udid|name|dns_name> --source <source> [--destination <destination>] [--user <user>] --domain-type <domain-type> [--domain-identifier <domain-identifier>] [--remove-existing-content <remove-existing-content>] [--verbose] [--quiet] [--timeout <seconds>] [--json-output <path>] [--log-output <path>] DEVICE OPTIONS: -d, --device <uuid|ecid|serial_number|udid|name|dns_name> The identifier, ECID, serial number, UDID, user-provided name, or DNS name of the device. FILE OPTIONS: --source <source> The item which should be copied. --destination <destination> The location to which the item should be copied. -u, --user <user> The name of the user we should target. Only relevant for certain domains. --domain-type <domain-type> The file service domain. Valid values are: temporary, appDataContainer, appGroupDataContainer, systemCrashLogs. You must specify a valid domain and identifier pair. Certain domains must be accompanied by an identifier that provides additional context. For example, if the domain is an app data container, the identifier is the bundle ID of the app. For temporary directories, the identifier is a unique client-provided string which is used to get your own space, separate from those of other clients. --domain-identifier <domain-identifier> A unique string used to provide additional context to the -u, --user The name of the user we should target. Only relevant for certain domains. The "certain domains" are not specified. user vs username The list files command takes: --username <username> The username of the user we should target. Only relevant for certain domains The copy command takes: -u, --user <user> The name of the user we should target. Only relevant for certain domains. Is there a difference between username and user? How do we figure out the user or username? From https://developer.apple.com/forums/thread/749649 I learned that about the "mobile" value, but why, and how? It would help if these arguments could be explained in more detail.
0
0
102
Apr ’25
Can you use an external macOS device as an Xcode run destination?
Just wondering if it is possible to configure a secondary macbook to act as a run destination in Xcode, similar to how you would configure an iPhone as a run destination. I have tried connecting my device via USB-C and I can see that my macbook detects the second macbook via USB but it does not show up when trying to add devices in Xcode. I suppose this flow might not be supported?
0
0
148
May ’25
Blocker: Registering simulator runtime with CoreSimulator failed.
Hello, FWIW I've been developing enterprise iOS apps going on 10 years and haven't seen a bug like this. It's a major blocker. Any advice is welcome. Pulled latest from my team's repository . I ran into a build issue. Reinstalled cocoa pods, resolved swift packages, cleared cache, and then tried to update my iOS simulators... Since then, everything is bricked. Can't side load an app or download a simulator. When I try to download simulator, as suggested by Xcode, I receive the following error: Registering simulator runtime with CoreSimulator failed. Domain: DVTDownloadableErrorDomain Code: 29 User Info: { DVTErrorCreationDateKey = "2025-05-28 19:18:13 +0000"; } Registering simulator runtime with CoreSimulator failed. Domain: DVTDownloadableErrorDomain Code: 29 Mount failed: SUIS premount dissented Domain: com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code: 10 Failure Reason: the operation is not appropriate (kDAReturnNotPermitted) System Information macOS Version 15.5 (Build 24F74) Xcode 16.3 (23785) (Build 16E140) Timestamp: 2025-05-28T14:18:13-05:00 I've restarted my Mac. I've cleared caches. I cleared project builds and all old simulators. I've reverted to much older previous commits after trying above just in case (even though I've verified no one else on my team is experiencing this issue). Nothing works. I found a post online and tried this command: xcrun devicectl manage ddis update Resulting in this: Host CoreDevice version: 443.19 13:57:32 Updating host DDIs. 13:57:32 Failed to update the host's developer disk images. ERROR: Failed to update developer disk images on the host. (com.apple.dt.CoreDeviceError error 12010 (0x2EEA)) ERROR: Request to update the host's developer disk images failed. (com.apple.dt.CoreDeviceError error 12013 (0x2EED)) ERROR: Failed to update developer disk images on the host. (com.apple.dt.CoreDeviceError error 12010 (0x2EEA)) ERROR: Failed to copy a developer disk image to the underlying system. (com.apple.dt.CoreDeviceError error 12009 (0x2EE9)) NSURL = file:///Library/Developer/CoreDevice/CandidateDDIs/iOS_DDI.dmg DeveloperDiskImageInstallLocation = file:///Library/Developer/DeveloperDiskImages_2D128D6A-770D-4040-8819-C611DC607098.staged/ ERROR: The developer disk image could not be staged on the host. (com.apple.dt.CoreDeviceError error 12045 (0x2F0D)) NSURL = file:///Library/Developer/CoreDevice/CandidateDDIs/iOS_DDI.dmg ERROR: The operation couldn’t be completed. StorageKit claimed that it mounted the disk image at the required path, but the item there is not a disk image. (NSPOSIXErrorDomain error 2 (0x02)) ExpectedMountPoint = /private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/28C3C798-5FB7-45E6-A95C-4CC84A3D7851 NSLocalizedFailureReason = StorageKit claimed that it mounted the disk image at the required path, but the item there is not a disk image. NSURL = file:///Library/Developer/CoreDevice/CandidateDDIs/iOS_DDI.dmg NSLocalizedRecoverySuggestion = This is likely due to a software bug. Please file a bug report including a sysdiagnose. Also, here is the latest from my CoreSimulator logs: May 28 13:50:24 Mac com.apple.ibtool[3680] : Unable to discover any Simulator runtimes. Developer Directory is /Applications/Xcode_16.3.app/Contents/Developer. May 28 13:52:10 Mac com.apple.CoreSimulator.simctl[4509] : Unable to discover any Simulator runtimes. Developer Directory is /Applications/Xcode.app/Contents/Developer. May 28 13:52:44 Mac com.apple.dt.Xcode[948] : Adding runtime disk image '/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/6fb1e5fe25ee1c372f7116516e615c556906bd4e.asset/AssetData/090-44150-318.dmg' error: Error Domain=com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code=10 "Mount failed: SUIS premount dissented" UserInfo={NSLocalizedDescription=Mount failed: SUIS premount dissented, NSLocalizedFailureReason=the operation is not appropriate (kDAReturnNotPermitted)} May 28 13:53:35 Mac com.apple.dt.Xcode[948] : Adding runtime disk image '/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/6fb1e5fe25ee1c372f7116516e615c556906bd4e.asset/AssetData/090-44150-318.dmg' error: Error Domain=com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code=10 "Mount failed: SUIS premount dissented" UserInfo={NSLocalizedDescription=Mount failed: SUIS premount dissented, NSLocalizedFailureReason=the operation is not appropriate (kDAReturnNotPermitted)} May 28 14:21:02 Mac com.apple.dt.Xcode[948] : Adding runtime disk image '/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/6fb1e5fe25ee1c372f7116516e615c556906bd4e.asset/AssetData/090-44150-318.dmg' error: Error Domain=com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code=10 "Mount failed: SUIS premount dissented" UserInfo={NSLocalizedDescription=Mount failed: SUIS premount dissented, NSLocalizedFailureReason=the operation is not appropriate (kDAReturnNotPermitted)} I appreciate any help. Thank you
1
0
184
May ’25
LaunchServices has returned error -10810
M3 MBP running Sequoia 15.4.1 and Xcode 16.4 Mac is (old school) AD bound Mac is managed by Intune, and is set to allow apps to be run from anywhere. When we try to build and run anything in Xcode, we get the error in the title. Pertinent log entries: mcxalr{94} ** Denying execute for uid=1474851099 path=/Users//Library/Developer/Xcode/DerivedData/mactest2-gevqwurjuobygdaiwboubirauoxv/Build/Products/Debug/mactest2.app/Contents/MacOS/mactest2 If we run it from an AD account that is set up as a local admin, then we get the OS dialog saying: You don't have permissions to use the application "mactest2." For more information, contact the person who set up your account. If that user logs out, and we log in with a "true" local admin account (UID 501), then we get the same results, BUT the OS dialog gives us the option to grant access to the app. (for whatever reason, the auth dialog seems to be created by ScreenTime.) Signing is set up correctly, but we're not trying to distribute anything, just literally trying to run the generic "hello world" default macOS app project.
1
0
71
May ’25
How to call API of tested app in UI Testing of Xcode7?
Hi guys, recently I've been investigating new UI Testing in Xcode7. There seems to be limited APIs we can call direct in UI test. Can I include header files and call public API of my tested app in UI Test? so that I can have more flexibility to set my app status before running test. I intent to call API method "-(void)reloadURL:(NSURL *)url" of my app in UI Test, but test failed with "XCTRunner -[_XCTRunnerAppDelegate myAppDelegateUtils]: unrecoginzed selector sent to instance 0x7cf0a992fe10"In Unit Test we can call any API of the tested app, does it support in UI Testing too? I'm a start learner of Xcode and its testing...could anyone help to answer this question? Thanks!
3
0
2k
3w
AppIcon not showing in "About" box or app switcher
I can't get my app's logo to show in the "About" box nor in the app switcher. I have: created "Assets.xcassets" created "AppIcon" added 10 image files of the logo to the AppIcon image well [? right terminology ?] saved and built the project – there are no errors or warnings When I run the project, I still get the default image showing in the About box and in the app switcher. Because first attempt failed, I changed "applet" to "AppIcon" in "App Icons and Launch Screen" in "General" settings. That did not change the result. I also toggled "Include all app icon assets" which also did not change the result. Weirdly, my app's logo DOES show beside the app name in every item of "Build Settings". Do I need to do something else to change the default image in the "About" box ? Thanks. [Xcode 16.2 on macOS 15.3.2.]
1
0
300
Mar ’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
148
Jun ’25
Best strategy to embed multiple dylibs into frameworks
Hi, I compiled Intel Open Image Denoise library for iOS, and obtained a bunch of dependent dylibs. I want to use these ones in a swift project (via bridging as this is C/C++) targeting the iPad. I understand that it is required to embed these dylibs into frameworks as iOS doesn't allow dylib. Is it necessary to generate one framework for each dylib? If so, how are dependencies between the libraries (and their frameworks) managed? Or, is it possible to generate only one framework embeding all the dependencies?
0
0
144
Jun ’25
AuthenticateAsClient(this.Host、this.certificates、System.Security.Authentication.SslProtocols.Tls12,false)
Apple's push cannot receive information, use the open-source library JdSoft. Apple.Apns.Notifications Because I am not familiar with it, I modified Tls12. Does anyone know how to modify this open-source library to achieve push functionality apnsStream.AuthenticateAsClient(this.Host, this.certificates, System.Security.Authentication.SslProtocols.Tls12, false)
0
0
68
Apr ’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
205
Jan ’26
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
AR Camera Freezes in Split View on iPad (Vuforia + Unity + iOS 16+)
Hi everyone, We're developing an AR app using Unity with Vuforia for object detection. Our app works well in full-screen mode, including detection and post-detection phases. However, we're facing a specific issue in iPad Split View multitasking mode. Problem: The AR camera (Vuforia-based) freezes during object detection if another app is opened in Split View. Post-detection, everything works fine in Split View. The problem only occurs during detection. Testing Environment: iPadOS 16+ Unity with Vuforia plugin Using EnableMultitaskingCameraAccess() method with AVFoundation to support camera multitasking AR scene is set up properly with detection capabilities in full-screen
0
0
141
May ’25
waiting for reply from DTS engineer.
Hello , am facing issue in submitting my app to store I have submitted my case to apple developer team my case ids "101969263018","101975805043". they told me to submit the report from feedback assistance my case id : FB12141270. but still I don't get any replay form feedback assistance. after that I submitted my case to DTS engineer case id : 2394373. got email to submit some file which I have submitted after that still I don't get any reply from DTS team. please help me to short out this issue. last one month am trying to short out this issue with apple developer team. still I don't get solution.
Replies
2
Boosts
0
Views
969
Activity
Sep ’25
ISO 14443-4 Reading issue
I am working with a Texas Instruments RF430 NFC tag, which is compliant with: ISO/IEC 14443-4 (ISO-DEP) NFC Forum Type 4 Tag NFC-B protocol NDEF-formatted storage I’m using an iPhone 12 running iOS 18, and my app uses the Core NFC framework. Using NFCNDEFReaderSessionDelegate, I am able to successfully read the first NDEF message from the tag. However, the tag stores multiple NDEF messages, and I would like to access the others. Based on the tag’s specification, these messages are accessible via an NDEF file located at file ID 0xE104. To try and access this additional NDEF file, I attempted to use NFCTagReaderSession with the NFCTagReaderSessionDelegate, intending to issue APDU commands. However, the tagReaderSession(_:didDetect:) delegate method is never called, even though the tag is present and detected using NFCNDEFReaderSession. My questions: Does Core NFC on iOS 18 support issuing custom APDU commands to ISO 14443-4 (NFC-B) tags like the TI RF430? Is the use of NFCTagReaderSession with NFC-B fully supported for tags that implement ISO-DEP (even if they are NDEF-formatted)? Is there any known limitation or configuration required to ensure tagReaderSession(_:didDetect:) is triggered for NFC-B/ISO-DEP tags?
Replies
3
Boosts
0
Views
375
Activity
Jan ’26
new rsync version not working as expected
after upgrade macos version to 15.4 the rsync start failing that cause the xcodebuild fail and not generate ipa rsync: on remote machine: --extended-attributes: unknown option rsync error: syntax or usage error (code 1) at main.c(1802) [server=3.4.1] rsync(73444): error: unexpected end of file rsync(73444): error: io_read_nonblocking rsync(73444): error: io_read_buf rsync(73444): error: io_read_int rsync(73444): warning: child 73445 exited with status 1
Replies
0
Boosts
0
Views
266
Activity
Apr ’25
Module audioplayers not found
Hi! I am getting this error since an xcode update when trying to build my project. Module 'audioplayers' not found (in target 'Runner' from project 'Runner'). Thank you in advance for any help!
Replies
0
Boosts
0
Views
87
Activity
May ’25
Variable rename - Xcode 16.2
When renaming a variable in the active scheme, it's not renamed for the non active ones. As a result when you have code that operates in both schemes (with #if os() conditions) a compile time error is introduced. Is this an Xcode bug or expected behaviour?
Replies
1
Boosts
0
Views
268
Activity
Mar ’25
CoreData in Swift Packages
I am having issues loading my model from a Swift Package with the following structure: | Package.swift | Sources | - | SamplePackage | - | - Core | - | - | - SamplePackageDataStack.swift | - | - | - DataModel.xcdatamodeld | - | - | - | - Model.xcdatamodel ( <- is this new? ) As mentioned, I am not required to list the xcdatamodeld as a resource in my Package manifest. When trying to load the model in the main app, I am getting CoreData: error:  Failed to load model named DataModel Code: In my swift Package: public class SamplePackageDataStack: NSObject {     public static let shared = SamplePackageDataStack()     private override init() {}     public lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "DataModel") container.loadPersistentStores(completionHandler: { (storeDescription, error) in             if let error = error as NSError? {                 fatalError("Unresolved error \(error), \(error.userInfo)")             }         })         return container     }()     /// The managed object context associated with the main queue. (read-only)     public var context: NSManagedObjectContext {         return self.persistentContainer.viewContext     }     public func saveContext () {         if context.hasChanges {             do {                 try context.save()             } catch {                 let nserror = error as NSError                 fatalError("Unresolved error \(nserror), \(nserror.userInfo)")             }         }     } } Main App: import SamplePackage class ViewController: UIViewController { override func viewDidLoad() { &#9;&#9;&#9;&#9;&#9;super.viewDidLoad() &#9;var container = SamplePackageDataStack.shared.persistentContainer         print(container) &#9;&#9;} }
Replies
5
Boosts
0
Views
5.6k
Activity
Jul ’25
devicectl: clarify username requirement for "certain" domains
Hi there, When using devicectl to manage files: It's unclear for which domains the username should be provided It's unclear how to determine the username Listing files USAGE: devicectl device info files [<options>] --device <uuid|ecid|serial_number|udid|name|dns_name> --domain-type <domain-type> FILE OPTIONS: --username <username> The username of the user we should target. Only relevant for certain domains. --domain-type <domain-type> The file service domain. Valid values are: temporary, appDataContainer, appGroupDataContainer, systemCrashLogs. You must specify a valid domain and identifier pair. Certain domains must be accompanied by an identifier that provides additional context. For example, if the domain is an app data container, the identifier is the bundle ID of the app. For temporary directories, the identifier is a unique client-provided string which is used to get your own space, separate from those of other clients. --domain-identifier <domain-identifier> A unique string used to provide additional context to the domain. --username The username of the user we should target. Only relevant for certain domains. In the domains, the username requirements are not mentioned. Copying files USAGE: devicectl device copy to --device <uuid|ecid|serial_number|udid|name|dns_name> --source <source> [--destination <destination>] [--user <user>] --domain-type <domain-type> [--domain-identifier <domain-identifier>] [--remove-existing-content <remove-existing-content>] [--verbose] [--quiet] [--timeout <seconds>] [--json-output <path>] [--log-output <path>] DEVICE OPTIONS: -d, --device <uuid|ecid|serial_number|udid|name|dns_name> The identifier, ECID, serial number, UDID, user-provided name, or DNS name of the device. FILE OPTIONS: --source <source> The item which should be copied. --destination <destination> The location to which the item should be copied. -u, --user <user> The name of the user we should target. Only relevant for certain domains. --domain-type <domain-type> The file service domain. Valid values are: temporary, appDataContainer, appGroupDataContainer, systemCrashLogs. You must specify a valid domain and identifier pair. Certain domains must be accompanied by an identifier that provides additional context. For example, if the domain is an app data container, the identifier is the bundle ID of the app. For temporary directories, the identifier is a unique client-provided string which is used to get your own space, separate from those of other clients. --domain-identifier <domain-identifier> A unique string used to provide additional context to the -u, --user The name of the user we should target. Only relevant for certain domains. The "certain domains" are not specified. user vs username The list files command takes: --username <username> The username of the user we should target. Only relevant for certain domains The copy command takes: -u, --user <user> The name of the user we should target. Only relevant for certain domains. Is there a difference between username and user? How do we figure out the user or username? From https://developer.apple.com/forums/thread/749649 I learned that about the "mobile" value, but why, and how? It would help if these arguments could be explained in more detail.
Replies
0
Boosts
0
Views
102
Activity
Apr ’25
Can you use an external macOS device as an Xcode run destination?
Just wondering if it is possible to configure a secondary macbook to act as a run destination in Xcode, similar to how you would configure an iPhone as a run destination. I have tried connecting my device via USB-C and I can see that my macbook detects the second macbook via USB but it does not show up when trying to add devices in Xcode. I suppose this flow might not be supported?
Replies
0
Boosts
0
Views
148
Activity
May ’25
Blocker: Registering simulator runtime with CoreSimulator failed.
Hello, FWIW I've been developing enterprise iOS apps going on 10 years and haven't seen a bug like this. It's a major blocker. Any advice is welcome. Pulled latest from my team's repository . I ran into a build issue. Reinstalled cocoa pods, resolved swift packages, cleared cache, and then tried to update my iOS simulators... Since then, everything is bricked. Can't side load an app or download a simulator. When I try to download simulator, as suggested by Xcode, I receive the following error: Registering simulator runtime with CoreSimulator failed. Domain: DVTDownloadableErrorDomain Code: 29 User Info: { DVTErrorCreationDateKey = "2025-05-28 19:18:13 +0000"; } Registering simulator runtime with CoreSimulator failed. Domain: DVTDownloadableErrorDomain Code: 29 Mount failed: SUIS premount dissented Domain: com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code: 10 Failure Reason: the operation is not appropriate (kDAReturnNotPermitted) System Information macOS Version 15.5 (Build 24F74) Xcode 16.3 (23785) (Build 16E140) Timestamp: 2025-05-28T14:18:13-05:00 I've restarted my Mac. I've cleared caches. I cleared project builds and all old simulators. I've reverted to much older previous commits after trying above just in case (even though I've verified no one else on my team is experiencing this issue). Nothing works. I found a post online and tried this command: xcrun devicectl manage ddis update Resulting in this: Host CoreDevice version: 443.19 13:57:32 Updating host DDIs. 13:57:32 Failed to update the host's developer disk images. ERROR: Failed to update developer disk images on the host. (com.apple.dt.CoreDeviceError error 12010 (0x2EEA)) ERROR: Request to update the host's developer disk images failed. (com.apple.dt.CoreDeviceError error 12013 (0x2EED)) ERROR: Failed to update developer disk images on the host. (com.apple.dt.CoreDeviceError error 12010 (0x2EEA)) ERROR: Failed to copy a developer disk image to the underlying system. (com.apple.dt.CoreDeviceError error 12009 (0x2EE9)) NSURL = file:///Library/Developer/CoreDevice/CandidateDDIs/iOS_DDI.dmg DeveloperDiskImageInstallLocation = file:///Library/Developer/DeveloperDiskImages_2D128D6A-770D-4040-8819-C611DC607098.staged/ ERROR: The developer disk image could not be staged on the host. (com.apple.dt.CoreDeviceError error 12045 (0x2F0D)) NSURL = file:///Library/Developer/CoreDevice/CandidateDDIs/iOS_DDI.dmg ERROR: The operation couldn’t be completed. StorageKit claimed that it mounted the disk image at the required path, but the item there is not a disk image. (NSPOSIXErrorDomain error 2 (0x02)) ExpectedMountPoint = /private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/28C3C798-5FB7-45E6-A95C-4CC84A3D7851 NSLocalizedFailureReason = StorageKit claimed that it mounted the disk image at the required path, but the item there is not a disk image. NSURL = file:///Library/Developer/CoreDevice/CandidateDDIs/iOS_DDI.dmg NSLocalizedRecoverySuggestion = This is likely due to a software bug. Please file a bug report including a sysdiagnose. Also, here is the latest from my CoreSimulator logs: May 28 13:50:24 Mac com.apple.ibtool[3680] : Unable to discover any Simulator runtimes. Developer Directory is /Applications/Xcode_16.3.app/Contents/Developer. May 28 13:52:10 Mac com.apple.CoreSimulator.simctl[4509] : Unable to discover any Simulator runtimes. Developer Directory is /Applications/Xcode.app/Contents/Developer. May 28 13:52:44 Mac com.apple.dt.Xcode[948] : Adding runtime disk image '/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/6fb1e5fe25ee1c372f7116516e615c556906bd4e.asset/AssetData/090-44150-318.dmg' error: Error Domain=com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code=10 "Mount failed: SUIS premount dissented" UserInfo={NSLocalizedDescription=Mount failed: SUIS premount dissented, NSLocalizedFailureReason=the operation is not appropriate (kDAReturnNotPermitted)} May 28 13:53:35 Mac com.apple.dt.Xcode[948] : Adding runtime disk image '/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/6fb1e5fe25ee1c372f7116516e615c556906bd4e.asset/AssetData/090-44150-318.dmg' error: Error Domain=com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code=10 "Mount failed: SUIS premount dissented" UserInfo={NSLocalizedDescription=Mount failed: SUIS premount dissented, NSLocalizedFailureReason=the operation is not appropriate (kDAReturnNotPermitted)} May 28 14:21:02 Mac com.apple.dt.Xcode[948] : Adding runtime disk image '/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime/6fb1e5fe25ee1c372f7116516e615c556906bd4e.asset/AssetData/090-44150-318.dmg' error: Error Domain=com.apple.CoreSimulator.simdiskimaged.SimDiskImageError Code=10 "Mount failed: SUIS premount dissented" UserInfo={NSLocalizedDescription=Mount failed: SUIS premount dissented, NSLocalizedFailureReason=the operation is not appropriate (kDAReturnNotPermitted)} I appreciate any help. Thank you
Replies
1
Boosts
0
Views
184
Activity
May ’25
LaunchServices has returned error -10810
M3 MBP running Sequoia 15.4.1 and Xcode 16.4 Mac is (old school) AD bound Mac is managed by Intune, and is set to allow apps to be run from anywhere. When we try to build and run anything in Xcode, we get the error in the title. Pertinent log entries: mcxalr{94} ** Denying execute for uid=1474851099 path=/Users//Library/Developer/Xcode/DerivedData/mactest2-gevqwurjuobygdaiwboubirauoxv/Build/Products/Debug/mactest2.app/Contents/MacOS/mactest2 If we run it from an AD account that is set up as a local admin, then we get the OS dialog saying: You don't have permissions to use the application "mactest2." For more information, contact the person who set up your account. If that user logs out, and we log in with a "true" local admin account (UID 501), then we get the same results, BUT the OS dialog gives us the option to grant access to the app. (for whatever reason, the auth dialog seems to be created by ScreenTime.) Signing is set up correctly, but we're not trying to distribute anything, just literally trying to run the generic "hello world" default macOS app project.
Replies
1
Boosts
0
Views
71
Activity
May ’25
How to call API of tested app in UI Testing of Xcode7?
Hi guys, recently I've been investigating new UI Testing in Xcode7. There seems to be limited APIs we can call direct in UI test. Can I include header files and call public API of my tested app in UI Test? so that I can have more flexibility to set my app status before running test. I intent to call API method "-(void)reloadURL:(NSURL *)url" of my app in UI Test, but test failed with "XCTRunner -[_XCTRunnerAppDelegate myAppDelegateUtils]: unrecoginzed selector sent to instance 0x7cf0a992fe10"In Unit Test we can call any API of the tested app, does it support in UI Testing too? I'm a start learner of Xcode and its testing...could anyone help to answer this question? Thanks!
Replies
3
Boosts
0
Views
2k
Activity
3w
Blocker: Registering simulator runtime with CoreSimulator failed.
Blocker: Registering simulator runtime with CoreSimulator failed.
Replies
0
Boosts
0
Views
75
Activity
May ’25
AppIcon not showing in "About" box or app switcher
I can't get my app's logo to show in the "About" box nor in the app switcher. I have: created "Assets.xcassets" created "AppIcon" added 10 image files of the logo to the AppIcon image well [? right terminology ?] saved and built the project – there are no errors or warnings When I run the project, I still get the default image showing in the About box and in the app switcher. Because first attempt failed, I changed "applet" to "AppIcon" in "App Icons and Launch Screen" in "General" settings. That did not change the result. I also toggled "Include all app icon assets" which also did not change the result. Weirdly, my app's logo DOES show beside the app name in every item of "Build Settings". Do I need to do something else to change the default image in the "About" box ? Thanks. [Xcode 16.2 on macOS 15.3.2.]
Replies
1
Boosts
0
Views
300
Activity
Mar ’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?
Replies
2
Boosts
0
Views
148
Activity
Jun ’25
Notification from BLE device even when the app is killed by the user
I have an app that connects to a BLE device and registers its services. I can create a notification when my app is running on foreground or background, but is it possible to show a notification when a message is recieved from the BLE device while the app has been killed by the user?
Replies
1
Boosts
0
Views
85
Activity
Apr ’25
Best strategy to embed multiple dylibs into frameworks
Hi, I compiled Intel Open Image Denoise library for iOS, and obtained a bunch of dependent dylibs. I want to use these ones in a swift project (via bridging as this is C/C++) targeting the iPad. I understand that it is required to embed these dylibs into frameworks as iOS doesn't allow dylib. Is it necessary to generate one framework for each dylib? If so, how are dependencies between the libraries (and their frameworks) managed? Or, is it possible to generate only one framework embeding all the dependencies?
Replies
0
Boosts
0
Views
144
Activity
Jun ’25
AuthenticateAsClient(this.Host、this.certificates、System.Security.Authentication.SslProtocols.Tls12,false)
Apple's push cannot receive information, use the open-source library JdSoft. Apple.Apns.Notifications Because I am not familiar with it, I modified Tls12. Does anyone know how to modify this open-source library to achieve push functionality apnsStream.AuthenticateAsClient(this.Host, this.certificates, System.Security.Authentication.SslProtocols.Tls12, false)
Replies
0
Boosts
0
Views
68
Activity
Apr ’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
205
Activity
Jan ’26
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
AR Camera Freezes in Split View on iPad (Vuforia + Unity + iOS 16+)
Hi everyone, We're developing an AR app using Unity with Vuforia for object detection. Our app works well in full-screen mode, including detection and post-detection phases. However, we're facing a specific issue in iPad Split View multitasking mode. Problem: The AR camera (Vuforia-based) freezes during object detection if another app is opened in Split View. Post-detection, everything works fine in Split View. The problem only occurs during detection. Testing Environment: iPadOS 16+ Unity with Vuforia plugin Using EnableMultitaskingCameraAccess() method with AVFoundation to support camera multitasking AR scene is set up properly with detection capabilities in full-screen
Replies
0
Boosts
0
Views
141
Activity
May ’25