Dive into the world of programming languages used for app development.

All subtopics
Posts under Programming Languages topic

Post

Replies

Boosts

Views

Activity

NotificationCenter Crash On iOS 18+ Swift6.2
After switching our iOS app project from Swift 5 to Swift 6 and publishing an update, we started seeing a large number of crashes in Firebase Crashlytics. The crashes are triggered by NotificationCenter methods (post, addObserver, removeObserver) and show the following error: BUG IN CLIENT OF LIBDISPATCH: Assertion failed: Block was expected to execute on queue [com.apple.main-thread (0x1f9dc1580)] All scopes to related calls are already explicitly marked with @MainActor. This issue never occurred with Swift 5, but appeared immediately after moving to Swift 6. Has anyone else encountered this problem? Is there a known solution or workaround? Thanks in advance!
2
1
1.4k
3w
Model instance invalidated, backing data could no longer be found in the store
I have been recently getting the following error seemingly randomly, when an event handler of a SwiftUI view accesses a relationship of a SwiftData model the view holds a reference to. I haven't yet found a reliable way of reproducing it: SwiftData/BackingData.swift:866: Fatal error: This model instance was invalidated because its backing data could no longer be found the store. PersistentIdentifier(id: SwiftData.PersistentIdentifier.ID(url: COREDATA_ID_URL), implementation: SwiftData.PersistentIdentifierImplementation) What could cause this error? Could you suggest me a workaround?
2
0
953
Dec ’24
indices(where:) Swift Playgrounds Issue: "Cannot call value of non-function type Range<Int>"
Hey there- I'm having a quite interesting bug on Swift Playgrounds. I am trying to run my app with this following code snippet which does not compile on Swift Playgrounds, yet compiles on XCode (note: this is a Swift Playground app) if #available(iOS 18.0, *) { //simple function to get the indices of other items that have the same date as the "date" variable let indices = data!.indices(where: { item in let sameMonth = Calendar.current.component(.month, from: item.time) == Calendar.current.component(.month, from: date) let sameYear = Calendar.current.component(.year, from: item.time) == Calendar.current.component(.year, from: date) let sameDay = Calendar.current.component(.day, from: item.time) == Calendar.current.component(.year, from: date) return sameDay && sameMonth && sameYear }) However, the indices(where:) codeblock seems to stop the app from compiling (ONLY on Swift Playgrounds - it works perfectly fine on XCode). I am getting the following error: Cannot call value of non-function type 'Range<Array<Int>.Index>' (aka 'Range<Int>') Please let me know if you have any insight regarding this issue. -ColoredOwl
2
1
567
Jan ’25
XCode not making bridging header file?
Hi, I'm trying to add Swift code to my Obj-C project. I've gone through all the tutorials and troubleshooting advice I can find online, no dice. I would appreciate any help, thank you so much in advance. I add a new swift file to my Obj-C project XCode offers to create a bridging header file for me, yes please New .swift file and .h file are added to my project no problem Header file shows up in build settings no problem I add a new class to my new swift file ("@objc class HelloPrinter: NSObject") When I build the app, nothing is generated in the bridging header file and the class is obviously inaccessible to my obj-c code Is this supposed to work? My understanding is that it's supposed to work. Somewhat concerning is the text that XCode puts in the bridging header file when it's created: "Use this file to import your target's public headers that you would like to expose to Swift." I don't want to use this bridging header file for anything. I want XCode to GENERATE STUFF in the bridging file. I also don't want to expose anything to Swift. I want the opposite to happen. So I don't get this text at all. Thanks in advance again.
2
0
93
Apr ’25
Use of `for await` with `AyncStream`, and yielding async closures to its continuation
Hello, I was hoping to clarify my understanding of the use of for await with an AsyncStream. My use case is, I'd like to yield async closures to the stream's continuation, with the idea that, when I use for await with the stream to process and execute the closures, it would only continue on to the following closure once the current closure has been run to completion. At a high level, I am trying to implement in-order execution of async closures in the context of re-entrancy. An example of asynchronous work I want to execute is a network call that should write to a database: func syncWithRemote() async -> Void { let data = await fetchDataFromNetwork() await writeToLocalDatabase(data) } For the sake of example, I'll call the intended manager of closure submission SingleOperationRunner. where, at a use site such as this, my desired outcome is that call 1 of syncWithRemote() is always completed before call 2 of it: let singleOperationRunner = SingleOperationRunner(priority: nil) singleOperationRunner.run { syncWithRemote() } singleOperationRunner.run { syncWithRemote() } My sketch implementation looks like this: public final class SingleOperationRunner { private let continuation: AsyncStream<() async -> Void>.Continuation public init(priority: TaskPriority?) { let (stream, continuation) = AsyncStream.makeStream(of: (() async -> Void).self) self.continuation = continuation Task.detached(priority: priority) { // Will this loop only continue when the `await operation()` completes? for await operation in stream { await operation() } } } public func run(operation: @escaping () async -> Void) { continuation.yield(operation) } deinit { continuation.finish() } } The resources I've found are https://developer.apple.com/videos/play/wwdc2022-110351/?time=1445 and https://forums.swift.org/t/swift-async-func-to-run-sequentially/60939/2 but do not think I have fully put the pieces together, so would appreciate any help!
2
0
311
Mar ’25
Odd Echo Output From Shell Script
I have a simple shell script as follows: #!/bin/bash OUTPUT="network.$(date +'%d-%m-%y').info.txt" SUPPORT_ID="email" echo "---------------------------------------------------" > $OUTPUT echo "Run date and time: $(date)" >> $OUTPUT echo "---------------------------------------------------" >> $OUTPUT ifconfig >> $OUTPUT echo "---------------------------------------------------" >> $OUTPUT echo "Network info written to file: $OUTPUT." echo "Please email this file to: $SUPPORT_ID." It just dumps the network config into a file. At some point I will have the file emailed out, but right now I'm just trying to figure out why the output looks like the following? bash ./test.sh .etwork info written to file: network.26-01-25.info.txt .lease email this file to: email Why in the world does the initial character of the last couple of "echo" commands get clipped and turned into periods? The echos for the output of the commands piped into the output file are fine. Strange... Any ideas?
2
0
577
Jan ’25
How to implement thread-safe property wrapper notifications across different contexts in Swift?
I’m trying to create a property wrapper that that can manage shared state across any context, which can get notified if changes happen from somewhere else. I'm using mutex, and getting and setting values works great. However, I can't find a way to create an observer pattern that the property wrappers can use. The problem is that I can’t trigger a notification from a different thread/context, and have that notification get called on the correct thread of the parent object that the property wrapper is used within. I would like the property wrapper to work from anywhere: a SwiftUI view, an actor, or from a class that is created in the background. The notification preferably would get called synchronously if triggered from the same thread or actor, or otherwise asynchronously. I don’t have to worry about race conditions from the notification because the state only needs to reach eventuall consistency. Here's the simplified pseudo code of what I'm trying to accomplish: // A single source of truth storage container. final class MemoryShared<Value>: Sendable { let state = Mutex<Value>(0) func withLock(_ action: (inout Value) -> Void) { state.withLock(action) notifyObservers() } func get() -> Value func notifyObservers() func addObserver() } // Some shared state used across the app static let globalCount = MemoryShared<Int>(0) // A property wrapper to access the shared state and receive changes @propertyWrapper struct SharedState<Value> { public var wrappedValue: T { get { state.get() } nonmutating set { // Can't set directly } } var publisher: Publisher {} init(state: MemoryShared) { // ... } } // I'd like to use it in multiple places: @Observable class MyObservable { @SharedState(globalCount) var count: Int } actor MyBackgroundActor { @SharedState(globalCount) var count: Int } @MainActor struct MyView: View { @SharedState(globalCount) var count: Int } What I’ve Tried All of the examples below are using the property wrapper within a @MainActor class. However the same issue happens no matter what context I use the wrapper in: The notification callback is never called on the context the property wrapper was created with. I’ve tried using @isolated(any) to capture the context of the wrapper and save it to be called within the state in with unchecked sendable, which doesn’t work: final class MemoryShared<Value: Sendable>: Sendable { // Stores the callback for later. public func subscribe(callback: @escaping @isolated(any) (Value) -> Void) -> Subscription } @propertyWrapper struct SharedState<Value> { init(state: MemoryShared<Value>) { MainActor.assertIsolated() // Works! state.subscribe { MainActor.assertIsolated() // Fails self.publisher.send() } } } I’ve tried capturing the isolation within a task with AsyncStream. This actually compiles with no sendable issues, but still fails: @propertyWrapper struct SharedState<Value> { init(isolation: isolated (any Actor)? = #isolation, state: MemoryShared<Value>) { let (taskStream, continuation) = AsyncStream<Value>.makeStream() // The shared state sends new values to the continuation. subscription = state.subscribe(continuation: continuation) MainActor.assertIsolated() // Works! let task = Task { _ = isolation for await value in taskStream { _ = isolation MainActor.assertIsolated() // Fails } } } } I’ve tried using multiple combine subjects and publishers: final class MemoryShared<Value: Sendable>: Sendable { let subject: PassthroughSubject<T, Never> // ... var publisher: Publisher {} // ... } @propertyWrapper final class SharedState<Value> { var localSubject: Subject init(state: MemoryShared<Value>) { MainActor.assertIsolated() // Works! handle = localSubject.sink { MainActor.assertIsolated() // Fails } stateHandle = state.publisher.subscribe(localSubject) } } I’ve also tried: Using NotificationCenter Making the property wrapper a class Using NSKeyValueObserving Using a box class that is stored within the wrapper. Using @_inheritActorContext. All of these don’t work, because the event is never called from the thread the property wrapper resides in. Is it possible at all to create an observation system that notifies the observer from the same context as where the observer was created? Any help would be greatly appreciated!
2
0
540
Mar ’25
"_swift_coroFrameAlloc", 报错
Undefined symbols for architecture arm64: "_swift_coroFrameAlloc", referenced from: NvMobileCore.Constraint.isActive.modify : Swift.Bool in NvMobileCore[5] NvMobileCore.Constraint.isActive.modify : Swift.Bool in NvMobileCore[5] NvMobileCore.NvMobileCoreManager.delegate.modify : NvMobileCore.NvPublicInterface? in NvMobileCore[53] NvMobileCore.NvMobileCoreManager.delegate.modify : NvMobileCore.NvPublicInterface? in NvMobileCore[53] NvMobileCore.NvMobileCoreManager.language.modify : Swift.String in NvMobileCore[53] NvMobileCore.NvMobileCoreManager.language.modify : Swift.String in NvMobileCore[53] ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
2
0
432
Oct ’25
Compiler - method linking issue.
Issue: During app execution, the intended method is not being called; instead, the method preceding (written above the intended method) is being executed. For Example: //In my case the ViewController class is at 3rd level of inheritance. class ViewController: UIViewController { func methodA() { print("methodA") } func methodB() { print("methodB") } } let vc = ViewController() vc.methodB() Output: //"methodA" Expected: //"methodB" Observations: Recent code changes have revealed that enabling the below Swift-6 flag leads to this linking issue. When this flag is commented out, the problem disappears. .enableUpcomingFeature("InternalImportsByDefault") Additionally, moving the intended method into an extension of the same class resolves the issue when the flag is enabled. Conclusion: To resolve the issue: Comment out the Swift-6 flag. Alternatively, move the method into an extension of the same class, which addresses the issue for this specific case. I had similar issue in other class where it crashes with message "method not found", but actually the method is there. When moving the method into an extension of same class resolve this issue. Any help is much appreciated. Thanking you..
2
0
101
May ’25
Swift / C++ Interop with Storekit - actor isolated structure cannot be exported to C++
I can't find a viable path to call StoreKit from C++ right now and would love some ideas. I'm implementing the code exactly as shown at 4:09 in https://developer.apple.com/videos/play/wwdc2023/10172/ However when I add any StoreKit functionality in I immediately get "Actor isolated structure cannot be exposed in C++" This makes me think I can't create a StoreKit view and call it from C++? Am I missing a better way? I don't think I can have another structure that holds the storeChooser in it because it will have the same problem (I assume, although I will check). Part of the issue seems to be that my app is C++ so there is no main function called in the swift for me to open this view with either, I was going to use the present function Zoe described (as below). I've tried a lot of alternative approaches but it seems to be blocking async functions from showing in C++ as well. So I'm not sure how to access the basic product(for:) and purchase(product) functions. import Foundation import StoreKit import SwiftUI public struct storeChooser: View { public var productIDs: [String] public var fetchError: String //@State //Note this is from the UI @State public var products: [Product] = [] // @State private var isPresented = true // weak private var host: UIViewController? = nil public init() { productIDs = ["20_super_crystals_v1"] products = [] self.fetchError = "untried" } public var body: some View { VStack(spacing: 20) { Text( "Products") ForEach(self.products) { product in Button { //dont do anything yet } label: { Text("\(product.displayPrice) - \(product.displayName)") } } }.task { do { try await self.loadProducts() } catch { print(error) } } } public func queryProducts() { Task { do { try await self.loadProducts() } catch { print(error) } } } public func getProduct1Name() -> String { if self.products.count > 0 { return self.products[0].displayName } else { return "empty" } } private func loadProducts() async throws { self.products = try await Product.products(for: self.productIDs) } /* public mutating func present(_ viewController: UIViewController) { isPresented = true; let host = UIHostingController(rootView: self) host.rootView.host = host viewController.present(host, animated: true) } */ }
2
0
127
May ’25
Swift 6 concurrency. Apple Watch App target and -disable-dynamic-actor-isolation.
I've got a watch app, still with storyboard, WKInterfaceController and WatchConnectivity. After updating it for swift 6 concurrency I thought I'd keep it for a little while without swift 6 concurrency dynamic runtime check. So I added -disable-dynamic-actor-isolation in OTHER_SWIFT_FLAGS, but it doesn't seem to have an effect for the Apple Watch target. Without manually marking callbacks where needed with @Sendable in dynamic checks seem to be in place. swiftc invocation is as (includes -disable-dynamic-actor-isolation): swiftc -module-name GeoCameraWatchApp -Onone -enforce-exclusivity\=checked ... GeoCameraWatchApp.SwiftFileList -DDEBUG -enable-bridging-pch -disable-dynamic-actor-isolation -D DEBUG -enable-experimental-feature DebugDescriptionMacro -sdk /Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS11.2.sdk -target arm64_32-apple-watchos7.0 -g -module-cache-path /Users/stand/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -Xfrontend -serialize-debugging-options -enable-testing -index-store-path /Users/stand/Library/Developer/Xcode/DerivedData/speedo-almhjmryctkitceaufvkvhkkfvdw/Index.noindex/DataStore -enable-experimental-feature OpaqueTypeErasure -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -swift-version 6 ... -disable-dynamic-actor-isolation flag seems to be working for the iOS targets, I believe. The flag is described here Am I missing something? Should the flag work for both iOS and Apple Watch targets?
2
0
639
Jan ’25
Calling StoreKit Swift from C++
What is the most obvious method of calling StoreKit from C++. I'm getting blocked by the fact that most of the critical StoreKit calls are async and functions marked a sync don't show up in the swift header for me to call from C++ (at least as far as I can tell). I'm trying to call let result = try await Product.products(for:productIDs) or let result = try await product.purchase() And C++ can't even see any functions I wrap these in as far as I can tell because i have to make them async. What am I missing? I tried a lot of alternates, like wrapping in Task { let result = try await Product.products(for:productIDs) } and it gives me 'Passing closure as a sending parameter' errors. Also when I try to call the same above code it gives me 'initializtion of immutable value never used' errors and the variables never appear. Code: struct storeChooser { public var productIDs: [String] public function checkProduct1 { Task { let result = try await Product.products(for: productIDs) } The above gives the initialization of immutable value skipped, and when I create a @State var products Then I get the 'passing closure as a sending parameter' error when i try to run it in a task it appears if I could make the function async and call it from C++ and have it return nothing it may work, does anyone know how to get C++ to see an async function in the -Swift.h file?
2
0
144
May ’25
Game Center fetchSavedGames sometimes returns empty list of games, although it works correctly on the next tries
I have implemented the Game Center for authentication and saving player's game data. Both authentication and saving player's data works correctly all the time, but there is a problem with fetching and loading the data. The game works like this: At the startup, I start the authentication After the player successfully logs in, I start loading the player's data by calling fetchSavedGames method If a game data exists for the player, I receive a list of SavedGame object containing the player's data The problem is that after I uninstall the game and install it again, sometimes the SavedGame list is empty(step 3). But if I don't uninstall the game and reopen the game, this process works fine. Here's the complete code of Game Center implementation: class GameCenterHandler { public func signIn() { GKLocalPlayer.local.authenticateHandler = { viewController, error in if let viewController = viewController { viewController.present(viewController, animated: false) return } if error != nil { // Player could not be authenticated. // Disable Game Center in the game. return } // Auth successfull self.load(filename: "TestFileName") } } public func save(filename: String, data: String) { if GKLocalPlayer.local.isAuthenticated { GKLocalPlayer.local.saveGameData(Data(data.utf8), withName: filename) { savedGame, error in if savedGame != nil { // Data saved successfully } if error != nil { // Error in saving game data! } } } else { // Error in saving game data! User is not authenticated" } } public func load(filename: String) { if GKLocalPlayer.local.isAuthenticated { GKLocalPlayer.local.fetchSavedGames { games, error in if let game = games?.first(where: {$0.name == filename}){ game.loadData { data, error in if data != nil { // Data loaded successfully } if error != nil { // Error in loading game data! } } } else { // Error in loading game data! Filename not found } } } else { // Error in loading game data! User is not authenticated } } } I have also added Game Center and iCloud capabilities in xcode. Also in the iCloud section, I selected the iCloud Documents and added a container. I found a simillar question here but it doesn't make things clearer.
1
0
824
1d
'init(coordinateRegion:interactionModes:showsUserLocation:userTrackingMode:annotationItems:annotationContent:)' was deprecated in iOS 17.0: Use Map initializers that t
I am currently encountering two deprecated errors in my code. Could someone please identify the issues with the code? Errors: 'init(coordinateRegion:interactionModes:showsUserLocation:userTrackingMode:annotationItems:annotationContent:)' was deprecated in iOS 17.0: Use Map initializers that take a MapContentBuilder instead. 'MapAnnotation' was deprecated in iOS 17.0: Use Annotation along with Map initializers that take a MapContentBuilder instead. Code: // MARK: - Stores Map (Dynamic) struct StoresMapView: View { @State private var storeLocations: [StoreLocation] = [] @State private var region = MKCoordinateRegion( center: CLLocationCoordinate2D(latitude: -31.95, longitude: 115.86), span: MKCoordinateSpan(latitudeDelta: 0.5, longitudeDelta: 0.5) ) var body: some View { Map(coordinateRegion: $region, interactionModes: .all, annotationItems: storeLocations) { store in MapAnnotation(coordinate: CLLocationCoordinate2D(latitude: store.latitude, longitude: store.longitude)) { VStack(spacing: 4) { Image(systemName: "leaf.circle.fill") .font(.title) .foregroundColor(.green) Text(store.name) .font(.caption) .fixedSize() } } } .onAppear(perform: loadStoreData) .navigationTitle("Store Locator") } private func loadStoreData() { guard let url = URL(string: "https://example.com/cop092/StoreLocations.json") else { return } URLSession.shared.dataTask(with: url) { data, _, _ in if let data = data, let decoded = try? JSONDecoder().decode([StoreLocation].self, from: data) { DispatchQueue.main.async { self.storeLocations = decoded if let first = decoded.first { self.region.center = CLLocationCoordinate2D(latitude: first.latitude, longitude: first.longitude) } } } }.resume() } }
1
0
121
May ’25
Python Ignoring Invalid Distributions
Hi There, I have been using my Mac Studio to complete some work in Python (which I normally do in Linux) and recently I got this error which has completely stopped all development as venvs will no longer work correctly: WARNING: Ignoring invalid distribution ... (and then whichever apps are currently installed in the venv This occurs for me on every install of any version of Python installed using any of the standard methods (installer). I've tried all the main points of advice on knowledgeable forums, but the difference between Python on Sequoia and Python on Linux is enough such that I am at an end of my debugging knowledge. I've even attempted to blast away any System Python changes with a recovery reinstall, but the problem persists. I've done almost exactly the same setup on my MacBook Air and it is fine ... but the Studio is now unavailable for Python development. I know I have probably dropped the ball somewhere but can't see the error myself so, I'm wondering if I should just blast away everything on the machine and go through the process of doing a clean install. Asking the experts in MacOS here so I can avoid the pain of doing that!
1
0
280
3d
Best way to learn Swift
Hi I'm new here - I'm trying to learn Swift and SwiftUI. Tried on PluralSight and Udemy but they have been outdated and thus hard to follow. So after finding Apples own guides I felt relieved and happy, but now I'm stuck again. After they've updated Xcode to use #Preview instead of PreviewProvider it's hard to follow along on their tutorial. Does anyone know of good resources to study SwiftUI? Or know if apple plan to update their tutorials any time soon? I'm here now if anyone's interested or it's useful information: https://developer.apple.com/tutorials/app-dev-training/managing-state-and-life-cycle
1
0
420
Feb ’25
Swift Concurrency: Calling @MainActor Function from Protocol Implementation in Swift 6
I have a Settings class that conform to the TestProtocol. From the function of the protocol I need to call the setString function and this function needs to be on the MainActor. Is there a way of make this work in Swift6, without making the protocol functions running on @MainActor The calls are as follows: class Settings: TestProtocol{ var value:String = "" @MainActor func setString( _ string:String ){ value = string } func passString(string: String) { Task{ await setString(string) } } } protocol TestProtocol{ func passString( string:String ) }
1
0
173
May ’25