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

All subtopics
Posts under Programming Languages topic

Post

Replies

Boosts

Views

Activity

New unexpected compile behavior in Xcode 16.3
I have a macro that converts expression into a string literal, e.g.: #toString(variable) -> "variable" #toString(TypeName) -> "TypeName" #toString(\TypeName.property) -> "property" In Xcode 16.3 #toString(TypeName) stopped to work, compilation throws 'Expected member name or initializer call after type name' error. Everything works fine in Xcode 16.2. I tried to compare build settings between 16.2 and 16.3 but haven't noticed differences that may cause this new error. The following works in both Xcode versions: #toString(variable) -> "variable" #toString(\TypeName.property) -> "property" Seems like Xcode tries to compile code that shouldn't be compiled because of macro expansion. Does anybody know what new has appeared in 16.3 and, perhaps, how to fix the problem?
5
1
200
Apr ’25
Crash in libswiftCore with swift::RefCounts
I'm seeing somewhat regular crash reports from my app which appear to be deep in the Swift libraries. They're happening in the same spot, so I'm apt to believe something is likely getting deallocated behind the scenes - but I don't really know how to guard against it. Here's the specific crash thread: 0 libsystem_kernel.dylib 0x00000001d51261dc __pthread_kill + 8 (:-1) 1 libsystem_pthread.dylib 0x000000020eaa8b40 pthread_kill + 268 (pthread.c:1721) 2 libsystem_c.dylib 0x000000018c5592d0 abort + 124 (abort.c:122) 3 libsystem_malloc.dylib 0x0000000194d14cfc malloc_vreport + 892 (malloc_printf.c:251) 4 libsystem_malloc.dylib 0x0000000194d14974 malloc_report + 64 (malloc_printf.c:290) 5 libsystem_malloc.dylib 0x0000000194d0e8b4 ___BUG_IN_CLIENT_OF_LIBMALLOC_POINTER_BEING_FREED_WAS_NOT_ALLOCATED + 32 (malloc_common.c:227) 6 Foundation 0x0000000183229f40 __DataStorage.__deallocating_deinit + 104 (Data.swift:563) 7 libswiftCore.dylib 0x0000000182f556c8 _swift_release_dealloc + 56 (HeapObject.cpp:847) 8 libswiftCore.dylib 0x0000000182f5663c bool swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1>>::doDecrementSlow<(swift::PerformDeinit)1>(swift::RefCountBitsT<(swift::RefCountInlinedness)1>, unsigned int) + 152 (RefCount.h:1052) 9 TAKAware 0x000000010240c688 StreamParser.parseXml(dataStream:) + 1028 (StreamParser.swift:0) 10 TAKAware 0x000000010240cdb4 StreamParser.processXml(dataStream:forceArchive:) + 16 (StreamParser.swift:85) 11 TAKAware 0x000000010240cdb4 StreamParser.parseCoTStream(dataStream:forceArchive:) + 360 (StreamParser.swift:108) 12 TAKAware 0x000000010230ac3c closure #1 in UDPMessage.connect() + 252 (UDPMessage.swift:68) 13 Network 0x000000018506b68c closure #1 in NWConnectionGroup.setReceiveHandler(maximumMessageSize:rejectOversizedMessages:handler:) + 200 (NWConnectionGroup.swift:458) 14 Network 0x000000018506b720 thunk for @escaping @callee_guaranteed (@guaranteed OS_dispatch_data?, @guaranteed OS_nw_content_context, @unowned Bool) -> () + 92 (<compiler-generated>:0) 15 Network 0x0000000185185df8 invocation function for block in nw_connection_group_handle_incoming_packet(NWConcrete_nw_connection_group*, NSObject<OS_nw_endpoint>*, NSObject<OS_nw_endpoint>*, NSObject<OS_nw_interface>*, NSObje... + 112 (connection_group.cpp:1075) 16 libdispatch.dylib 0x000000018c4ad2b8 _dispatch_block_async_invoke2 + 148 (queue.c:574) 17 libdispatch.dylib 0x000000018c4b7584 _dispatch_client_callout + 16 (client_callout.mm:85) 18 libdispatch.dylib 0x000000018c4d325c _dispatch_queue_override_invoke.cold.3 + 32 (queue.c:5106) 19 libdispatch.dylib 0x000000018c4a21f8 _dispatch_queue_override_invoke + 848 (queue.c:5106) 20 libdispatch.dylib 0x000000018c4afdb0 _dispatch_root_queue_drain + 364 (queue.c:7342) 21 libdispatch.dylib 0x000000018c4b054c _dispatch_worker_thread2 + 156 (queue.c:7410) 22 libsystem_pthread.dylib 0x000000020eaa5624 _pthread_wqthread + 232 (pthread.c:2709) 23 libsystem_pthread.dylib 0x000000020eaa29f8 start_wqthread + 8 (:-1) Basically we're receiving a message via UDP that is an XML packet. We're parsing that packet using what I think it pretty straightforward code that looks like this: func parseXml(dataStream: Data?) -> Array<String> { var events: [String] = [] guard let data = dataStream else { return events } currentDataStream.append(data) var str = String(decoding: currentDataStream, as: UTF8.self) while str.contains(StreamParser.STREAM_DELIMTER) { let splitEvent = str.split(separator: StreamParser.STREAM_DELIMTER, maxSplits: 1) let cotEvent = splitEvent.first! var restOfString = "" if splitEvent.count > 1 { restOfString = String(splitEvent.last!) } events.append("\(cotEvent)\(StreamParser.STREAM_DELIMTER)") str = restOfString } currentDataStream = Data(str.utf8) return events } the intention is that the message may be broken across multiple packets, so we build them up here. Is there anything I can do to guard against these crashes?
5
0
209
Jul ’25
Swift 6 conversion for IBOutlet
I'm struggling to convert Swift 5 to Swift 6. As advised in doc, I first turned strict concurrency ON. I got no error. Then, selected swift6… and problems pop up. I have a UIViewController with IBOutlets: eg a TextField. computed var eg duree func using UNNotification: func userNotificationCenter I get the following error in the declaration line of the func userNotificationCenter: Main actor-isolated instance method 'userNotificationCenter(_:didReceive:withCompletionHandler:)' cannot be used to satisfy nonisolated requirement from protocol 'UNUserNotificationCenterDelegate' So, I declared the func as non isolated. This func calls another func func2, which I had also to declare non isolated. Then I get error on the computed var used in func2 Main actor-isolated property 'duree' can not be referenced from a nonisolated context So I declared duree as nonsilated(unsafe). Now comes the tricky part. The computed var references the IBOutlet dureeField if dureeField.text == "X" leading to the error Main actor-isolated property 'dureeField' can not be referenced from a nonisolated context So I finally declared the class as mainActor and the textField as nonisolated @IBOutlet nonisolated(unsafe) weak var dureeField : UITextField! That silences the error (but declaring unsafe means I get no extra robustness with swift6) just to create a new one when calling dureeField.text: Main actor-isolated property 'text' can not be referenced from a nonisolated context Question: how to address properties inside IBOutlets ? I do not see how to declare them non isolated and having to do it on each property of each IBOutlet would be impracticable. The following did work, but will make code very verbose: if MainActor.assumeIsolated({dureeField.text == "X"}) { So I must be missing something.
5
0
650
Aug ’25
Include swift class as an Instance variable in a C++ class
Is there a way to achieve the following using C++/Swift interoperability: class MyCppClass { public: ... ... private: bool member1; ACppClass member2; ASwiftClass member3; } I'm aware of the recent C++/Objective-C interoperability compiler setting, but can't find any information on whether this is possible. I've watched the Apple video: https://developer.apple.com/videos/play/wwdc2023/10172/ and seen this post from Quinn: https://developer.apple.com/forums/thread/768928 but I don't see anyone discussing this kind of situation. Thanks in advance.
4
0
102
Mar ’25
Help Understanding Concurrency Error with Protocol Listener and Actor
Hi all, I'm running into a Swift Concurrency issue and would appreciate some help understanding what's going on. I have a protocol and an actor set up like this: protocol PersistenceListener: AnyObject { func persistenceDidUpdate(key: String, newValue: Any?) } actor Persistence { func addListener(_ listener: PersistenceListener) { listeners.add(listener) } /// Removes a listener. func removeListener(_ listener: PersistenceListener) { listeners.remove(listener) } // MARK: - Private Properties private var listeners = NSHashTable<AnyObject>.weakObjects() // MARK: - Private Methods /// Notifies all registered listeners on the main actor. private func notifyListeners(key: String, value: Any?) async { let currentListeners = listeners.allObjects.compactMap { $0 as? PersistenceListener } for listener in currentListeners { await MainActor.run { listener.persistenceDidUpdate(key: key, newValue: value) } } } } When I compile this code, I get a concurrency error: "Sending 'listener' risks causing data races"
4
0
107
Apr ’25
Warning: Reference to captured var 'hashBag' in concurrently-executing code
I get many warnings like this when I build an old project. I asked AI chatbot which gave me several solutions, the recommended one is: var hashBag = [String: Int]() func updateHashBag() async { var tempHashBag = hashBag // make copy await withTaskGroup(of: Void.self) { group in group.addTask { tempHashBag["key1"] = 1 } group.addTask { tempHashBag["key2"] = 2 } } hashBag = tempHashBag // copy back? } My understanding is that in the task group, the concurrency engine ensures synchronized modifications on the temp copy in multiple tasks. I should not worry about this. My question is about performance. What if I want to put a lot of data into the bag? Does the compiler do some kind of magics to optimize low level memory allocations? For example, the temp copy actually is not a real copy, it is a special reference to the original hash bag; it is only grammar glue that I am modifying the copy.
4
0
134
Apr ’25
Swift6 race warning
I'm trying to fix some Swift6 warnings, this one seems too strict, I'm not sure how to fix it. The variable path is a String, which should be immutable, it's a local variable and never used again inside of the function, but still Swift6 complains about it being a race condition, passing it to the task What should I do here to fix the warning?
4
0
602
Jan ’25
How to break `while` loop and `deliver partial result to `View`?
I make some small program to make dots. Many of them. I have a Generator which generates dots in a loop: //reprat until all dots in frame while !newDots.isEmpty { virginDots = [] for newDot in newDots { autoreleasepool{ virginDots.append( contentsOf: newDot.addDots(in: size, allDots: &result, inSomeWay)) } newDots = virginDots } counter += 1 print ("\(result.count) dots in \(counter) grnerations") } Sometimes this loop needs hours/days to finish (depend of inSomeWay settings), so it would be very nice to send partial result to a View, and/or if result is not satisfying — break this loop and start over. My understanding of Tasks and Concurrency became worse each time I try to understand it, maybe it's my age, maybe language barier. For now, Button with {Task {...}} action doesn't removed Rainbow Wheel from my screen. Killing an app is wrong because killing is wrong. How to deal with it?
4
0
441
Nov ’24
Overriding global new and delete is not working.
We developing Native App with C++17 for iOS. We override global new and delete operators. This App deallocate all allocated memories correctly by Run on Xcode (Command + R), but exception occurs launch from xcrun or App icon on iPhone. I debugged the exception. Overriding new operation was called correctly, but overriding delete operation was not called. The default delete was called. I'm not sure why is that. STEPS TO REPRODUCE Build xcode project. Run "xcrun devicectl device install app --device " Run "xcrun devicectl device process launch --console --device " PLATFORM AND VERSION iOS Development environment: Xcode 16.4, macOS macOS Sequoia 15.5 Run-time configuration: iOS 18.5 main.cpp I attached is sample code to reproduce this problem. main.cpp
4
0
632
Aug ’25
array.contains(where: ...) returns true in debugger console, but false in application
I am encountering a strange issue. I have a class that manages a selection of generic items T in an Array. It's a work in progress, but I'l try to give a gist of the setup. class FileManagerItemModel: NSObject, Identifiable, Codable, NSCopying, Transferable, NSItemProviderReading, NSItemProviderWriting { var id: URL static func == (lhs: FileManagerItemModel, rhs: FileManagerItemModel) -> Bool { lhs.fileURL == rhs.fileURL } var fileURL: URL { FileManagerItemModel.normalizedFileURL(type: type, rootURL: rootURL, filePath: filePath) } init(type: FileManagerItemType, rootURL: URL, fileURL: URL) { self.type = type self.rootURL = rootURL self.filePath = FileManagerItemModel.filePathRelativeToRootURL(fileURL: fileURL, rootURL: rootURL) ?? "[unknown]" self.id = FileManagerItemModel.normalizedFileURL(type: type, rootURL: rootURL, filePath: filePath) } } The class that manages the selection of these FileManagerItemModels is like so: @Observable class MultiSelectDragDropCoordinator<T: Hashable>: ObservableObject, CustomDebugStringConvertible { private(set) var multiSelectedItems: [T] = [] func addToSelection(_ item: T) { if !multiSelectedItems.contains(where: { $0 == item }) { multiSelectedItems.append(item) } } ... } My issue is that the check if !multiSelectedItems.contains(where: { $0 == item }) in func addToSelection fails. The if is always executed, even if multiSelectedItems contains the given item. Now, my first thought would be to suspect the static func == check. But that check works fine and does what it should do. Equality is defined by the whole fileURL. So, the if should have worked. And If I put a breakpoint in func addToSelection on the if, and type po multiSelectedItems.contains(where: { $0 == item }) in the debug console, it actually returns true if the item is in multiSelectedItems. And it properly return false if the item is not in multiSelectedItems. Still, if I then continue stepping through the app after the breakpoint was hit and I confirmed that the contains should return true, the app still goes into the if, and adds a duplicate item. I tried assigning to a variable, I tried using a function and returning the true/false. Nothing helps. Does anyone have an idea on why the debugger shows one (the correct and expected) thing but the actual code still does something different?
4
0
545
Feb ’25
Issue Integrating C++ SDK
Hello Apple Team, I'm trying to import the Audodesk FBX SDK to my Objective-C iOS Project. The SDK is written in C++, but has support for iOS and the iOS simulator architectures. I've added the path to the include folder in the Header Search Path I've also added the paths to libfbxsdk.a in the Library Search Paths Finally, I've added the libfbxsdk.a file to the Link Binary with Libraries. However, when I build the project, I get the following error: building for 'iOS', but linking in object file (/Users/Lond/Documents/v2/Autodesk/iOS/2020.3.7/lib/ios/debug/libfbxsdk.a[28](fbxalloc.cxx.o)) built for 'macOS' In the terminal, if I type the command: 
lipo -info libfbxsdk.a I get the message Non-fat file: libfbxsdk.a is architecture: arm64 confirming that I'm using the library for the correct architecture.   Do I need to add any other confifuration option? (Like the other linker flag or something else) I'm quite new to C++, and integrating a C++ SDK into iOS is not easy.   I'm using Mac Os Sonoma 14.6.1 Tested on Xcode 15.4 and 16.2 Target Device: iPhone 13 Pro (iOS 17.6.1) iOS FBX SDK version: 2020.3.7 Link to the SDK if needed: https://aps.autodesk.com/developer/overview/fbx-sdk   Any help would be greatly appreciated Thank you
4
0
634
Feb ’25
Causes of disordered dictionary in Swift
Everyone knows that dictionaries in swift are unordered collections, there is no problem with that. I've noticed some behavior that I can't explain and hope someone can help me. The first variant We have a very simple code: struct Test { let dict = [1: “1”, 2: “2”, 3: “3”, 4: “4”, 5: “5”] func test() { for i in dict { print(i) } } } If you call test() several times in a row, the output to the console on my computer looks something like this: (key: 5, value: “5”) (key: 1, value: “1”) (key: 2, value: “2”) (key: 3, value: “3”) (key: 4, value: “4”) (key: 2, value: “2”) (key: 3, value: “3”) (key: 1, value: “1”) (key: 4, value: “4”) (key: 5, value: “5”) (key: 1, value: “1”) (key: 3, value: “3”) (key: 2, value: “2”) (key: 5, value: “5”) (key: 4, value: “4”) At each new for loop we get a random order of elements It seemed logical to me, because a dictionary is an unordered collection and this is correct behavior. However The second variant the same code on my colleague's computer, but in the console we see something like this: (key: 2, value: “2”) (key: 3, value: “3”) (key: 1, value: “1”) (key: 4, value: “4”) (key: 5, value: “5”) (key: 2, value: “2”) (key: 3, value: “3”) (key: 1, value: “1”) (key: 4, value: “4”) (key: 5, value: “5”) (key: 2, value: “2”) (key: 3, value: “3”) (key: 1, value: “1”) (key: 4, value: “4”) (key: 5, value: “5”) always, within the same session, we get the same order in print(i) We didn't use Playground, within which there may be differences, but a real project. swift version 5+ we tested on Xcode 14+, 15+ (at first I thought it was because the first version had 14 and the second version had 15, but then a third colleague with Xcode 15 had the behavior from the first scenario) we did a lot of checks, several dozens of times and always got that on one computer random output of items to the console, and in another case disordered only in the first output to the console Thanks
4
0
419
Dec ’24
Unexpected behavior of dispatch_main on macOS
Hi! We are seeing a bit surprising behavior of dispatch_main on macOS where it seems to spawn a different thread instead of preserving the one it gets called from. Managed to reproduce it in a completely empty command-line tool project in Xcode int main(int argc, const char * argv[]) { @autoreleasepool { dispatch_main(); return 0; } } I put a breakpoint on the line with dispatch_main and see that I am on Thread 1 and inside main function. That makes sense. I resume execution and pause again. Looking at Thread output in Xcode, I can only see Thread 2. Thread 1 is gone and the executable keeps on running. So dispatch_main did what was expected (prevented the process from termination) but throws out the thread it was called from and creates a new one? Is that behavior expected or am I missing something? Just a brain teaser at this point. But we could not make sense out of it. :)
4
1
535
Jan ’25
App mysteriously crashing in CFNetwork.LoaderQ queue
I’m stuck with repeated production crashes in my SwiftUI app and I can’t make sense of the traces on my own. The symbolicated reports show the same pattern: Crash on com.apple.CFNetwork.LoaderQ with EXC_BAD_ACCESS / PAC failure Always deep in CFNetwork, most often in URLConnectionLoader::loadWithWhatToDo(NSURLRequest*, _CFCachedURLResponse const*, long, URLConnectionLoader::WhatToDo) No frames from my code, no sign of AuthManager or tokens. What I’ve tried: Enabled Address Sanitizer, Malloc Scribble, Guard Malloc, Zombies. Set CFNETWORK_DIAGNOSTICS=3 and collected Console logs. Stress-tested the app (rapid typing, filter switching, background/foreground, poor network with Network Link Conditioner). Could not reproduce the crash locally. So far: Logs show unrelated performance faults (I/O on main thread, CLLocationManager delegate), but no obvious CFNetwork misuse. My suspicion is a URLSession lifetime or delegate/auth-challenge race, but I can’t confirm because I can’t trigger it. Since starting this investigation, I also refactored some of my singletons into @State/@ObservedObject dependencies. For example, my app root now wires up AuthManager, BackendService, and AccountManager (where API calls happen using async/await) as @State properties: @State var authManager: AuthManager @State var accountManager: AccountManager @State var backendService: BackendService init() { let authManager = AuthManager() self._authManager = .init(wrappedValue: authManager) let backendService = BackendService(authManager: authManager) self._backendService = .init(wrappedValue: backendService) self._accountManager = .init(wrappedValue: AccountManager(backendService: backendService)) } I don’t know if this refactor is related to the crash, but I am including it to be complete. Apologies that I don’t have a minimized sample project — this issue seems app-wide, and all I have are the crash logs. Request: Given the crash location (URLConnectionLoader::loadWithWhatToDo), can Apple provide guidance on known scenarios or misuses that can lead to this crash? Is there a way to get more actionable diagnostics from CFNetwork beyond CFNETWORK_DIAGNOSTICS to pinpoint whether it’s session lifetime, cached response corruption, or auth/redirect? Can you also confirm whether my dependency setup above could contribute to URLSession or backend lifetime issues? I can’t reliably reproduce the crash, and without Apple’s insight the stack trace is effectively opaque to me. Thanks for your time and help. Happy to send multiple symbolicated crash logs at request. Thanks for any help. PS. Including 2 of many similar crash logs. Can provide more if needed. Atlans-2025-07-29-154915_symbolicated (cfloader).txt Atlans-2025-08-08-124226_symbolicated (cfloader).txt
4
0
3.2k
Sep ’25
Objective-C: instantiating a Class object
My company wants to be insure that if my Objective-C to Swift conversions fail in anyway, that the app can revert to using the older Objective-C code. By using a remotely controllable flag, the app can switch which code runs as, both are compiled into the app. Essentially, I create a protocol that describes the original class, then both classes (with a "s" or "o" appended to them) conform to the protocol. Protocol: Object Objective-C class: oObject Swift class: sObject That said, I hit one issue that I just can't seem reason out. I create a Objective-C function that returns the appropriate class: Class<Object> classObject(void) { if (myFlag) { return [sObject class]; } else { return [oObject class]; } } Swift deals with this really well - I can create an initialized object using: let object = classObject().init() but I cannot find a way to do this in Objective-C: Object *object = [[classSalesForceData() alloc] init]; fails with "No known class method for selector 'alloc'" Is there a way to do this? David PS: my workaround is to return an allocated object: Object *createObject(void) { if (myFlag) { return [sObject alloc]; } else { return [oObject alloc]; } }
4
0
473
Feb ’25
Interpreting received "Data" object in cpp
Hello Everyone, I have a use case where I wanted to interpret the "Data" object received as a part of my NWConnection's recv call. I have my interpretation logic in cpp so in swift I extract the pointer to the raw bytes from Data and pass it to cpp as a UnsafeMutableRawPointer. In cpp it is received as a void * where I typecast it to char * to read data byte by byte before framing a response. I am able to get the pointer of the bytes by using // Swift Code // pContent is the received Data if let content = pContent, !content.isEmpty { bytes = content.withUnsafeBytes { rawBufferPointer in guard let buffer = rawBufferPointer.baseAddress else { // return with null data. } // invoke cpp method to interpret data and trigger response. } // Cpp Code void InterpretResponse (void * pDataPointer, int pDataLength) { char * data = (char *) pDataPointer; for (int iterator = 0; iterator < pDataLength; ++iterator ) { std::cout << data<< std::endl; data++; } } When I pass this buffer to cpp, I am unable to interpret it properly. Can someone help me out here? Thanks :) Harshal
4
0
974
Dec ’24
Range For Keys and Values Of Dictionary
I came across a code let myFruitBasket = ["apple":"red", "banana": "yellow", "budbeeri": "dark voilet", "chikoo": "brown"] Can we have range for keys and values of dictionary, it will be convenient for keys print(myFruitBasket.keys[1...3]) // banana, budbeeri, chikoo same for values print(myFruitsBasket.values[1...3]) // yellow, voilet, brown
4
0
472
Aug ’25
Execute Swift scripts dynamically in iOS
I have a transformation function that takes in data, executes some instructions, and returns an output. This function is dynamic and not shipped with the binary. Currently, I’m executing it using JavaScriptCore.JSContext, which works well, but the function itself is written in JavaScript. Is there a way to achieve something similar using Swift – such as executing a dynamic Swift script, either directly or through other means? I know this is possible on macOS, but I’m not sure about iOS. I’ve also heard that extensions might open up some possibilities here. Any insights or alternative approaches would be appreciated.
4
0
336
Jul ’25
Swift Decimal binary integer generic initializer fatal error
I am trying to use initialize a Decimal type using its generic binary integer exactly initializer but it keeps crashing with a fatal error regardless of the value used: Code to reproduce the issue: let binaryInteger = -10 let decimal = Decimal(exactly: binaryInteger) // error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). Is it a known bug?
4
0
653
May ’25