Post

Replies

Boosts

Views

Activity

CKAssets Download Even When desiredKeys Excludes Them
I have an app with a CloudKit Public Database in which a CKRecord can contain a CKAsset or two that holds the url of image data. I don't want to always obtain the image data so my desiredKeys excludes the CKAsset key in the CKRecord in that case. I use the following Swift function. var (matchResults, queryCursor) = try await database.records(matching: query, desiredKeys: desiredKeys) The desiredKeys variable could be an array of strings with the keys of CKRecord fields I want to return or nil if I want all of the data including the asset data. After I have the records, I do the following. if let imageAsset = record["ImageAsset"] as? CKAsset, let url = imageAsset.fileURL, let data = try? Data(contentsOf: url) { self.imageData = data } However, when I exclude the "ImageAsset" key from the desiredKeys array, my if let imageAsset contains the asset information. Looking at the received data, I can see that other keys that I exclude are not being downloaded, but the CKAsset url appears to be downloaded. Why? I expected that the if let would have been nil and the code within the if let would not have been executed.
3
0
932
May ’23
SwiftData Predicate Issue Workaround
I actually have found a workaround to an issue I reported on earlier. Here it is by example. let predicate = #Predicate<Data> { data in data.result == result && data.variable?.starts(with: SomeString) ?? false } Note the data.variable?. and the ?? false. This works. I still don't think I should have to discover these things. Something needs to be fixed on Apple's end.
3
0
1.8k
Aug ’23
'UIStoryboard' and 'UIStoryboardSegue' was deprecated in visionOS 1.0 - Why?
I currently have a UIKit app which uses a UIStoryboard and which has a tab bar controller. I removed the tab bar controller from the storyboard and created a tab bar app in SwiftUI which has the UIKit views represented as UIViewControllerRepresentable within structs. I changed the visionOS app destination from 'visionOS Designed for iPad' to 'visionOS' because I want to see the tabs on the left side in visionOS. I got a ton of warnings and some errors. I fixed the errors (which were related to user location). But the warnings are with regards to the storyboard and storyboard segue. The app runs perfectly fine but the warnings warn that UIStoryboard and UIStoryboardSegue will not be supported in a future version of visionOS. I wonder first why this was done and second, how much time will I have to fix the warnings? Could I release the app as is and fix later or will the support be dropped in a short timeframe? One of the ways to create views for view controllers in UIKit is through a storyboard. If you kill those in visionOS, then you restrict a big way that one can embed a UIKit view controller in SwiftUI.
6
0
1.2k
Sep ’23
Xcode Launch Fails for Destination: Mac (Designed for iPad)
I posted this before and thought I had fixed it, but I did not. I have an app which used to work well but now fails to launch the destination Mac (Designed for iPad). It builds fine, but doesn't launch. It does launch as aa Mac Catalyst app and if I modify the bundle id slightly, it launches as a Mac (Designed for iPad) app. I have a very similar, and I mean very similar, project that does not have this problem. I have automatically managing signing checked. would like and appreciate any help you can give me that would help me to solve this problem. I had a feedback on this, but closed it when I thought I had fixed the problem by changing the bundle id, running and then changing the bundle id back. I get the following error information. Could not launch “App Name” Domain: IDELaunchErrorDomain Code: 20 Recovery Suggestion: Runningboard has returned error 5. Please check the system logs for the underlying cause of the error. User Info: { DVTErrorCreationDateKey = "2023-09-27 03:23:51 +0000"; DVTRadarComponentKey = 968756; IDERunOperationFailingWorker = IDELaunchServicesLauncher; } The operation couldn’t be completed. Launch failed. Domain: RBSRequestErrorDomain Code: 5 Failure Reason: Launch failed. Launchd job spawn failed Domain: NSPOSIXErrorDomain Code: 153
8
0
1.7k
Oct ’23
About Adding a visionOS Platform and Uploading a visionOS Binary
I have modified two of my apps to run on visionOS and I see that in App Store Connect, one add a visionOS Platform. My question is, why would I want to do this if I can't upload a visionOS binary? Would it be to work on the metadata? Also, I would like to have my visionOS binary evaluated. Is there any way to do this at this time? It appears that only iOS or iPadOS apps are being evaluated.
1
0
729
Nov ’23
visionOS Build Issues
I've been working on a visionOS platform for my existing app. I added the visionOS platform in App Store Connect. In Xcode 15.2, I set the destination to 'Any visionOS Device (Designed for iPad, arm64)'. The App Store Connect visionOS platform does not see the build. It does show up as an iOS build on Test Flight. I don't see anyway to designate the build as a build that the visionOS destination sees. Also, the upload failed when I tried to set the version for the app as 1.0. It went through when I put the version as a number higher than my iOS app version.
2
0
974
Jan ’24
Swift 6, SwiftData modelContext.save() Crashes, Does not AutoSave
I took one of my apps and have gone through the process of making it compatible with Swift 6. I started with Swift 5 and Complete Concurrency Checking and eliminated every warning. I flipped the switch to Swift 6 and I have no compile errors and no warnings. I also created a ModelActor and created async functions to fetch, delete, get an object's persistentID and save model objects. My SwiftData model has a notes property and the user can update or add onto the notes and resave the model object. The app crashes when I save the changes using an explicit save operation. However, the next time the app is launched, the changes did propagate. If I do not use the explicit save operation, the system does not auto-save and does not crash. When I switched back to Swift 5 and tried it out, I was able to save without a crash. I did need to use an explicit save operation though. However, I am now getting 3 warnings like the following. Type 'ReferenceWritableKeyPath<MyModel, Optional>' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode The line of code that produced that warning is `let fetchDescriptor = FetchDescriptor(sortBy: [SortDescriptor(\MyModel.title)]) However, when I flip the switch back to Swift 6, the three warnings go away and I have zero warnings under Swift 6.
5
0
1.2k
Aug ’24
modelContext.fetchIdentifiers(descriptor) Errors when Using a SortDescriptor
modelContext.fetchIdentifiers(descriptor) errors when using a SortDescriptor to sort by a variable and returns no models. The fetch works fine without a SortDescriptor, thus FetchDescriptor<MyModel>() works fine, but FetchDescriptor<MyModel>(sortBy: [.init(\.title)]) or FetchDescriptor<MyModel>(sortBy: [SortDescriptor(\.title)]) errors with console message The operation couldn’t be completed. (SwiftData.SwiftDataError error 1.) I am using Xcode Version 16.0 beta 6 (16A5230g).
1
0
678
Aug ’24
Please Create a Sendable Version of CKRecord or Make CKRecord Sendable
CKRecord is a class which does not conform to the Sendable protocol. Its fields consist of NSStrings, NSData and others which are not Sendable. I understand that Apple is incrementally modifying objects to be sendable, but I am experiencing and I would assume others are experiencing a very large number of warnings (for now) about CKRecords and Sendable. It may be too much to make CKRecord Sendable and it may be too much to create a Sendable version of CKRecord, but it would be nice if it could at least be investigated. My particular situation is I have created a Protocol named CKMethods which some of my view controllers use to download and upload CKRecords. I suddenly have a large number of warnings about non-sendable types being sent from main actor-isolated context to non-isolated instance method. The CKRecords sent to and from the protocol do not get mutated and I have never had a problem with data races in the years that I have had this protocol. At some point, the warnings will probably become errors and I definitely do not want to get to that point. I am still coming up to speed on Swift Concurrency, so there may be a more simple solution than the one I am working on - creating a Sendable Struct for every CKRecord type that I have in my app and modifying all of the methods to pass the Struct instead of a CKRecord and convert the Struct to a CKRecord for upload and convert the CKRecord to the Struct for download.
3
1
1.9k
Jun ’24
SwiftData Predicate Issue
I'm in the process of converting one of my apps to SwiftData. I converted the other ones over. This app has a much more involved Schema, but SwiftData seems to handle it well. My issue is when I try to fetch data based on a. #Predicate. Here's my code. let predicate = #Predicate<Data> { data in data.result == result && data.variable!.starts(with: SomeString) } let sortBy = [SortDescriptor<Data>(\.result] let descriptor = FetchDescriptor<Data>(predicate: predicate, sortBy: sortBy) if let theData = try? context?.fetch(descriptor) { The if let at the bottom fails. Note that 'variable' is optional while result is not. I have to use ! in the predicate since it's a bool that is returned. If my predicate were just data.result == result, then all is well. I can then check the received data for the second condition in the predicate just fine. It just doesn't work inside of the Predicate. The same is true if I used contains. Anybody else having this issue? I'm using Xcode 15.0 beta 6.
3
1
2.1k
Aug ’23