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

Xcode Documentation

Posts under Xcode subtopic

Post

Replies

Boosts

Views

Activity

launchd_sim and AppleSpell deadlock
I've got a 2019 Intel iMac running Sequoia 15.4.1 and Xcode 16.3. Every time I try to view a storyboard Xcode locks up and beachballs on me. It takes minutes to load the file. When I force-quit Xcode, the report that shows up has this as the reason: Processes reached dispatch thread soft limit (64): launchd_sim [96305] [unique pid 194673], launchd_sim [96260] [unique pid 194628] Deadlock: AppleSpell [1494] thread 0x1df0c4 DispatchQueue 313 -> AppleSpell [1494] thread 0x1df0c4 DispatchQueue 313 Deadlock: AppleSpell [1494] thread 0x1df114 DispatchQueue 86 -> AppleSpell [1494] thread 0x1df114 DispatchQueue 86 Blocked by Deadlock: 1 task - AppleSpell [1494] I'm wondering, why is AppleSpell trying to spell-check a plist file? Is there any way to tell AppleSpell to ignore a file?
0
0
78
Apr ’25
Have problem with automatic signing
hông thể cài đặt “TrungDemo” Domain: IXUserPresentableErrorDomain Code: 14 Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.kpOILI/extracted/TrungDemo.app : 0xe8008018 (The identity used to sign the executable is no longer valid.) Please ensure that the certificates used to sign your app have not expired. If this issue persists, please attach an IPA of your app when sending a report to Apple. User Info: { DVTErrorCreationDateKey = "2025-04-29 10:51:27 +0000"; IDERunOperationFailingWorker = IDEInstallCoreDeviceWorker; } Failed to install the app on the device. Domain: com.apple.dt.CoreDeviceError Code: 3002 User Info: { NSURL = "file:///Users/studiozego/Library/Developer/Xcode/DerivedData/TrungDemo-blspaulbkwypvhgaxxfjqbppuugg/Build/Products/Debug-iphoneos/TrungDemo.app"; } Không thể cài đặt “TrungDemo” Domain: IXUserPresentableErrorDomain Code: 14 Failure Reason: Không thể cài đặt ứng dụng này vì không thể xác minh tính toàn vẹn của ứng dụng. Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.kpOILI/extracted/TrungDemo.app : 0xe8008018 (The identity used to sign the executable is no longer valid.) Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.kpOILI/extracted/TrungDemo.app : 0xe8008018 (The identity used to sign the executable is no longer valid.) Domain: MIInstallerErrorDomain Code: 13 User Info: { FunctionName = "+[MICodeSigningVerifier _validateSignatureAndCopyInfoForURL:withOptions:error:]"; LegacyErrorString = ApplicationVerificationFailed; LibMISErrorNumber = "-402620392"; SourceFileLine = 80; } Event Metadata: com.apple.dt.IDERunOperationWorkerFinished : { "device_identifier" = "00008132-0001786E22B9001C"; "device_isCoreDevice" = 1; "device_model" = "iPad16,4"; "device_osBuild" = "18.4 (22E240)"; "device_platform" = "com.apple.platform.iphoneos"; "device_thinningType" = "iPad16,4-A"; "dvt_coredevice_version" = "443.19"; "dvt_coresimulator_version" = "1010.10"; "dvt_mobiledevice_version" = "1784.102.1"; "launchSession_schemeCommand" = Run; "launchSession_state" = 1; "launchSession_targetArch" = arm64; "operation_duration_ms" = 1320; "operation_errorCode" = 14; "operation_errorDomain" = IXUserPresentableErrorDomain; "operation_errorWorker" = IDEInstallCoreDeviceWorker; "operation_name" = IDERunOperationWorkerGroup; "param_debugger_attachToExtensions" = 0; "param_debugger_attachToXPC" = 1; "param_debugger_type" = 3; "param_destination_isProxy" = 0; "param_destination_platform" = "com.apple.platform.iphoneos"; "param_diag_113575882_enable" = 0; "param_diag_MainThreadChecker_stopOnIssue" = 0; "param_diag_MallocStackLogging_enableDuringAttach" = 0; "param_diag_MallocStackLogging_enableForXPC" = 1; "param_diag_allowLocationSimulation" = 1; "param_diag_checker_tpc_enable" = 1; "param_diag_gpu_frameCapture_enable" = 0; "param_diag_gpu_shaderValidation_enable" = 0; "param_diag_gpu_validation_enable" = 0; "param_diag_guardMalloc_enable" = 0; "param_diag_memoryGraphOnResourceException" = 0; "param_diag_mtc_enable" = 1; "param_diag_queueDebugging_enable" = 1; "param_diag_runtimeProfile_generate" = 0; "param_diag_sanitizer_asan_enable" = 0; "param_diag_sanitizer_tsan_enable" = 0; "param_diag_sanitizer_tsan_stopOnIssue" = 0; "param_diag_sanitizer_ubsan_enable" = 0; "param_diag_sanitizer_ubsan_stopOnIssue" = 0; "param_diag_showNonLocalizedStrings" = 0; "param_diag_viewDebugging_enabled" = 1; "param_diag_viewDebugging_insertDylibOnLaunch" = 1; "param_install_style" = 2; "param_launcher_UID" = 2; "param_launcher_allowDeviceSensorReplayData" = 0; "param_launcher_kind" = 0; "param_launcher_style" = 99; "param_launcher_substyle" = 0; "param_runnable_appExtensionHostRunMode" = 0; "param_runnable_productType" = "com.apple.product-type.application"; "param_structuredConsoleMode" = 1; "param_testing_launchedForTesting" = 0; "param_testing_suppressSimulatorApp" = 0; "param_testing_usingCLI" = 0; "sdk_canonicalName" = "iphoneos18.4"; "sdk_osVersion" = "18.4"; "sdk_variant" = iphoneos; } System Information macOS Version 15.4.1 (Build 24E263) Xcode 16.3 (23785) (Build 16E140) Timestamp: 2025-04-29T17:51:27+07:00
0
0
173
Apr ’25
Custom font not support in Xcode 16.3
I'm experiencing an issue with a custom font not loading properly in Xcode 16.3. The font files are included in the bundle, listed in Info.plist, and verified for correct names using UIFont.familyNames, but they still don't appear at runtime. Has anyone else run into this with Xcode 16.3? Could this be related to recent changes in asset packaging or font catalogs?
0
0
101
Apr ’25
APNS NULL
this is our code foe fetching the apnstoken - and registering for the FCM and snding it to our servers. - we are consistently getting apns == null import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:solaris/services/fetch_deviceId.dart'; Future initializeFCM() async { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance; // Request notification permissions for iOS final settings = await _firebaseMessaging.requestPermission(); print('Notifcation Permission Status: ${settings.authorizationStatus}'); String? apnsToken; int retries = 0; const int maxRetries = 60; const Duration retryDelay = Duration(seconds: 2); // Retry fetching the APNs token until it's available or max retries are reached while (apnsToken == null && retries < maxRetries) { print(retries); apnsToken = await _firebaseMessaging.getAPNSToken(); if (apnsToken == null) { await Future.delayed(retryDelay); retries++; } } if (apnsToken != null) { // APNs token is available, proceed to get FCM token String? fcmToken = await _firebaseMessaging.getToken(); if (fcmToken != null) { // Register the device and token with your backend await registerDeviceAndToken(fcmToken); } else { // Handle the case where FCM token is still null print('FCM token is null.'); } } else { // Handle the case where APNs token is not available after retries print('APNs token not available after retries.'); } } Future registerDeviceAndToken(String fcmToken) async { //fcmToken = fcmToken; print(fcmToken); final user = FirebaseAuth.instance.currentUser; if (user == null) { print('❌ User not logged in'); return; } final deviceId = await DeviceInfoService.getUniqueDeviceId(); //final fcmToken = await FirebaseMessaging.instance.getToken(); print('📱 Device ID from register_fcm: $deviceId'); print('📩 FCM Token from mew getapnd function: $fcmToken'); if (deviceId == null || fcmToken == null) { print('❌ Failed to get deviceId or fcmToken'); return; } final docRef = FirebaseFirestore.instance .collection('master_users') .doc(user.uid) .collection('deviceId') .doc(user.uid); // This document holds a map: { deviceId: fcmToken } print(docRef); try { // Get current data, fallback to empty map final snapshot = await docRef.get(); final data = snapshot.data() ?? <String, dynamic>{}; print(data); // Update or add current deviceId key data[deviceId] = fcmToken; // Save updated map back to Firestore await docRef.set(data); print(data); print('✅ Device ID and FCM token updated/stored under correct structure'); } catch (e) { print('❌ Firestore write error: $e'); } }
0
0
109
Apr ’25
In-app purchases fetching issue
I am trying to add in-app purchases to my app. I created a StoreKit Configuration file and checked the option 'Sync this file with an app in App Store Connect' because I have already completed the subscription setup in my Apple Developer account. I also tried implementing the in-app purchases directly without using the StoreKit Configuration file, but I’m getting an 'Invalid Product Identifiers' error. I’ve double-checked, and the product ID matches the one listed in my Apple account. Please guide me on what I should do.
0
0
126
May ’25
XCODE Account not found
I have one of our developer when he attempts to login to xcode on his macos device, he get a message that account is not found but he has an account and he logs in to app developer portal with no issue. Thanks
0
0
51
Apr ’25
I have a target that dynamically generates the modulemap when new headers are added. Is there a way to specify for the target that uses that modulemap to wait for this modulemap file?
I have two targets: Library and Generate-Library-Modulemap I use a modulemap to help bridge the Objective-C++ code to Swift. Generate-Library-Modulemap is set up to run only when new headers are added (this is done reliably through some trickery). This seems to work, but the problem is that if I add Generate-Library-Modulemap as a dependency of Library, it seems that by the time Library Generate-Library-Modulemap is run, the Library target has already loaded up an outdated modulemap file. The result is my first attempt to build after adding headers is that the framework fails, as even though the modulemap was generated, it was not attached to the framework. The second attempt succeeds as it reads the updated modulemap. Is there any way to force Xcode to run the Generate-Library-Modulemap step before starting on Library? Or perhaps attach the modulemap after the fact?
0
0
81
Jun ’25
iOS 18.4で NFC や FeliCa の読み取りがしずらい状況のようです。こちらは認知されていますでしょうか?どのバージョンで直る想定でしょうか?
■概要: 弊社で開発しているアプリ内には、モバイルSuicaを読み取る機能があるのですが、iOS18.4でSuicaの読み取りができない事象に遭遇しています。(ごくまれに読み取れるときがある) ■利用API CoreNFC ■聞きたいこと: こちらいつごろ修正されるか教えてください。 ■参考情報 他社様ですが類似だと思われる事象が発生しております。
0
0
137
Apr ’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
Refactor->Rename "Refactoring Engine Failure"
For Xcode 15 and Xcode 16, whenever I try to use the Refactor->Rename command I get a spinning busy cursor for a short while then I get an alert that says: Rename Failed Refactoring engine failure. This happens on several projects and I've tried removing the derived data folder, but am at a loss to find additional troubleshooting steps. Are there other files I might remove or reset to get my "Refactoring Engine" back into shape?
0
0
169
Jun ’25
Does Xcode still support capturing GPU workload for OpenGLES game app on iOS?
As far as I know, there was a time that you can capture GPU workload for opengles game app on iOS using Xcode. However, currently I'm using Xcode version 15.2 and iOS18,it seems the "capture GPU workload" button is always disabled when I'm trying to debug my game app which is using opengles api for graphics rendering no matter switchinng "GPU Frame Capture" to "OpenGL ES" or "Metal" or "Automatically" in the scheme. And I'm not able to capture GPU workload for my game on iOS. The only way to make the "capture GPU workload" button enabled is creating a new project using metal api for graphics rendering. But I don't want to change the graphics API, because it will cause a lot. Does Xcode still support capturing GPU workload for OpenGLES game app on iOS? If not, is there an alternative way?
0
0
102
Jun ’25
Need Help Updating a Custom WireGuard SPM for Xcode 16 & Swift 6
Hey iOS Dev's, I’m currently working on a Swift Package Manager (SPM) for WireGuard, originally developed by a previous team member. It was working fine in Xcode 15.2, but after upgrading to Xcode 16 and Swift 6, I need to update the SPM to ensure compatibility with my base projects and other projects relying on it. With Apple making Xcode 16 mandatory for app submissions starting April 24, this has become an urgent issue. I’ve searched extensively but haven’t found a working solution yet. Has anyone faced similar challenges with Swift 6 migration and SPM updates? Any insights, best practices, or debugging tips would be greatly appreciated! Let’s connect and collaborate—I’d love to discuss possible solutions! 😊 #iOSDevelopment #Swift6 #Xcode16 #SPM #WireGuard #iOS #Swift #SoftwareEngineering #AppStore
0
0
113
Apr ’25
xcstrings CFBundleName value changes after building different target
Hi, I followed Xcode’s recommendation and migrated to the new strings format (*.strings → *.xcstrings) using the Migrate to String Catalog option. My project has two build targets: MyAppName MyAppNameVFSCopy Every time I build one or the other target, the value in the .xcstrings file changes under CFBundleName > en > stringUnit > value, switching between MyAppName and MyAppNameVFSCopy. As a result, Git detects a change in source control each time, which is quite annoying. How can I prevent this from happening? After building MyAppNameVFSCopy target, the "value" is MyAppNameVFSCopy "CFBundleName" : { "comment" : "Bundle name", "extractionState" : "extracted_with_value", "localizations" : { "en" : { "stringUnit" : { "state" : "new", "value" : "MyAppNameVFScopy" } } } } After building MyAppName target, the "value" changes to MyAppName "CFBundleName" : { "comment" : "Bundle name", "extractionState" : "extracted_with_value", "localizations" : { "en" : { "stringUnit" : { "state" : "new", "value" : "MyAppName" } } } } Deleting CFBundleName from *.xcstrings file didn't help. CFBundleName is automatically created again after building target. Both targets has it's on plist file. In those files: <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> Attaching full xcstrings file InfoPlist.xcstrings
1
0
81
May ’25
SWIFTUI LAYERING ISSUE: BACKGROUND ALWAYS APPEARS IN FRONT OF CONTENT
SWIFTUI LAYERING ISSUE: BACKGROUND ALWAYS APPEARS IN FRONT OF CONTENT THE PROBLEM I'm facing a frustrating issue in my SwiftUI macOS app where a background RoundedRectangle is consistently displaying in front of my content instead of behind it. This isn't an intermittent issue - it never works correctly. The colored background is always rendering on top of the text and icons, making the content completely unreadable. Here's my current implementation: private func sceneRow(for scene: Scene, index: Int) -> some View { ZStack(alignment: .leading) { // Hidden text to force view updates when state changes Text("$$noteStateTracker)") .frame(width: 0, height: 0) .opacity(0) // 1. Background rectangle explicitly at the bottom layer RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) // 2. Content explicitly on top HStack { Image(systemName: "line.3.horizontal") .foregroundColor(.blue) .frame(width: 20) Text("$$index). $$truncateTitle(scene.title.isEmpty ? "Untitled Scene" : scene.title))") .foregroundColor(selectedScene?.id == scene.id ? .blue : .primary) .fontWeight(selectedScene?.id == scene.id ? .bold : .regular) Spacer() if scene.isComplete { Image(systemName: "checkmark.circle.fill") .foregroundColor(.green) .font(.system(size: 12)) .padding(.trailing, 8) } } .padding(.vertical, 4) .padding(.leading, 30) } .contentShape(Rectangle()) .onTapGesture { selectedChapter = chapter selectedScene = scene } .onDrag { NSItemProvider(object: "$$scene.id.uuidString)|scene" as NSString) } .onDrop(of: ["public.text"], isTargeted: Binding( get: { hoveredSceneID == scene.id }, set: { isTargeted in hoveredSceneID = isTargeted ? scene.id : nil } )) { providers in handleSceneDrop(providers, scene, chapter) } .contextMenu { Button("Rename Scene") { sceneToRename = scene newSceneTitleForRename = scene.title newSceneDescriptionForRename = scene.description isRenamingScene = true } Button(role: .destructive) { confirmDeleteScene(scene, chapter) } label: { Label("Delete Scene", systemImage: "trash") } } } Despite explicitly ordering elements in the ZStack with the background first (which should place it at the bottom of the stack), the RoundedRectangle always renders on top of the text and icons. WHAT I'VE TRIED I've attempted multiple approaches but nothing works: ZStack with explicit zIndex values ZStack { RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) .zIndex(1) HStack { /* content */ } .padding(.vertical, 4) .padding(.leading, 30) .zIndex(2) } No effect - background still appears on top. Using .background() modifier instead of ZStack HStack { /* content */ } .padding(.vertical, 4) .padding(.leading, 30) .background( RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) ) Same issue - the background still renders in front of the content. Custom container view with GeometryReader struct SceneRowContainer: View { var background: Background var content: Content init(@ViewBuilder background: @escaping () -> Background, @ViewBuilder content: @escaping () -> Content) { self.background = background() self.content = content() } var body: some View { GeometryReader { geometry in // Background rendered first background .frame(width: geometry.size.width, height: geometry.size.height) .position(x: geometry.size.width/2, y: geometry.size.height/2) // Content rendered second content .frame(width: geometry.size.width, height: geometry.size.height) .position(x: geometry.size.width/2, y: geometry.size.height/2) } } } This changed the sizing of the components but didn't fix the layering issue. NSViewRepresentable approach I tried implementing a custom NSViewRepresentable that manually manages the view hierarchy: struct LayerOrderView: NSViewRepresentable { let background: () -> Background let content: () -> Content func makeNSView(context: Context) -> NSView { let containerView = NSView() // Add background hosting view first (should be behind) let backgroundView = NSHostingView(rootView: background()) containerView.addSubview(backgroundView) // Add content hosting view second (should be in front) let contentView = NSHostingView(rootView: content()) containerView.addSubview(contentView) // Setup constraints... return containerView } func updateNSView(_ nsView: NSView, context: Context) { // Update views... } } Even this direct AppKit approach didn't work correctly. Using .drawingGroup() ZStack { // Background RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) // Content HStack { /* content */ } .padding(.vertical, 4) .padding(.leading, 30) } .drawingGroup(opaque: false) Still no success - the background remains in front. PROJECT CONTEXT macOS app using SwiftUI Scene contents need to be displayed on top of colored backgrounds The view uses state tracking with a noteStateTracker UUID that updates when certain changes occur App needs to maintain gesture recognition for taps, drag and drop, and context menus The issue is completely reproducible 100% of the time - the background is always in front WHAT I WANT TO ACHIEVE I need a reliable solution to ensure that the background color (RoundedRectangle) renders behind the HStack content. The current behavior makes the text content completely unreadable since it's hidden behind the colored background. Has anyone found a workable solution for this seemingly basic layering problem in SwiftUI on macOS? Thank you for any help, Benjamin
3
0
133
Apr ’25
launchd_sim and AppleSpell deadlock
I've got a 2019 Intel iMac running Sequoia 15.4.1 and Xcode 16.3. Every time I try to view a storyboard Xcode locks up and beachballs on me. It takes minutes to load the file. When I force-quit Xcode, the report that shows up has this as the reason: Processes reached dispatch thread soft limit (64): launchd_sim [96305] [unique pid 194673], launchd_sim [96260] [unique pid 194628] Deadlock: AppleSpell [1494] thread 0x1df0c4 DispatchQueue 313 -> AppleSpell [1494] thread 0x1df0c4 DispatchQueue 313 Deadlock: AppleSpell [1494] thread 0x1df114 DispatchQueue 86 -> AppleSpell [1494] thread 0x1df114 DispatchQueue 86 Blocked by Deadlock: 1 task - AppleSpell [1494] I'm wondering, why is AppleSpell trying to spell-check a plist file? Is there any way to tell AppleSpell to ignore a file?
Replies
0
Boosts
0
Views
78
Activity
Apr ’25
Have problem with automatic signing
hông thể cài đặt “TrungDemo” Domain: IXUserPresentableErrorDomain Code: 14 Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.kpOILI/extracted/TrungDemo.app : 0xe8008018 (The identity used to sign the executable is no longer valid.) Please ensure that the certificates used to sign your app have not expired. If this issue persists, please attach an IPA of your app when sending a report to Apple. User Info: { DVTErrorCreationDateKey = "2025-04-29 10:51:27 +0000"; IDERunOperationFailingWorker = IDEInstallCoreDeviceWorker; } Failed to install the app on the device. Domain: com.apple.dt.CoreDeviceError Code: 3002 User Info: { NSURL = "file:///Users/studiozego/Library/Developer/Xcode/DerivedData/TrungDemo-blspaulbkwypvhgaxxfjqbppuugg/Build/Products/Debug-iphoneos/TrungDemo.app"; } Không thể cài đặt “TrungDemo” Domain: IXUserPresentableErrorDomain Code: 14 Failure Reason: Không thể cài đặt ứng dụng này vì không thể xác minh tính toàn vẹn của ứng dụng. Recovery Suggestion: Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.kpOILI/extracted/TrungDemo.app : 0xe8008018 (The identity used to sign the executable is no longer valid.) Failed to verify code signature of /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.kpOILI/extracted/TrungDemo.app : 0xe8008018 (The identity used to sign the executable is no longer valid.) Domain: MIInstallerErrorDomain Code: 13 User Info: { FunctionName = "+[MICodeSigningVerifier _validateSignatureAndCopyInfoForURL:withOptions:error:]"; LegacyErrorString = ApplicationVerificationFailed; LibMISErrorNumber = "-402620392"; SourceFileLine = 80; } Event Metadata: com.apple.dt.IDERunOperationWorkerFinished : { "device_identifier" = "00008132-0001786E22B9001C"; "device_isCoreDevice" = 1; "device_model" = "iPad16,4"; "device_osBuild" = "18.4 (22E240)"; "device_platform" = "com.apple.platform.iphoneos"; "device_thinningType" = "iPad16,4-A"; "dvt_coredevice_version" = "443.19"; "dvt_coresimulator_version" = "1010.10"; "dvt_mobiledevice_version" = "1784.102.1"; "launchSession_schemeCommand" = Run; "launchSession_state" = 1; "launchSession_targetArch" = arm64; "operation_duration_ms" = 1320; "operation_errorCode" = 14; "operation_errorDomain" = IXUserPresentableErrorDomain; "operation_errorWorker" = IDEInstallCoreDeviceWorker; "operation_name" = IDERunOperationWorkerGroup; "param_debugger_attachToExtensions" = 0; "param_debugger_attachToXPC" = 1; "param_debugger_type" = 3; "param_destination_isProxy" = 0; "param_destination_platform" = "com.apple.platform.iphoneos"; "param_diag_113575882_enable" = 0; "param_diag_MainThreadChecker_stopOnIssue" = 0; "param_diag_MallocStackLogging_enableDuringAttach" = 0; "param_diag_MallocStackLogging_enableForXPC" = 1; "param_diag_allowLocationSimulation" = 1; "param_diag_checker_tpc_enable" = 1; "param_diag_gpu_frameCapture_enable" = 0; "param_diag_gpu_shaderValidation_enable" = 0; "param_diag_gpu_validation_enable" = 0; "param_diag_guardMalloc_enable" = 0; "param_diag_memoryGraphOnResourceException" = 0; "param_diag_mtc_enable" = 1; "param_diag_queueDebugging_enable" = 1; "param_diag_runtimeProfile_generate" = 0; "param_diag_sanitizer_asan_enable" = 0; "param_diag_sanitizer_tsan_enable" = 0; "param_diag_sanitizer_tsan_stopOnIssue" = 0; "param_diag_sanitizer_ubsan_enable" = 0; "param_diag_sanitizer_ubsan_stopOnIssue" = 0; "param_diag_showNonLocalizedStrings" = 0; "param_diag_viewDebugging_enabled" = 1; "param_diag_viewDebugging_insertDylibOnLaunch" = 1; "param_install_style" = 2; "param_launcher_UID" = 2; "param_launcher_allowDeviceSensorReplayData" = 0; "param_launcher_kind" = 0; "param_launcher_style" = 99; "param_launcher_substyle" = 0; "param_runnable_appExtensionHostRunMode" = 0; "param_runnable_productType" = "com.apple.product-type.application"; "param_structuredConsoleMode" = 1; "param_testing_launchedForTesting" = 0; "param_testing_suppressSimulatorApp" = 0; "param_testing_usingCLI" = 0; "sdk_canonicalName" = "iphoneos18.4"; "sdk_osVersion" = "18.4"; "sdk_variant" = iphoneos; } System Information macOS Version 15.4.1 (Build 24E263) Xcode 16.3 (23785) (Build 16E140) Timestamp: 2025-04-29T17:51:27+07:00
Replies
0
Boosts
0
Views
173
Activity
Apr ’25
Xcode Energy Impact Zero
When testing Energy Impact on Xcode, it shows zero, and other data is normal
Replies
0
Boosts
0
Views
51
Activity
Apr ’25
Custom font not support in Xcode 16.3
I'm experiencing an issue with a custom font not loading properly in Xcode 16.3. The font files are included in the bundle, listed in Info.plist, and verified for correct names using UIFont.familyNames, but they still don't appear at runtime. Has anyone else run into this with Xcode 16.3? Could this be related to recent changes in asset packaging or font catalogs?
Replies
0
Boosts
0
Views
101
Activity
Apr ’25
APNS NULL
this is our code foe fetching the apnstoken - and registering for the FCM and snding it to our servers. - we are consistently getting apns == null import 'dart:io'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:solaris/services/fetch_deviceId.dart'; Future initializeFCM() async { final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance; // Request notification permissions for iOS final settings = await _firebaseMessaging.requestPermission(); print('Notifcation Permission Status: ${settings.authorizationStatus}'); String? apnsToken; int retries = 0; const int maxRetries = 60; const Duration retryDelay = Duration(seconds: 2); // Retry fetching the APNs token until it's available or max retries are reached while (apnsToken == null && retries < maxRetries) { print(retries); apnsToken = await _firebaseMessaging.getAPNSToken(); if (apnsToken == null) { await Future.delayed(retryDelay); retries++; } } if (apnsToken != null) { // APNs token is available, proceed to get FCM token String? fcmToken = await _firebaseMessaging.getToken(); if (fcmToken != null) { // Register the device and token with your backend await registerDeviceAndToken(fcmToken); } else { // Handle the case where FCM token is still null print('FCM token is null.'); } } else { // Handle the case where APNs token is not available after retries print('APNs token not available after retries.'); } } Future registerDeviceAndToken(String fcmToken) async { //fcmToken = fcmToken; print(fcmToken); final user = FirebaseAuth.instance.currentUser; if (user == null) { print('❌ User not logged in'); return; } final deviceId = await DeviceInfoService.getUniqueDeviceId(); //final fcmToken = await FirebaseMessaging.instance.getToken(); print('📱 Device ID from register_fcm: $deviceId'); print('📩 FCM Token from mew getapnd function: $fcmToken'); if (deviceId == null || fcmToken == null) { print('❌ Failed to get deviceId or fcmToken'); return; } final docRef = FirebaseFirestore.instance .collection('master_users') .doc(user.uid) .collection('deviceId') .doc(user.uid); // This document holds a map: { deviceId: fcmToken } print(docRef); try { // Get current data, fallback to empty map final snapshot = await docRef.get(); final data = snapshot.data() ?? <String, dynamic>{}; print(data); // Update or add current deviceId key data[deviceId] = fcmToken; // Save updated map back to Firestore await docRef.set(data); print(data); print('✅ Device ID and FCM token updated/stored under correct structure'); } catch (e) { print('❌ Firestore write error: $e'); } }
Replies
0
Boosts
0
Views
109
Activity
Apr ’25
In-app purchases fetching issue
I am trying to add in-app purchases to my app. I created a StoreKit Configuration file and checked the option 'Sync this file with an app in App Store Connect' because I have already completed the subscription setup in my Apple Developer account. I also tried implementing the in-app purchases directly without using the StoreKit Configuration file, but I’m getting an 'Invalid Product Identifiers' error. I’ve double-checked, and the product ID matches the one listed in my Apple account. Please guide me on what I should do.
Replies
0
Boosts
0
Views
126
Activity
May ’25
XCODE Account not found
I have one of our developer when he attempts to login to xcode on his macos device, he get a message that account is not found but he has an account and he logs in to app developer portal with no issue. Thanks
Replies
0
Boosts
0
Views
51
Activity
Apr ’25
I have a target that dynamically generates the modulemap when new headers are added. Is there a way to specify for the target that uses that modulemap to wait for this modulemap file?
I have two targets: Library and Generate-Library-Modulemap I use a modulemap to help bridge the Objective-C++ code to Swift. Generate-Library-Modulemap is set up to run only when new headers are added (this is done reliably through some trickery). This seems to work, but the problem is that if I add Generate-Library-Modulemap as a dependency of Library, it seems that by the time Library Generate-Library-Modulemap is run, the Library target has already loaded up an outdated modulemap file. The result is my first attempt to build after adding headers is that the framework fails, as even though the modulemap was generated, it was not attached to the framework. The second attempt succeeds as it reads the updated modulemap. Is there any way to force Xcode to run the Generate-Library-Modulemap step before starting on Library? Or perhaps attach the modulemap after the fact?
Replies
0
Boosts
0
Views
81
Activity
Jun ’25
iOS 18.4で NFC や FeliCa の読み取りがしずらい状況のようです。こちらは認知されていますでしょうか?どのバージョンで直る想定でしょうか?
■概要: 弊社で開発しているアプリ内には、モバイルSuicaを読み取る機能があるのですが、iOS18.4でSuicaの読み取りができない事象に遭遇しています。(ごくまれに読み取れるときがある) ■利用API CoreNFC ■聞きたいこと: こちらいつごろ修正されるか教えてください。 ■参考情報 他社様ですが類似だと思われる事象が発生しております。
Replies
0
Boosts
0
Views
137
Activity
Apr ’25
why my Xcode organizer can not show Hangs
why my Xcode organizer can not show Hangs
Replies
1
Boosts
0
Views
228
Activity
May ’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
Refactor->Rename "Refactoring Engine Failure"
For Xcode 15 and Xcode 16, whenever I try to use the Refactor->Rename command I get a spinning busy cursor for a short while then I get an alert that says: Rename Failed Refactoring engine failure. This happens on several projects and I've tried removing the derived data folder, but am at a loss to find additional troubleshooting steps. Are there other files I might remove or reset to get my "Refactoring Engine" back into shape?
Replies
0
Boosts
0
Views
169
Activity
Jun ’25
Cannot edit Age rating - first launch
Hi, I am in the last step "preparing for submission" and everything excepts "age rating" is fine. How can I fix this? I have two apps and on neither i can edit "age rating" :(
Replies
5
Boosts
0
Views
660
Activity
Sep ’25
Does Xcode still support capturing GPU workload for OpenGLES game app on iOS?
As far as I know, there was a time that you can capture GPU workload for opengles game app on iOS using Xcode. However, currently I'm using Xcode version 15.2 and iOS18,it seems the "capture GPU workload" button is always disabled when I'm trying to debug my game app which is using opengles api for graphics rendering no matter switchinng "GPU Frame Capture" to "OpenGL ES" or "Metal" or "Automatically" in the scheme. And I'm not able to capture GPU workload for my game on iOS. The only way to make the "capture GPU workload" button enabled is creating a new project using metal api for graphics rendering. But I don't want to change the graphics API, because it will cause a lot. Does Xcode still support capturing GPU workload for OpenGLES game app on iOS? If not, is there an alternative way?
Replies
0
Boosts
0
Views
102
Activity
Jun ’25
Need Help Updating a Custom WireGuard SPM for Xcode 16 & Swift 6
Hey iOS Dev's, I’m currently working on a Swift Package Manager (SPM) for WireGuard, originally developed by a previous team member. It was working fine in Xcode 15.2, but after upgrading to Xcode 16 and Swift 6, I need to update the SPM to ensure compatibility with my base projects and other projects relying on it. With Apple making Xcode 16 mandatory for app submissions starting April 24, this has become an urgent issue. I’ve searched extensively but haven’t found a working solution yet. Has anyone faced similar challenges with Swift 6 migration and SPM updates? Any insights, best practices, or debugging tips would be greatly appreciated! Let’s connect and collaborate—I’d love to discuss possible solutions! 😊 #iOSDevelopment #Swift6 #Xcode16 #SPM #WireGuard #iOS #Swift #SoftwareEngineering #AppStore
Replies
0
Boosts
0
Views
113
Activity
Apr ’25
Xcode Connection Issues (Xcode 的连接问题)
When I use Xcode to develop the apps, the connection to my own Apple Watch is failed. The simulator has been downloaded, but it still displayed"watchOS10.0 Not Installed". The developer options were opened, I click the"trust this computer" but it always display"Connecting to *** Apple Watch". My iPhone can be connected normally.
Replies
0
Boosts
0
Views
89
Activity
Apr ’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
651
Activity
Jan ’26
xcstrings CFBundleName value changes after building different target
Hi, I followed Xcode’s recommendation and migrated to the new strings format (*.strings → *.xcstrings) using the Migrate to String Catalog option. My project has two build targets: MyAppName MyAppNameVFSCopy Every time I build one or the other target, the value in the .xcstrings file changes under CFBundleName > en > stringUnit > value, switching between MyAppName and MyAppNameVFSCopy. As a result, Git detects a change in source control each time, which is quite annoying. How can I prevent this from happening? After building MyAppNameVFSCopy target, the "value" is MyAppNameVFSCopy "CFBundleName" : { "comment" : "Bundle name", "extractionState" : "extracted_with_value", "localizations" : { "en" : { "stringUnit" : { "state" : "new", "value" : "MyAppNameVFScopy" } } } } After building MyAppName target, the "value" changes to MyAppName "CFBundleName" : { "comment" : "Bundle name", "extractionState" : "extracted_with_value", "localizations" : { "en" : { "stringUnit" : { "state" : "new", "value" : "MyAppName" } } } } Deleting CFBundleName from *.xcstrings file didn't help. CFBundleName is automatically created again after building target. Both targets has it's on plist file. In those files: <key>CFBundleName</key> <string>${PRODUCT_NAME}</string> Attaching full xcstrings file InfoPlist.xcstrings
Replies
1
Boosts
0
Views
81
Activity
May ’25
FaceTime cuts out audio on my mac M1 app
I have an iOS app that I also run on my Macbook Air M1. My app plays music and I use FaceTime for voice communication with users of my app. How do I stop FaceTime from cutting out the music on my app?
Replies
0
Boosts
0
Views
54
Activity
Apr ’25
SWIFTUI LAYERING ISSUE: BACKGROUND ALWAYS APPEARS IN FRONT OF CONTENT
SWIFTUI LAYERING ISSUE: BACKGROUND ALWAYS APPEARS IN FRONT OF CONTENT THE PROBLEM I'm facing a frustrating issue in my SwiftUI macOS app where a background RoundedRectangle is consistently displaying in front of my content instead of behind it. This isn't an intermittent issue - it never works correctly. The colored background is always rendering on top of the text and icons, making the content completely unreadable. Here's my current implementation: private func sceneRow(for scene: Scene, index: Int) -> some View { ZStack(alignment: .leading) { // Hidden text to force view updates when state changes Text("$$noteStateTracker)") .frame(width: 0, height: 0) .opacity(0) // 1. Background rectangle explicitly at the bottom layer RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) // 2. Content explicitly on top HStack { Image(systemName: "line.3.horizontal") .foregroundColor(.blue) .frame(width: 20) Text("$$index). $$truncateTitle(scene.title.isEmpty ? "Untitled Scene" : scene.title))") .foregroundColor(selectedScene?.id == scene.id ? .blue : .primary) .fontWeight(selectedScene?.id == scene.id ? .bold : .regular) Spacer() if scene.isComplete { Image(systemName: "checkmark.circle.fill") .foregroundColor(.green) .font(.system(size: 12)) .padding(.trailing, 8) } } .padding(.vertical, 4) .padding(.leading, 30) } .contentShape(Rectangle()) .onTapGesture { selectedChapter = chapter selectedScene = scene } .onDrag { NSItemProvider(object: "$$scene.id.uuidString)|scene" as NSString) } .onDrop(of: ["public.text"], isTargeted: Binding( get: { hoveredSceneID == scene.id }, set: { isTargeted in hoveredSceneID = isTargeted ? scene.id : nil } )) { providers in handleSceneDrop(providers, scene, chapter) } .contextMenu { Button("Rename Scene") { sceneToRename = scene newSceneTitleForRename = scene.title newSceneDescriptionForRename = scene.description isRenamingScene = true } Button(role: .destructive) { confirmDeleteScene(scene, chapter) } label: { Label("Delete Scene", systemImage: "trash") } } } Despite explicitly ordering elements in the ZStack with the background first (which should place it at the bottom of the stack), the RoundedRectangle always renders on top of the text and icons. WHAT I'VE TRIED I've attempted multiple approaches but nothing works: ZStack with explicit zIndex values ZStack { RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) .zIndex(1) HStack { /* content */ } .padding(.vertical, 4) .padding(.leading, 30) .zIndex(2) } No effect - background still appears on top. Using .background() modifier instead of ZStack HStack { /* content */ } .padding(.vertical, 4) .padding(.leading, 30) .background( RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) ) Same issue - the background still renders in front of the content. Custom container view with GeometryReader struct SceneRowContainer: View { var background: Background var content: Content init(@ViewBuilder background: @escaping () -> Background, @ViewBuilder content: @escaping () -> Content) { self.background = background() self.content = content() } var body: some View { GeometryReader { geometry in // Background rendered first background .frame(width: geometry.size.width, height: geometry.size.height) .position(x: geometry.size.width/2, y: geometry.size.height/2) // Content rendered second content .frame(width: geometry.size.width, height: geometry.size.height) .position(x: geometry.size.width/2, y: geometry.size.height/2) } } } This changed the sizing of the components but didn't fix the layering issue. NSViewRepresentable approach I tried implementing a custom NSViewRepresentable that manually manages the view hierarchy: struct LayerOrderView: NSViewRepresentable { let background: () -> Background let content: () -> Content func makeNSView(context: Context) -> NSView { let containerView = NSView() // Add background hosting view first (should be behind) let backgroundView = NSHostingView(rootView: background()) containerView.addSubview(backgroundView) // Add content hosting view second (should be in front) let contentView = NSHostingView(rootView: content()) containerView.addSubview(contentView) // Setup constraints... return containerView } func updateNSView(_ nsView: NSView, context: Context) { // Update views... } } Even this direct AppKit approach didn't work correctly. Using .drawingGroup() ZStack { // Background RoundedRectangle(cornerRadius: 6) .fill(sceneBackgroundColor(for: scene)) .padding(.horizontal, 4) // Content HStack { /* content */ } .padding(.vertical, 4) .padding(.leading, 30) } .drawingGroup(opaque: false) Still no success - the background remains in front. PROJECT CONTEXT macOS app using SwiftUI Scene contents need to be displayed on top of colored backgrounds The view uses state tracking with a noteStateTracker UUID that updates when certain changes occur App needs to maintain gesture recognition for taps, drag and drop, and context menus The issue is completely reproducible 100% of the time - the background is always in front WHAT I WANT TO ACHIEVE I need a reliable solution to ensure that the background color (RoundedRectangle) renders behind the HStack content. The current behavior makes the text content completely unreadable since it's hidden behind the colored background. Has anyone found a workable solution for this seemingly basic layering problem in SwiftUI on macOS? Thank you for any help, Benjamin
Replies
3
Boosts
0
Views
133
Activity
Apr ’25