Dive into the vast array of tools and services available to developers.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Why does a Swift test think my simple struct is main actor-isolated?
My experience with Swift 6 strict concurrency so far doesn't match my understanding of implicit MainActor isolation semantics. This is a cross-post from StackOverflow. I will link answers between both forums. TL;DR Build succeeds when testing a struct declared in the test module, but fails when the struct is moved to the main module: Main actor-isolated property … cannot be accessed from outside the actor. Steps to reproduce Open up Xcode 26 beta 2 on macOS 26 (probably also ok on current stables). Create a new Swift app with Swift testing, no storage. Call it WhatTheSwift. Set the Swift Language Version on all three targets to Swift 6. Update the default test file to be this: import Testing @testable import WhatTheSwift struct WhatTheSwiftTests { @Test func example() async throws { let thing = Thing(foo: "bar") #expect(thing.foo == "bar") } } struct Thing { let foo: String } That should build fine, and the tests should pass. Now, move the Thing declaration into its own Thing.swift file in the WhatTheSwift module, and try running the test again. You should see this: Observations Marking the test @MainActor allows the test to pass, suggesting the compiler actually wants to isolate Thing.foo to the main actor. My question Why? And why only when Thing is in a different module?
2
0
268
Jun ’25
Crash reports downloaded by Xcode contain impossible call hierarchy
I was just having a look at some crash reports downloaded by Xcode, and I noticed the same wrong pattern I already mentioned here: the crash reports indicate that method A calls method B, which is impossible. In the first crash report below, method MainViewController.showSettings seems to be called by ConfirmMoveViewController.openSourceInFinder, which is impossible. ConfirmMoveViewController.openSourceInFinder is a context menu action in a modal window, and MainViewController.showSettings is in a completely different window and the two methods have no relation whatsoever. In the second crash report below, MainViewController.setSortMode is triggered by the press of a button (and nothing else) but seems to be called by OtherViewController.copy that can be triggered by a context menu (or keyboard shortcut). The two methods have no relation whatsoever. The rest of the stack trace confirm that it's indeed the button that was pressed. This seems to me like a quite serious bug in how macOS creates crash reports. 1.crash 2.crash
6
0
372
Mar ’25
Can I get notified when my watchOS app is terminated by the system (e.g. watchdog)?
Hi all, I’m developing a watchOS app and have seen cases where the app is terminated by the system — for example, due to CPU usage limits being exceeded (watchdog termination). Here’s a portion of one of the crash reports: Exception Type: EXC_CRASH (SIGKILL) Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: CAROUSEL 2343432205 <RBSTerminateContext| domain:10 code:0x8BADF00D explanation:[app<app_name>:898] Failed to terminate gracefully after 5.0s ProcessVisibility: Foreground ProcessState: Running WatchdogEvent: process-exit WatchdogVisibility: Foreground WatchdogCPUStatistics: ( "Elapsed total CPU time (seconds): 11.280 (user 9.800, system 1.480), 100% CPU", "Elapsed application CPU time (seconds): 5.162, 46% CPU" ) reportType:CrashLog maxTerminationResistance:Interactive> My questions: 1.) Is there any way to get notified (via Crashlytics, Xcode Organizer, or any other reporting mechanism) when this type of system-level termination happens — similar to how we’re notified of crashes? 2.)Is there any way for a watchOS app to receive runtime warnings from the system when it’s about to exceed CPU or memory limits — similar to UIApplication.didReceiveMemoryWarningNotification on iOS? Thanks in advance!
1
0
76
Apr ’25
Capacitor iOS Plugin with MobileVLCKit – Swift Plugin Not Recognized from Angular
Hi everyone, I'm developing a Capacitor plugin to display an RTSP video stream using MobileVLCKit on iOS. The Android side works perfectly, but I can’t get the iOS plugin to work — it seems my Swift file is not being detected or recognized, even though I’ve followed the official steps. What works: I followed the Capacitor Plugin Development Guide. I implemented the Android version of the plugin in Java inside the android/ folder. Everything works perfectly from Angular: the plugin is recognized and calls execute correctly. The issue on iOS: I implemented the iOS part in Swift, using the official MobileVLCKit documentation. I initially placed my RtspVlcPlugin.swift file in the plugin’s iOS folder, as the docs suggest. Then I moved it directly into the main app’s ios/App/App/ folder next to AppDelegate.swift and tried manual registration. The problem: Even though I manually register the plugin with: if let bridge = self.window?.rootViewController as? CAPBridgeViewController { bridge.bridge?.registerPluginInstance(RtspVlcPlugin()) print("✅ Plugin RtspVlcPlugin registered manually.") } It prints the registration message just fine. BUT from Angular, the plugin is not recognized: Capacitor.Plugins.RtspVlcPlugin has no methods, and I get this error: "code":"UNIMPLEMENTED" I also tried declaring @objc(RtspVlcPlugin) and extending CAPPlugin. I’ve verified RtspVlcPlugin.swift is added to the target and compiled. The Swift file doesn’t seem to register or expose any methods to Angular. I even tried adding the code without using a plugin at all — just creating a Swift class and using it via the AppDelegate, but it still doesn't expose any callable methods. My Swift code (RtspVlcPlugin.swift): import Capacitor import MobileVLCKit @objc(RtspVlcPlugin) public class RtspVlcPlugin: CAPPlugin, VLCMediaPlayerDelegate { var mediaPlayer: VLCMediaPlayer? var containerView: UIView? var spinner: UIActivityIndicatorView? @objc func iniciar(_ call: CAPPluginCall) { guard let urlStr = call.getString("url"), let x = call.getDouble("x"), let y = call.getDouble("y"), let w = call.getDouble("width"), let h = call.getDouble("height"), let url = URL(string: urlStr) else { call.reject("Missing parameters") return } DispatchQueue.main.async { self.containerView?.removeFromSuperview() let cont = UIView(frame: CGRect(x: x, y: y, width: w, height: h)) cont.backgroundColor = .black cont.layer.cornerRadius = 16 cont.clipsToBounds = true let sp = UIActivityIndicatorView(style: .large) sp.center = CGPoint(x: w/2, y: h/2) sp.color = .white sp.startAnimating() cont.addSubview(sp) self.spinner = sp self.containerView = cont self.bridge?.viewController?.view.addSubview(cont) let player = VLCMediaPlayer() player.delegate = self player.drawable = cont player.media = VLCMedia(url: url) self.mediaPlayer = player player.play() call.resolve() } } @objc func cerrar(_ call: CAPPluginCall) { DispatchQueue.main.async { self.mediaPlayer?.stop() self.mediaPlayer = nil self.spinner?.stopAnimating() self.spinner?.removeFromSuperview() self.spinner = nil self.containerView?.removeFromSuperview() self.containerView = nil call.resolve() } } public func mediaPlayerStateChanged(_ aNotification: Notification!) { guard let player = mediaPlayer, player.state == .playing, let sp = spinner else { return } DispatchQueue.main.async { sp.stopAnimating() sp.removeFromSuperview() self.spinner = nil } } } In the Angular project, I’m using the plugin by manually registering it with registerPlugin from @capacitor/core. Specifically, in the service where I need it, I do the following: import { registerPlugin } from '@capacitor/core'; const RtspVlcPlugin: any = registerPlugin('RtspVlcPlugin'); After this, I try to call the methods defined in the iOS plugin, like RtspVlcPlugin.iniciar({ ... }), but I get an UNIMPLEMENTED error, which suggests that the plugin is not exposing its methods properly to the Angular/Capacitor environment. That makes me believe the problem lies in how the Swift file is integrated or registered, rather than how it is used from Angular. I’d appreciate any guidance on how to properly expose a Swift-based Capacitor plugin’s methods so that they are accessible from Angular. Is there any additional registration step or metadata I might be missing on the iOS side?
1
0
193
Jul ’25
Unexpected timezone issues
Hi, my server in Melbourne Australia is getting weather forecasts from a few places around Australia. When I look at the daily timesteps that I get back, they might be something like this: "days": [ { "forecastStart": "2025-06-25T00:00:00Z", "forecastEnd": "2025-06-26T00:00:00Z", "daytimeForecast": { "forecastStart": "2025-06-25T07:00:00Z", "forecastEnd": "2025-06-25T19:00:00Z", "overnightForecast": { "forecastStart": "2025-06-25T19:00:00Z", "forecastEnd": "2025-06-26T07:00:00Z",} It doesn't matter where I ask for - Melbourne, Darwin, Perth, it always comes back the same. The documentation says that daytimeForecast is 7 am to 7 pm local and overnightForecast is 7pm to 7 am local. However, in a place like Perth 7-19Z is 3 pm to 3 am, not 7 pm to 7 am like advertised. I can see that for any given date, there are 3 maximum temperature forecasts, a 24 hour max, a daytime max and an overnight max and they differ from each other. Can anyone help me understand what's happening here? And furthermore in the example above, the 24 hour forecasts that have, for example this: "forecastStart": "2025-06-25T00:00:00Z" ... Can the 00:00:00Z be trusted literally? Or is it more the case that it's "2025-06-25" but the HMS got tacked on in a conversion?
3
0
120
Jul ’25
NSUbiquitousContainers
I'm using Xcode 16.3 and I want to add the key "NSUbiquitousContainers" but I cannot do it in the Entitlements file, it should be in info.plist file! I have done it before but in previous versions of Xcode when the info.plist was in the project navigator. However, now I cannot find the file and I did not find any way to create it! Please guide me in detail how to proceed (I'm not new to Swift or SwiftUI but not familiar to project settings)?
1
0
99
Apr ’25
Installer package is terminated after 600 seconds
Hi, I have an installer package that runs a postinstall script. The script can take a long time to complete, as one thing it does is copy about 10-30 GB of files using the rsync tool. We noticed on macOS 15 that the installer would fail almost exactly 10 minutes after it started. Looking in the /var/log/install.log, I see a message like this: 2025-07-01 12:54:32-07 Work-M1 package_script_service[21562]: PackageKit: Terminating PKInstallTask(pid:21573). Task has exceeded its 600 seconds of runtime. This does not happen in my testing on macOS 12 (Monterey) I have a few questions about this: A) Is this documented, and which OS introduced this? B) Is there a way a developer can extend or disable the time limit via a setting in the installer package. Or if not, is there a way end end user can disable it temporarily on their system? Thanks, Andrew
4
0
163
Sep ’25
Building an app with both GUI and Command Line versions
I use CMake for my builds not the XCode GUI. I want to be able to build a single .app that contains both the GUI version and the command line version. I have seen products that ship both as part of the same .app (e.g. CMake) so this is clearly entirely possible, the 64k question is HOW? Right now I am building them as separate apps - lets call them DSS and DSSCL (*). The code base for each is in its own directory - each with its own CMakelists.txt file. My initial thoughts are to change the build for DSSCL so it doesn't create a bundle and then simply copy the DSSCL command and related .qm files into DSS.app/.../MacOS. However that's likely enough totally wrong, so how should I handle this please. As much detail as possible please, I am very new to macOS development -please don't assume knowledge of stuff that's second nature to you Many thanks David (*) Strictly they are DeepSkyStacker and DeepSkyStackerCL
7
0
233
Apr ’25
Lost X Code Project for a Live Application
Hello, I currently have a live application in the iOS App Store that needs an update to start functioning again, but I've lost the source code in a hard drive failure. Is there a way to reverse engineer the currently deployed package that is live (and also a way to download it from App Store Connect)⁉️ The development change itself is just a very small change for an API route in the code itself. I could even direct an engineer at Apple to make the change in 5 minutes! Let me know if this is possible. Thanks❗️
1
0
86
Apr ’25
Flutter: abnormal delay on iOS in position recovery on first opening
Good morning everyone, I am developing a Flutter app for Android and iOS. When I press a button, the app detects the location of the device (obviously with permissions already granted). On Android everything works correctly. On iOS, however, when I press the button for the first time after opening the app, the location is detected after about 30-50 seconds. On the other hand, if I repeat the operation later, the response time is drastically reduced (only a few seconds). I am using the location package (https://pub.dev/packages/location), and the code to get the location is as follows: var currentLocation = await location.getLocation(); Has anyone experienced this problem before or knows how to solve it? Thank you very much! Federico
1
0
260
Sep ’25
Is there a way for two users to make development builds on separate accounts for one app?
Tech stack: React Native + Expo. We are using two solo developer accounts (not a business or team account). Context: Friend and I set out to make an app together. Friend created app and set it up on Apple. We worked on it together. He controlled devops (builds and submission). Friend no longer can commit to development. Wants to transfer to me. I create apple developer account. After app transfer, my phone (deviceid) underwent a 14 day soft ban preventing builds. That has since been lifted. There seems to be something in place preventing me from making dev builds on the original dev bundleid. It says it's still owned by him despite the app transfer. Bottom line: what needs to happen so I can make dev builds? Nice to have: we can both make dev builds under the same bundleid
1
0
220
Dec ’25
Change the OSLog level that is written to Xcode console of a dependent library
I'd like to give control to the app developer that uses my library to select which level of logs they'd like to see from my lib (e.g. do they want to see all debug messages or just errors). I know there are filtering controls that Xcode gives us, but I'm wondering if there is a way to pull this off with code. Ideally the user callsite would look like MyLib(logLevel: .info). And then I would pass that info level somehow to OSLog. Today, I create my logger like this: let myLogger = Logger( subsystem: Bundle.main.bundleIdentifier ?? "UnknownApp", category: "MyLibrary" ) As far as I can tell, there is nothing I can then pass to my myLogger instance to configure the threshold level. I'm imagining an interface like: myLogger.logLevel(.warning) // Later... myLogger.debug("You won't see this") myLogger.error("But you will see this") Does OSLog and friends give us any ability to do this out of the box, or are we building little wrappers around OSLog to accomplish this? Thank you, Lou
4
0
475
Mar ’25
The signature of cannot be validated and may have been compromised
I'm currently developing a Unity game for iPad and have run into a critical issue that's completely blocking me from building the project. The project uses the Mapbox SDK for Unity. Everything was working fine during today test build on the iPad. I made minor changes - just four scripts, then attempted another build. However, Xcode began showing the following error: The signature of “MapboxCommon.xcframework” cannot be validated and may have been compromised. Validation Error: The signing certificate has been revoked (CSSMERR_TP_CERT_REVOKED) This error now occurs consistently. I've tried building on a different MacBook and with a different Apple account, but the result is the same. I haven't made any changes to the Mapbox framework, nor have I updated it recently. I'm trying to determine the root cause: Is this something I've done on my end? Or is it an issue with the Mapbox framework or their signing certificate? Is there a temporary workaround that would allow me to proceed with development builds while I investigate a proper fix? Any insights or suggestions would be greatly appreciated.
1
0
256
Jul ’25
Apollo GraphQL Error – MultipartResponseParsingInterceptor.ParsingError.cannotParseResponse in SwiftUI
I'm integrating Apollo GraphQL into a SwiftUI app and encountering the following error during a query execution: result : failure(Apollo.MultipartResponseParsingInterceptor.ParsingError.cannotParseResponse) failed : The response data could not be parsed. The request hits the server, but the response fails to be parsed by Apollo. I'm using the default code generation setup and executing a simple query to fetch a list of countries. Here’s a snippet of the function: swift Copy Edit private func fetchCountries() { switch result { case .success(let graphQLResult): if let name = graphQLResult.data?.countries { print(name) } else if let errors = graphQLResult.errors { print(errors) } case .failure(let error): print("failed : (error.localizedDescription)") } } This is run on an iPhone 16 Pro simulator with iOS 18.2. Any idea what's causing the parsing error or how I can inspect the raw response for debugging? Thanks in advance!
1
0
89
Mar ’25
Information about legacy (new app)
Hello I developed an app for my cousin (I wrote all the code myself), but she’ll be the one managing it once it’s published. She’ll take care of the content, updates, and anything admin-related. Right now, the app uses my Firebase account and my Apple Developer account (App Store Connect), which I set up at the start of the project. I’m wondering: • Am I at risk legally or financially if the accounts stay under my name, even though I won’t be involved in the app after release? • Is it possible to migrate the project to her email, meaning transfer Firebase and the Apple Developer account to her own account, so that everything is properly under her control? Thanks in advance for any insights or experiences
1
0
178
Jul ’25