Hello,
I have a Cocoa application from which I fork a new process (helper sort of) and it crashes on fork due to some cleanup code probably registered with pthreads_atfork() in Network framework.
This is crash from the child process:
Application Specific Information:
*** multi-threaded process forked ***
BUG IN CLIENT OF LIBPLATFORM: os_unfair_lock is corrupt
Abort Cause 258
crashed on child side of fork pre-exec
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_platform.dylib 0x194551238 _os_unfair_lock_corruption_abort + 88
1 libsystem_platform.dylib 0x19454c788 _os_unfair_lock_lock_slow + 332
2 Network 0x19b1b4af0 nw_path_shared_necp_fd + 124
3 Network 0x19b1b4698 -[NWConcrete_nw_path_evaluator dealloc] + 72
4 Network 0x19af9d970 __nw_dictionary_dispose_block_invoke + 32
5 libxpc.dylib 0x194260210 _xpc_dictionary_apply_apply + 68
6 libxpc.dylib 0x19425c9a0 _xpc_dictionary_apply_node_f + 156
7 libxpc.dylib 0x1942600e8 xpc_dictionary_apply + 136
8 Network 0x19acd5210 -[OS_nw_dictionary dealloc] + 112
9 Network 0x19b1beb08 nw_path_release_globals + 120
10 Network 0x19b3d4fa0 nw_settings_child_has_forked() + 312
11 libsystem_pthread.dylib 0x100c8f7c8 _pthread_atfork_child_handlers + 76
12 libsystem_c.dylib 0x1943d9944 fork + 112
(...)
I'm trying to create a child process with boost::process::child which does basically just a fork() followed by execv() and I do it before the - [NSApplication run] is called.
Is it know bug or behavior which I've run into? Also what is a correct way to spawn child processes in Cocoa applications? As far as my understanding goes the basically all the available APIs (e.g. posix, NSTask) should be more or less the same thing calling the same syscalls. So forking the process early before main run loop starts and not starting another NSApplication in forked child should be ok ...or not?
Xcode
RSS for tagBuild, test, and submit your app using Xcode, Apple's integrated development environment.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
SwiftUI preview hangs on "Preparing iPhone Simulator for Previews". Also simulator hangs when trying to build and run. This occurred after I installed iOS 17 simulator. I tried reverting back to an iOS 16 version of the simulator, but haven't figured out how to do that. Build and run to an iPhone device works fine. Any ideas would be appreciated. Thanks.
The new console in Xcode 15 is so terrible bad. Is it possible to get back the old console ?
I reinstalled the macOs from macOS recovery, Then installed the new Xcode 15, Everything worked fine but when I tried to commit my code the commit button does not showing.
The image from my Xcode app:
Attempting to launch a widget in Debug mode on Sonoma from Xcode 15 is failing with the following message:
attach failed (Not allowed to attach to process. Look in the console messages (Console.app), near the debugserver entries, when the attach failed. The subsystem that denied the attach permission will likely have logged an informative message about why it was denied.)
Looking in console I see this message:
macOSTaskPolicy: (com.apple.debugserver) may not get the task control port of (MacGalleryWidget) (pid: 1851): (MacGalleryWidget) is hardened, (MacGalleryWidget) doesn't have get-task-allow, (com.apple.debugserver) is a declared debugger(com.apple.debugserver) is not a declared read-only debugger
What Xcode settings should I be looking at to rectify this? I suspect I may have something that's out of whack.
I'm trying to copy some files from the Finder on macOS 14 to several Simulator instances running iOS 16 and 17. When I right-click the file in the Finder, I can select Share > Simulator, then a share dialog pops up where I select the relevant Simulator and click on Send. According to this official help topic, the Files app should open allowing me to choose the destination, but instead nothing happens and the shared file is nothing to be seen. What's the issue?
I regularly talk to developers debugging hard-to-reproduce problems. I have some general advice on that topic. I’ve posted this to DevForums before, and also sent similar info to folks who’ve opened a DTS incident, but I figured I should write it down properly.
If you have questions or comments, put them in a new thread here on DevForums. Put it in the Developer Tools & Services > General topic area and tag it with Debugging.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
Using a Sysdiagnose Log to Debug a Hard-to-Reproduce Problem
Some problems are hard to reproduce in your office. These usually fall into one of two categories:
Environment specific — This is where some of your users can easily reproduce the problem, but you can’t reproduce it in your environment.
Intermittent — In this case the problem could affect any user, but it’s hard to predict when a given user will see the problem.
A key tool in debugging such problems is the sysdiagnose log. This post explains how to make this technology work for you.
IMPORTANT A sysdiagnose log might contain private information. If you ask a user to send you a log, make sure they understand the privacy impact of that. If you want to see how Apple handles this, run the sysdiagnose command on a fresh Mac and read through it’s initial prompt.
Sysdiagnose Logs
All Apple platforms can generate sysdiagnose logs. For instructions on how to do this, see our Bug Reporting > Profiles and Logs page.
The resulting log is a .tar.gz file. Unpacking that reveals a bunch of files. The most critical of these is system_logs.logarchive, which is a snapshot of the system log. For more information about the system log, including links to the documentation, see Your Friend the System Log.
This log snapshot includes many thousands of log entries (I just took a log snapshot on my Mac and it had 22.8 million log entries!). That can be rather daunting. To avoid chasing your tail, it pays to do some preparation.
Preparation
The goal here is to create a set of instructions that you can give to your user to capture an actionable sysdiagnose log. That takes some preparation.
To help orient yourself in the log, add log points to your code to highlight the problem. For example, if you’re trying to track down a keychain problem where SecItemCopyMatching intermittently fails with errSecMissingEntitlement ( -34018 ), add a log point like this:
import os.log
let log = Logger(subsystem: "com.example.waffle-varnish", category: "keychain")
func … {
let err = SecItemCopyMatching(…)
log.log("SecItemCopyMatching failed, err: \(err)")
}
When you look through a log, find this specific failure by searching for SecItemCopyMatching failed, err: -34018.
You might also add log points at the start and end of an operation, which helps establish a time range of interest.
Log points like this have a very low overhead and it’s fine to leave them enabled in your released product. However, in some cases you might want to make more extensive changes, creating a debug build specifically to help investigate your problem. Think about how you’re going to get that debug build to the affected users. You might, for example, set up a special TestFlight group for folks who’ve encountered this issue.
Go to Bug Reporting > Profiles and Logs and look for debug profiles that might help your investigation. For example, if you’re investigating a Network Extension issue, the VPN (Network Extension) debug profile will enable useful debug logging.
Now craft your instructions for your user. Include things like:
Your take on the privacy impact on this
Instructions on how to get the necessary build of your product
If there’s a debug profile, instructions on how to install that
Instructions on how to trigger the sysdiagnose log
And on how to send it to you
IMPORTANT Make sure to stress how important it is that the user triggers the sysdiagnose immediately after seeing the problem.
Finally, test your steps. Do an initial test in your office, to make sure that the log captures the info you need. Then do an end-to-end test with someone who’s about as technically savvy as your users, to make sure that your instructions make sense to Real People™.
Prompting for a Sysdiagnose Log
In some cases it might not be obvious to the user when to trigger a sysdiagnose log. Imagine you’re hunting the above-mentioned errSecMissingEntitlement error and it only crops up when your product is performing some task in the background. The user doesn’t see that failure, they’re not even running your app!, so they don’t know that action is required.
A good option here is to add code to actively monitor for the failure and post a local notification requesting that the user trigger a sysdiagnose log. Continuing the above example, you might write code like this:
func … {
let err = SecItemCopyMatching(…)
log.log("SecItemCopyMatching failed, err: \(err)")
if err == errSecMissingEntitlement {
… post a local notification …
}
}
Obviously this is quite intrusive so, depending on the market for your product, you might not want to deploy this to all users. Perhaps you can restrict it to your internal testers, or your external beta testers, or a particularly savvy set of customers.
You can use the applefeedback URL scheme to make it easy for users to run Feedback Assistant. For more info about that, see Developer > Bug Reporting.
Looking at the System Log
Once you have your sysdiagnose log, unpack it and open the system log snapshot (system_logs.logarchive) in Console. The hardest part is knowing where to start. That’s why adding your own log entries, as discussed in Preparation, is so important. A good general process is:
Search for log entries from your subsystem. An easy way to initiate that search is to paste the text subsystem:SSS, where SSS is your subsystem, into the Search field. Continuing the above example, find that log entry by pasting in subsystem:com.example.waffle-varnish.
Identify the log entry that indicates the problem and select it.
Then remove your search and work backwards through the log looking for system log entries related to your issue.
The relevant log entries might not be within the time range shown by Console. Customise that by selecting values from the Showing popup in the pane divider. Once you have a rough idea of the timeframe involved, select Custom from that popup to focus on that range.
If the log is showing stuff that’s not relevant to your problem, Console has some great facilities for filtering those out. For the details, choose Help > Console Help.
Talk to Apple
A key benefit of this approach is that, if your investigation suggests that this is a system bug, you can file a bug report and attach this sysdiagnose log to it. The setup described above is exactly the sort of info needed to analyse the bug.
Likewise, if you start a thread here on DevForums about your issue, your friendly neighbourhood DTS engineer will find that sysdiagnose log very handy.
Revision History
2024-11-14 Added a reference to the applefeedback URL scheme. Made other minor editorial changes.
2023-10-13 First posted.
I just finished my first mobile app using .Net Maui. I have created all of the required certificatee, identifier, and profile in my Apple developer account and downloaded them to my MacAir. On my Windows machine I connect to my MacAir in VS2022 and build my release. Then I go to publish and I get this error:
Cannot create an IOS archive 'AgentManagerMobile'. Process cannot be executed on XMA server.
MessagingRemoteException: An error occurred on client Build1647067 while executing a reply for topic xvs/build/16.4.7067/execute-task/{AppName}/399e8ad002fWriteAppManifest
ArgumentNullException: Value cannot be null.
Parameter name: path2
What is parameter path2? Can anyone help with solving this?
Thanks, Phill
Problem: iOS 16.4 runtime targets are not available for selection, however the 16.4 simulator shows as installed under "Manage run destinations"
Config: Xcode 15.0, Sonoma 14.0, M1 Mac-Mini
Background: I write and maintain apps for my business unit. A co-worker dropped a phone on my desk and said 'The app doesn't work anymore, can you fix it'. Well, it turns out the phone is running iOS 16.6. The OS had been upgraded. This sent me down the path of upgrading Xcode on a development Mac, which also forced a MacOs upgrade on me. The end result is I now have XCode 15 on Sonoma, but have an iOS 16.6 device that I'm trying to target. Since I don't have any iOS 17 devices I didn't install the 17.0 runtime.
To install the "16.6 runtime" I went to: "Xcode - Settings - Platforms" and hit the + in the lower left and under "Previously released simulators" I selected iOS.
I selected iOS 16.4 as it was the closest I could see to 16.6 so I'm assuming it still works with 16.6. It took a few attempts to download correctly, but it now shows up in my platforms as "iOS 16.4 Simulator 6.18 GB on disk".
If I select "Product - Destination - Manage Run Destinations" I can see simulators for 10 different iOS devices (from iPad 10th gen to iPhone SE) all running iOS 16.4.
Great! I must be ready to develop and test for 16.6. Right?
Nope.
In the dropdown beside my App name the only option that is shown to me is "iOS 17" and the "Get" button beside it. I was expecting to my iOS 16.4 simulators as available target destinations, but there's nothing other than "iOS 17 - Get".
This is an old App that I'm maintaining so its deployment target is not new. Selecting a different iOS Deployment target doesn't have an effect.
I tried going into Manage Run Destinations and selected my iPhone 14 simulator on iOS 16.4 as "show run destination always". - no change
Older iOS version do not show as destinations.
Anyone else encounter this? Did you figure it out?
Help?
Thx
I'm working on dext project (c++), Base SDK and Supported Platforms are set to DriverKit.
#include causes errors:
error "The iostreams library is not supported since libc++ has been configured without support for localization."
error "<locale.h> is not supported since libc++ has been configured without support for localization."
Also it's not possible to define custom log object: undeclared identifier 'os_log_create'. <os/log.h> included and os_log function is compiled correct.
macOS as additional SDK did not help. Thanks a lot for any hint.
It would be nice for Apple to integrate chatgpt, Open AI, and create their own artificial intelligence. Siri is not equipped to answer questions that AI can. With increasing AI prevalence and usability, Apple is behind.
Message to Apple: PLEASE UTILIZE AI TO MAKE APPLE THE BEST PLATFORM.
I'm trying to write performance tests with Xcode 15, but it's not working: even though setting a baseline seems to work (baseline data files are created), Xcode seems to ignore that baseline altogether whenever the test is run. As a result, performance tests never fail, no matter how bad performance gets.
The source editor persistently displays a “No baseline average for Time” message.
Has anyone else encountered this? Figured out how to sidestep the issue?
Of note, the issue is easily reproduced: create a new (macOS in my case) app project with tests, add a dummy performance test; run the test once and save its baseline, and despite this subsequent tests will always succeed, even if you significantly slow the dummy test down.
(I've filed this as FB13330139)
From time to time while I'm editing code, Xcode 15.0.1 says "The file 'project.xcworkspace' has been modified by another application" asking me "Keep Xcode Version" or "Use Version on Disk". I didn't see this before 15.0.1 (or 14.1.1).
Who changed the file? What should my answer be? Thanks.
I try to use "Download container" on "Devices and Simulators".
But on iOS 17, xcappdata file size is 4KB and ''AppData" folder is empty.
On iOS 15, xcappdata file size is 2MB and success downloaded.
Xcode show these error when I unplug iOS 17 and plugin iOS 15.
The system failed to get a list of files on the remote device.
Domain: com.apple.dt.CoreDeviceError
Code: 7001
User Info: {
DVTErrorCreationDateKey = "2023-12-12 07:39:24 +0000";
NSFilePath = "";
}
--
Unknown response: {
XPCErrorDescription => Connection interrupted
}
Domain: com.apple.dt.remoteservices.error
Code: -1
--
System Information
macOS Version 14.2 (Build 23C64)
Xcode 15.1 (22502) (Build 15C65)
Timestamp: 2023-12-12T15:39:24+08:00
PS.
I had turn on [Airplane mode] on iOS 17.
In my Mac's Settings -> General -> Storage -> Developer -> (i) I have a series of entries for "bridgeOS", all 2.49 GB except one that is "zero".
Do I need these? Can I remove them?
I am only doing "normal" iPhone / iPad development.
(There was some previous mention of this here:
https://developer.apple.com/forums/thread/711279
with no feedback.)
I was invited to a new development team yesterday, and I can not choose that team under the Team drop down of Signing & Capabilities in Xcode. Also, when I first login to Apple Developer, this team is not in the main drop down (the teams dropdown). But if I go into "Apps", then I can see the team in the teams dropdown in the top right of the screen and switch to it. Anyone know what's going on?
Hello.
I'm seeing an inconsistent behavior where breakpoints I set in my (Swift) iOS app behave normally when I'm debugging on a device or on a simulator running iOS 17.x, but when I try using simulators of iOS 16 or 15 the breakpoints get ignored completely. I also observe that the breakpoints remain solid blue and do NOT adopt the dotted blue outline, as experienced by other users.
I've seen a few posts on here and on SO about the general issue of ignored breakpoints (with no conclusive answer AFAIK), but I haven't seen any where the behavior varies with the SDK being used. The behavior is repeatable and predictable (within the same app at least). I am not adding the breakpoints after building/running, and I'm sure the logic reaches the lines with the breakpoints (and again, whenever I switch to an iOS 17 simulator, execution does pause as expected with the exact same breakpoints).
Things I've tried and looked into:
Clean up project build folder
Delete and re-install simulators (iOS 16.4 and 15.5)
Deleted the entire derived data directory, as well as the CoreSimulator one.
Confirm the build configuration is Debug, and the "Debug executable" option is checked.
inspect various build flags mentioned in other posts:
{Swift compiler - Code generation - Optimization level - Debug: -0none; Debug information format: DWARF (I also tried DWARF with dSYM with no impact)}.
Most of my settings are on the plain vanilla/out of the box side, with only a couple of SPM dependencies, and I've been maintaining the same app for about 5 years and don't think I've come across this behavior before.
Currently using Xcode 15.1. Deployment target is 14.0.
Thank you.
xcode15.1 debug does not show the value on the real machine but only the address of the pointer, but on the emulator it shows the normal value.
But in the emulator it shows the normal value.
xcode15.2 debug doesn't show the value but only the address of the pointer in both the real machine and the emulator.
In Xcode14, the value is displayed normally in both the real machine and the emulator.
What do I need to do to get it back to the way it was in Xcode14?
Hello everyone!
When I run UI Tests on Xcode Cloud, I often encounter unexpected failures. Checking the screen recording, I found that the iOS Simulator could go into a black screen with a white Apple logo and a progress bar for a period after the test starts. This behavior of the Simulator causes my app's UI Tests to fail randomly, which greatly affects the practical use of UI Tests.
I suspect this phenomenon is unrelated to my app and test cases, so I'm asking if anyone else has encountered a similar issue. 🤔
I created a package using "File > New > Package" and now I want to add a new Asset Catalog to this package. With my package selected in the project navigator I select "File > New > File" but it creates a Swift file instead of showing the Template Selection dialog
Ref: https://developer.apple.com/documentation/xcode/managing-assets-with-asset-catalogs#Create-a-new-asset-catalog