I have this sample code
import SwiftUI
struct ContentView: View {
var body: some View {
ParentView()
}
}
struct ParentView: View {
@State var id = 0
var body: some View {
VStack {
Button {
id+=1
} label: {
Text("update id by 1")
}
TestView(id: id)
}
}
}
struct TestView: View {
var sequence = DoubleGenerator()
let id: Int
var body: some View {
VStack {
Button {
sequence.next()
} label: {
Text("print next number").background(content: {
Color.green
})
}
Text("current id is \(id)")
}.task {
for await number in sequence.stream {
print("next number is \(number)")
}
}
}
}
final class DoubleGenerator {
private var current = 1
private let continuation: AsyncStream<Int>.Continuation
let stream: AsyncStream<Int>
init() {
var cont: AsyncStream<Int>.Continuation!
self.stream = AsyncStream { cont = $0 }
self.continuation = cont
}
func next() {
guard current >= 0 else {
continuation.finish()
return
}
continuation.yield(current)
current &*= 2
}
}
the print statement is only ever executed if I don't click on the update id by 1 button. If i click on that button, and then hit the print next number button, the print statement doesn't print in the xcode console. I'm thinking it is because the change in id triggered the view's init function to be called, resetting the sequence property and so subsequent clicks to the print next number button is triggering the new version of sequence but the task is still referring its previous version.
Is this expected behaviour? Why in onChange and Button, the reference to the properties is always up to date but in .task it is not?
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
When the guy was talking about structural identity, starting at about 8:53, he mentioned how the swiftui needs to guarantee that the two views can't swap places, and it does this by looking at the views type structure. It guarantees that the true view will always be an A, and the false view will always be a B.
Not sure exactly what he means because views can't "swap places" like dogs. Why isn't just knowing that some View is shown in true, and another is shown in false, enough for its identity? e.g. The identity could be "The view on true" vs
"The view on false", same as his example with "The dog on the left" vs "The dog on the right"
Structs are value types, and the SwiftUI gets reinitialized many times throughout its lifecycle. Whenever it gets reinitialized, would the reference that the delegator has of it still work if the View uses @State or @StateObject that hold a persistent reference to the views data?
protocol MyDelegate: AnyObject {
func didDoSomething()
}
class Delegator {
weak var delegate: MyDelegate?
func trigger() {
delegate?.didDoSomething()
}
}
struct ContentView: View, MyDelegate {
private let delegator = Delegator()
@State counter = 1
var body: some View {
VStack {
Text("\(counter)")
Button("Trigger") {
delegator.trigger()
}
}
}
func didDoSomething() {
counter += 1 //would this call update the counter in the view even if the view's instance is copied over to the delegator?
}
}
in my xcode project, i created a new package by going through File > New > Package, just like they said in https://developer.apple.com/documentation/xcode/organizing-your-code-with-local-packages
I have a package, but the problem is, whenever I made any changes in the package's source code, it never showed in the main project. I can import the package just fine, but the package does not show anything. no added apis, functions, nothing.
Im using Xcode 26.0.1
I am getting this error msg when I try to run a SwiftUI Preview on an iOS 15.5 simulator:
Termination Reason: Namespace DYLD, Code 1, Library missing
| Library not loaded: /usr/lib/swift/libswift_StringProcessing.dylib
| Referenced from: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/libLiveExecutionResultsLogger.dylib
| Reason: tried: '/Users/hfg/Library/Developer/Xcode/DerivedData/Testios15sim-aawlbfbtggzozseoekycwwpadhrc/Build/Intermediates.noindex/Previews/iphonesimulator/Testios15sim/Products/Debug-iphonesimulator/libswift_StringProcessing.dylib' (no such file), '/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.5.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift/libswift_StringProcessing.dylib' (no such file), '/usr/lib/swift/libswift_StringProcessing.dylib' (no such file), '/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.5.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libswift_StringProcessing.dylib' (no such file)
FYI I tried with the Legacy Preview Execution both on and off
Do simulators match real device for pixel density for testing image assets?
I have a ContentView in my app which includes the line of code FileUploadProgressAttributes. this struct is defined in a file included in the target FileUploadProgressExtension. and it is an ActivityAttributes.
in ContentView I imported FileUploadProgressExtension, and the xcode is able to find the FileUploadProgressAttributes during prebuild. but during build, it gives me
Undefined symbols for architecture arm64:
"FileUploadProgressExtension.FileUploadProgressAttributes.init(filename: Swift.String) -> FileUploadProgressExtension.FileUploadProgressAttributes
the workaround i found is to add the file with the FileUploadProgressAttributes to my app's target, but I'm not sure if this is the right thing to do. When Xcode created the extension for me, it added the extension target as a target dependency of my app. so obviously if i added this file to my app target it makes the extension target pointless.
First time working with widgets so I'm not sure if I'm missing something.
It seems like this is not supported in the Simulator because when I run my Unit tests and I try to read protection key-value the value is always nil, even if I set the data protection level when I write the file.
On device this key returns the expected value.
Is it possible to have the simulator support the data protection classes to run my unit tests?
FYI Im testing on iOS
when I get results from picker: PHPickerViewController, didFinishPicking results: [PHPickerResult])
and I load the image using itemProvider .loadFileRepresentation (the itemProvider is the NSItemProvider provided by the PHPickerResult)
will the url that's returned by this method be guaranteed to have the file extension ie, "file://image.jpeg" not "file://image"
I want to know if i need to just check the extension to know its file type.
(FYI in case this makes a difference, im only interested in user screenshots and screenrecordings)
if it set com.apple.CoreData.ConcurrencyDebug 1 as launch arg the app always crashes and i cant proceed into the app. is there a way to only raise a warning for these issues so that i can go into the app and check every place in one session for coredata errors?
When you update XCode it updates the sdk version, but do changes in the sdk take effect for apps running in a lower iOS version or only the corresponding iOS version or higher?
For instance, https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18_1-release-notes
Do changes listed in the notes only happen for apps that are running on iOS 18.1 devices or on any device with the app compiled against the 18.1 sdk version?
Am I the only person who finds the docs totally unclear on this?
Not sure if my question is weird or not, but I didnt find any documentation about an sdks access to an apps documents directory.
Im assuming that because sdk is part of the sandbox that it can access and read from the documents directory? i.e. if i used
NSFileManager.defaultManager.URLForDirectory(
directory = NSCachesDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
to write a file called "file.txt", then any sdk my app used has the ability to access the contents of said directory?
If yes, why isnt this considered something more worth mentioning? usually in filemanager tutorials they never warn about this.
FYI: Im asking more for iOS and iPadOs then MacOs.
Is it possible automatically grey out files that are too big when user select files using the UIDocumentPickerViewController?
https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-17_4-release-notes
At the end of each release note there is a number, eg 121566625). What are these numbers?
Lets say i have an sdk that is not one of those listed, but it uses one of those listed. In this case, do i have to get the sdk im using to update their dependency to add the required signature and privacy manifest?