Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Live Activity Dissappearing
Hello, I am experiencing an issue with the Live Activity feature in my application. Despite extensive debugging efforts, the problem persists, and I would greatly appreciate your assistance. Here are the key details of the issue: We are not using APNS; everything related to Live Activities is handled locally within the app. The Live Activity displays task details, including: Task title, icon and A label functioning as a timer that shows the remaining time in seconds for the task. The Live Activity appears as expected when the app is opened. However, when the app is sent to the background, the Live Activity does not appear consistently. It disappears unexpectedly in some random instances. I have tried various debugging methods, including: Ensuring the activity is correctly created and updated as per the Apple Documentation. Verifying the ActivityAttributes and ActivityContentState configurations. Testing with different app lifecycle events to determine when the issue occurs. Despite these efforts, the issue remains unresolved, and the cause is unclear. The app behavior seems inconsistent, as the Live Activity sometimes remains visible and at other times disappears when the app is backgrounded. I would greatly appreciate your help in understanding and addressing this issue. Specifically: Are there any system-level constraints or conditions that could cause a Live Activity to terminate when the app is backgrounded? Are there best practices or configurations to ensure the persistence of locally managed Live Activities? Can you suggest additional debugging techniques or tools that could help identify the root cause? Thank you for your time and support. Please let me know if further information or logs are needed to assist in troubleshooting STEPS TO REPRODUCE Download and Install the Owaves App from the App Store. Create a Live Activity: Open the app and create an activity for the current time on Today. Example: If the current time is 9:30 AM, create an activity with a time range such as 9:00 AM - 10:00 AM to ensure it is live. Enable Live Activity: Tap on the newly created activity to open the Event Details page. Scroll to the bottom of the page and locate the toggle switch labeled "Live Activity". Switch the toggle to the ON position to enable the Live Activity. Background the App: Send the app to the background. Check the Lock Screen: Swipe down to enable iOS' Lock Screen and check for the Live Activity from the Owaves app. Repeat the Steps: If the Live Activity appears on the Lock Screen initially, repeat steps 3-5 multiple times. Eventually, you will encounter instances where the Live Activity does not appear on the Lock Screen, despite following the same process
2
0
634
Dec ’24
FamilyActivitySelection sharing between device in Family Sharing Network
I'm working with the FamilyControls API and am running into an issue with sharing ActivityTokens between devices in the same family sharing network. Based on this documentation, ActivityTokens are only accessible and readable by other members in the family sharing network. My app is based on the idea that if one user selects the Games category in the FamilyActivityPicker, then this token can be shared with another device in the same family-sharing network and this other device can read and display the category. So my question is: If a user in the network selects an activity category in the FamilyActivityPicker, can this category token be shared, read, and used by another user in the family-sharing network?
1
0
400
Dec ’24
IOS 18 Crash
When My App Star, It will crash. X Code logs is: {"app_name":"BuildGuard","timestamp":"2024-12-03 10:47:35.00 +0800","app_version":"3.8.2","slice_uuid":"6a885ed1-0141-3b69-bca8-4f746e88c1d6","build_version":"1","platform":"2","bundleID":"com.BuildGuard.freedo","share_with_app_devs":"0","is_first_party":"0","bug_type":"309","os_version":"iPhone OS 18.1.1 (22B91)","roots_installed":"0","name":"BuildGuard","incident_id":"E2CB5DD7-99D8-4EB9-AA48-F72B5BEF9023"} { "uptime": 3500, "procRole": "Foreground", "version": 2, "userID": 501, "deployVersion": 210, "modelCode": "iPhone14,5", "coalitionID": 950, "osVersion": { "isEmbedded": true, "train": "iPhone OS 18.1.1", "releaseType": "User", "build": "22B91" }, "captureTime": "2024-12-03 10:47:34.2708 +0800", "codeSigningMonitor": 2, "incident": "E2CB5DD7-99D8-4EB9-AA48-F72B5BEF9023", "pid": 729, "translated": false, "cpuType": "ARM-64", "roots_installed": 0, "bug_type": "309", "procLaunch": "2024-12-03 10:47:34.0445 +0800", "procStartAbsTime": 85384647991, "procExitAbsTime": 85390036612, "procName": "BuildGuard", "procPath": "/private/var/containers/Bundle/Application/B2FAEAFF-EA32-4431-81B4-70BCF7D6CB70/BuildGuard.app/BuildGuard", "bundleInfo": { "CFBundleShortVersionString": "3.8.2", "CFBundleVersion": "1", "CFBundleIdentifier": "com.BuildGuard.freedo" }, "storeInfo": { "deviceIdentifierForVendor": "A54E5EC2-AB9E-4A54-A011-7465DA2A1F29", "thirdParty": true }, "parentProc": "launchd", "parentPid": 1, "coalitionName": "com.BuildGuard.freedo", "crashReporterKey": "94df86a1cd449259b3b4d4bd07e6eae5fcd189f9", "appleIntelligenceStatus": { "reasons": [ "assetIsNotReady", "countryLocationIneligible", "notOptedIn", "selectedLanguageIneligible", "regionIneligible", "deviceNotCapable", "accessNotGranted", "siriAssetIsNotReady", "selectedSiriLanguageIneligible" ], "state": "unavailable" }, "wasUnlockedSinceBoot": 1, "isLocked": 0, "codeSigningID": "com.BuildGuard.freedo", "codeSigningTeamID": "MV84352VU6", "codeSigningFlags": 570434309, "codeSigningValidationCategory": 3, "codeSigningTrustLevel": 4, "instructionByteStream": { "beforePC": "fyMD1f17v6n9AwCRPOz/l78DAJH9e8Go/w9f1sADX9YQKYDSARAA1A==", "atPC": "AwEAVH8jA9X9e7+p/QMAkTHs/5e/AwCR/XvBqP8PX9bAA1/WECeA0g==" }, "bootSessionUUID": "0C44CFFB-9C67-4F70-AB62-19AEEEA2D0F0", "basebandVersion": "4.10.02", "exception": { "codes": "0x0000000000000000, 0x0000000000000000", "rawCodes": [ 0, 0 ], "type": "EXC_CRASH", "signal": "SIGABRT" }, "termination": { "flags": 0, "code": 6, "namespace": "SIGNAL", "indicator": "Abort trap: 6", "byProc": "BuildGuard", "byPid": 729 }, "asi": { "libsystem_c.dylib": [ "abort() called" ] }, "exceptionReason": { "arguments": [ "__NSCFConstantString", "_accessibilitySetFrameExpansion:", "0x10c2e4460" ], "format_string": "-[%s %s]: unrecognized selector sent to instance %p", "name": "NSInvalidArgumentException", "type": "objc-exception", "composed_message": "-[__NSCFConstantString _accessibilitySetFrameExpansion:]: unrecognized selector sent to instance 0x10c2e4460", "class": "NSException" }, "lastExceptionBacktrace": [ { "imageOffset": 534476, "symbol": "__exceptionPreprocess", "symbolLocation": 164, "imageIndex": 10 }, { "imageOffset": 94948, "symbol": "objc_exception_throw", "symbolLocation": 87, "imageIndex": 7 },
1
0
1.2k
Dec ’24
Testing app intents and forcing Shortcuts app to refresh
The Verify the behavior of your intent in Simulator or on-device documentation says that it's sufficient to build and run the app and open the Shortcuts app to test an app intent, but that doesn't seem to be the case. I always needed to at least move the debugged app to the Applications folder before the app intents showed up in Shortcuts, and even then, most of the times I also need to wait a lot or restart the Mac. When updating an existing app intent (for instance by changing its title), building the app, overwriting the existing one in the Applications folder and restarting Shortcuts is not sufficient to make the new title appear in Shortcuts. Is there an efficient way to test app intents in the Shortcuts app? I already created FB15638502 one month ago but got no response.
0
0
392
Dec ’24
Search Ads Basic?
Does anyone have any luck getting Search Ads Basic to work? Since I released my app, I've attempted to get a campaign going. This was months ago. It occasionally spends a little. Each time, well under my max. It usually sits at zero. I try raising the max and raising the budget and it will show a little activity then stop again. What is the trick? There doesn't seem to be very many things to change. 90 countries, max CPI way higher than the average when it does spend, trying a $1500 budget. It's like it's glitched out.
2
0
516
Dec ’24
DeviceActivityCenter.startMonitoring occasionally crash in the morning
When I use the screen time API, the app occasionally crashes in the morning. I mean the UI freeze lasts for more than ten seconds. But the weird thing is that I work normally during the day, that is, in the morning, when I just woke up. (There is no Do Not Disturb mode). This problem has been bothering me for several days, please help. The specific crash log is as follows, and the specific code is as follows. Model: iPhone 15 Pro, iOS: 18.1.1 Thanks for your help! Code: private func startAppMonitoring(application: ApplicationToken, seconds: Int, isFromNow: Bool) { let schedule = DeviceActivitySchedule( intervalStart: isFromNow ? Calendar.current.dateComponents([.hour, .minute, .second], from: Date()) : DateComponents(timeZone: TimeZone(identifier:TimeZone.current.identifier), hour: 0, minute: 0, second: 0), intervalEnd: DateComponents(timeZone: TimeZone(identifier:TimeZone.current.identifier), hour: 23, minute: 58, second: 59), repeats: true, warningTime: DateComponents(minute: 1) ) let event = DeviceActivityEvent( applications: Set([application]), threshold: DateComponents(second: seconds) ) let center = DeviceActivityCenter() do { try center.startMonitoring(DeviceActivityName("\(application.hashValue)Usage"), during: schedule, events: [DeviceActivityEvent.Name("\(application.hashValue)Event"): event]) } catch { print("Error starting monitoring schedule: \(error)") } } Crash report:
2
0
499
Dec ’24
Contacts: remove member from group not working on macOS
Hi, In my app, I have an option to remove a contact from a contact group (using the Contacts framework), and it's been working fine till recently users of the macOS version reported that it's not working. I have been using the CNSaveRequest removeMember(contact, from: group) API. The same API works fine on iOS. I'm not sure when it started but it seems to be affecting macOS14.6 as well as 15.1. I was able to reproduce it in a small test project as well, and have the same experience (the API works on iOS but not on macOS), so it definitely seems like a problem with the framework. Can someone confirm this, and/or suggest a workaround? Here's the code I run to test it out ...a simple SwiftUI view that has 4 buttons: Create contact and group Add contact to group Remove contact from group (optional) cleanup by deleting contact and group It's the 3rd step that seems to fail on macOS, but works fine on iOS. Here's the code to test it out: struct ContentView: View { let contactsModel = ContactsStoreModel() var body: some View { VStack (alignment: .center, spacing: 15){ Button ("1. Add Contact And Group") { print("add contact button pressed") contactsModel.addTestContact() if let _ = contactsModel.createdContact { print("created contact success") } } Button ("2. Add Contact To Group") { print("add to group button pressed") contactsModel.addContactToGroup() } Button ("3. Remove Contact From Group") { print("remove from group button pressed") contactsModel.removeContactFromGroup() } Button ("4. Delete Contact and Group") { print("remove from group button pressed") contactsModel.deleteContactAndGroup() } } .padding() } } #Preview { ContentView() } @available(iOS 13.0, *) @objc final class ContactsStoreModel: NSObject, ObservableObject { let contactStore = CNContactStore() var createdContact : CNContact? var createdGroup : CNGroup? public func addTestContact() { let storeContainer = contactStore.defaultContainerIdentifier() let contact = CNMutableContact() contact.givenName = "Testing" contact.familyName = "User" contact.phoneNumbers = [CNLabeledValue(label: "Cell", value: CNPhoneNumber(stringValue: "1234567890"))] let group = CNMutableGroup() group.name = "Testing Group" print("create contact id = \(contact.identifier)") print("create group id = \(group.identifier)") do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.add(contact, toContainerWithIdentifier: storeContainer) saveRequest.add(group, toContainerWithIdentifier: storeContainer) try contactStore.execute(saveRequest) createdContact = contact createdGroup = group } catch { print("error in store execute = \(error)") } } public func addContactToGroup() { if let contact = createdContact, let group = createdGroup { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.addMember(contact, to: group) try contactStore.execute(saveRequest) } catch { print("error in store execute = \(error)") } } } public func removeContactFromGroup() { if let contact = createdContact, let group = createdGroup { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.removeMember(contact, from: group) try contactStore.execute(saveRequest) } catch { print("error in store execute = \(error)") } } } public func addGroupAndContact() { let storeContainer = contactStore.defaultContainerIdentifier() let group = CNMutableGroup() group.name = "Test Group" print("create group id = \(group.identifier)") if let contact = createdContact { do { let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.add(group, toContainerWithIdentifier: storeContainer) saveRequest.addMember(contact, to: group) try contactStore.execute(saveRequest) createdGroup = group } catch { print("error in store execute = \(error)") } } } public func deleteContactAndGroup() { if let contact = createdContact, let group = createdGroup { do { let mutableGroup = group.mutableCopy() as! CNMutableGroup let mutableContact = contact.mutableCopy() as! CNMutableContact let saveRequest = CNSaveRequest() saveRequest.transactionAuthor = "TestApp" saveRequest.delete(mutableContact) saveRequest.delete(mutableGroup) try contactStore.execute(saveRequest) } catch { print("error in deleting store execute = \(error)") } } } }
2
0
556
Dec ’24
EKEventStore on Apple Watch not showing all calendars
I have released a watchOS-specific application that retrieves data from the iPhone calendar app and displays it on the Apple Watch. It uses the calendars function in EKEventStore to retrieve the list of calendars, but it seems that it sometimes fails to retrieve iCloud calendars. Trouble is, this problem only occurs in a very few users‘ environments, the majority of other users’ environments are able to retrieve them without any problems, and I cannot reproduce it at all in my environment. Local calendars and Google calendars seem to be retrieved without any problems. Minimal example code: import SwiftUI import EventKit struct ContentView: View { let eventStore = EKEventStore() @State var success: Bool = false @State var calendarNames: [String] = [String]() func request() async { success = (try? await eventStore.requestFullAccessToEvents()) ?? false } func list() { calendarNames = eventStore.calendars(for: .event).map { $0.title } } var body: some View { VStack { Image(systemName: "globe") .imageScale(.large) .foregroundStyle(.tint) Text("Access: \(success.description)") ScrollView { ForEach(calendarNames, id: \.self) { name in Text(name) } } } .onAppear { Task { await request() list() } } .padding() } } I asked the user experiencing the problem to try restarting the iPhone and Apple Watch, reinstalling the app and re-pairing them, but there was no change. I would appreciate any information you can provide. Best regards.
1
0
455
Dec ’24
Speech Recognizer Clears Transcription After Pause on iOS 18.0
Description: I have encountered an issue with SFSpeechRecognizer on iOS 18.0. During live dictation, if a natural pause (e.g., 1-2 seconds) is introduced, the previously transcribed text is cleared, and the transcription starts over. This behavior makes it difficult to use the API for real-time speech recognition scenarios where pauses are expected. Steps to Reproduce: Open Apple's demo app "SpokenWord". Start the dictation process using SFSpeechRecognizer. Speak a few words, pause for 1-2 seconds, and then continue speaking. Observe that the previously transcribed text is truncated, and the transcription starts anew. Expected Behavior: The transcription should continue appending new results to the previous ones after a natural pause, maintaining a seamless user experience. Observed Behavior: After a pause, the transcription resets, clearing previously transcribed text. Impact: This behavior makes the SFSpeechRecognizer API unreliable for scenarios requiring continuous speech recognition with intermittent pauses. Additional Information: iOS Version: 18.0 Device: [Specify your device, e.g., iPhone 13 Pro] Speech Recognizer Locale: [Specify locale, e.g., en-US] App Behavior: Issue persists in both Apple's demo app ('SpokenWord') and custom implementations.
1
0
630
Dec ’24
Crash in QLPreviewController on iOS18.1 +
We found some Firebase crashes in QLPreviewController on iOS18.1 +. It shows cash info in QLPreviewController that we haven't changed for some years. Please help with this. Thanks in advance. // stack info from Firebase Fatal Exception: NSInvalidArgumentException *** -[NSURL URLByAppendingPathComponent:]: component, components, or pathExtension cannot be nil. 0 CoreFoundation __exceptionPreprocess 1 libobjc.A.dylib objc_exception_throw 2 Foundation -[NSURL(NSURLPathUtilities) URLByAppendingPathComponent:] 3 QuickLookUICore +[NSURL(_QL_Utilities) _QLTemporaryFileURLWithType:filename:] 4 QuickLookUICore +[NSURL(_QL_Utilities) _QLTemporaryFileURLWithType:uuid:] 5 QuickLook -[QLPreviewController(ScreenshotsSupport) screenshotService:generatePDFRepresentationWithCompletion:] 6 ScreenshotServices __82+[SSScreenshotMetadataHarvester _grabPDFRepresentationForIdentifier:withCallback:]_block_invoke_3 7 libdispatch.dylib _dispatch_call_block_and_release 8 libdispatch.dylib _dispatch_client_callout 9 libdispatch.dylib _dispatch_main_queue_drain 10 libdispatch.dylib _dispatch_main_queue_callback_4CF 11 CoreFoundation __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ 12 CoreFoundation __CFRunLoopRun 13 CoreFoundation CFRunLoopRunSpecific 14 GraphicsServices GSEventRunModal 15 UIKitCore -[UIApplication _run] 16 UIKitCore UIApplicationMain 17 Glip main.swift - Line 13 main + 13
1
0
768
Dec ’24
How to implement continuous speech recognition in the background?
Hi, I'd like to develop an app which runs speech recognition even after going into background. I know I can accomplish this using audio background mode and the process the audio but I am not sure if this workaround would get accepted into App Store because of the processing limitations while in the background. How can I accomplish this while still being compliant with Apples privacy policy and other restrictions? Thanks, Marek
0
0
475
Dec ’24
Why does a text filter extension receive the ISO Country Code, but not the text server?
The documentation for a text filter extension states that receiverISOCountryCode is a field the extension receives https://developer.apple.com/documentation/sms_and_call_reporting/ilmessagefilterqueryrequest/3979257-receiverisocountrycode "The ISO Country Code of the receiving phone number" However, if the extension defers to its text server, then the payload sent to the server doesn't contain the iso country code: POST /server-endpoint HTTP/1.1 Accept: */* Content-Type: application/json; charset=utf-8 Content-Length: 148 { "_version": 1, "query": { "sender": "14085550001", "message": { "text": "This is a message" } }, "app": { "version": "1.1" } } from: https://developer.apple.com/documentation/sms_and_call_reporting/ilmessagefilterextensioncontext/2880240-deferqueryrequesttonetwork Why does the payload sent to the text server not contain the country code?
2
0
371
Dec ’24
Family Controls Issues with Multiple Functionalities
I am developing an application that utilizes Family Controls to restrict the use of certain apps. Currently, I am using the following extensions: DeviceActivityMonitor, ShieldConfiguration, and ShieldAction. Issue Overview: While blocking a single application functions correctly, a problem arises when implementing multiple functionalities that use these extensions for the same application. STEPS TO REPRODUCE Functionality 1: Maximum Time in App Description: Blocks the app after 15 minutes of continuous use. Functionality 2: Conscious Opening Description: Upon opening the app, it is blocked for 10 seconds and then automatically unlocked. Steps to Reproduce the Bug: Open the Application: The app opens normally. Trigger Functionality 2 The app is blocked and displays the blocking screen corresponding to Functionality 2: Conscious Opening. Continue Using the App After 10 seconds, the app unlocks, and I continue using it. Important: If the app is closed at this point, the bug does not occur. Trigger Functionality 1 After 15 Minutes After 15 minutes of continuous use, the app should block according to Functionality 1: Maximum Time in App. Expected Behavior: The blocking screen for Functionality 1 is displayed. Actual Behavior: The blocking screen for Functionality 2 is displayed instead. Technical Observations: By adding logs in ShieldConfiguration, I observed that the configuration does not refresh correctly when the app is blocked a second time while still in use. If the app is closed and reopened, the correct blocking screen for Functionality 1 is displayed as expected.
0
0
280
Dec ’24
Intents not showing up in WatchOS Shortcuts
I have developed a standalone WatchOS app which runs a stopwatch. I want to develop a shortcut that launches the stopwatch. So far I have created the Intent file, and added the basic code (shown below) but the intent doesn't show in the shortcuts app. In the build, I can see the intent metadata is extracted, so it can see it, but for some reason it doesn't show in the watch. I downloaded Apple's demo Intent app and the intents show in the watch there. The only obvious difference is that the Apple app is developed as an iOS app with a WatchOS companion, whereas mine is standalone. Can anyone point me to where I should look for an indicator of the problem? Many thanks! // // StartStopwatch.swift // LapStopWatchMaster import AppIntents import Foundation struct StartStopWatchAppIntent: AppIntent { static let title: LocalizedStringResource = "Start Stopwatch" static let description = IntentDescription("Starts the stopwatch and subsequently triggers a lap.") static let openAppWhenRun: Bool = true @MainActor func perform() async throws -> some IntentResult { // Implement your app logic here return .result(value: "Started stopwatch.") } }
3
0
530
Dec ’24
What security is there for associated domains specified in an app?
Hello, if an associated domain is specified for an app (for example, the url of a server services an app extension text spam filtering) then what is there in place to stop somebody with malicious intentions from obtaining that url from the .plist/.entitlements file of the app and doing something with that url, such as denial of service attack or whatever?
3
0
411
Dec ’24
Provisioning profile doesn't support Family Controls (Development)
When I attempt to distribute my app in Xcode, I get the following error: Can I resolve the above error by applying for permissions? I learned from this thread that the above application was not approved by email. How can I know whether the application was approved? In addition, from this thread, the review process may take several weeks or even 5 months. Considering that public holiday is coming, how can I speed up this process? ( I have submitted my application) Thank you
1
0
444
Dec ’24
Trouble decoding array objects via NSKeyedArchiver / NSSecureCoding
Hiya 👋! While loading some data, I'm having issues decoding arrays of basic types, specifically Int and Bool – they return nil. My app has existing data (live on the App Store for years) that is saved and loaded using NSKeyedArchiver. I'm updating to support a newer iOS version, which requires me now to adhere to NSSecureCoding. As I understand, NSSecureCoding needs strict type definitions, and it will return nil if things are ambiguous (for security reasons). Essentially as I load data, it all works when I use strict types, like Int and Bool, because the methods themselves are strict: decodeInteger(forKey:) and decodeBool(forKey:). However, if I want to decode something more complex, like NSDate or basic type arrays (in my case [Int], [[[Int]]], [Bool] and [[Bool]]), I assume I have to decode an object: decodeObject(of:forKey:). While I was able to make NSDate work by forcing the type (decodeObject(of: NSDate.self, forKey: "modifyDate")! as Date), getting arrays to decode is proving difficult. They always return nil. I've now tried forcing the type to different arrays, including NSArray, and listing array types. I also tried decodeArrayOfObjects(ofClass:forKey:), but no luck. Example: Here are some data items I might have: var id: Int? var isModified: Bool? var modifyDate: Date? var myIntegers: [Int]? var myEmbedIntegers: [[[Int]]]? var myBooleans: [Bool]? var myEmbedBooleans: [[Bool]]? Here's how I encode them: encode(id!, forKey: "id") encode(isModified!, forKey: "isModified") encode(modifyDate!, forKey: "modifyDate") encode(myIntegers!, forKey: "myIntegers") encode(myEmbedIntegers!, forKey: "myEmbedIntegers") encode(myBooleans!, forKey: "myBooleans") encode(myEmbedBooleans!, forKey: "myEmbedBooleans") This is how Int, Bool and Date are apparently successfully decoded (where Date is forced to search for NSDate type): decodeInteger(forKey: "id") decodeBool(forKey: "isModified") decodeObject(of: NSDate.self, forKey: "modifyDate")! as Date Here are attempts with Int (same with Bool) arrays, which are erroneously decoded (these all either get compiler errors or return nil): decodeObject(forKey: "myIntegers") as! [Int] // This used to work before NSSecureCoding, but now returns nil. decodeObject(of: [NSArray.self], forKey: "myIntegers") as! [Int] // Returns nil. decodeObject(of: [Int.self], forKey: "myIntegers") // Compiler error about value type conversion. decodeArrayOfObjects(ofClass: Int.self, forKey: "myIntegers") // Compiler error complaining that Int doesn't conform to NSSecureCoding. decodeArrayOfObjects(ofClass: NSArray.self, forKey: "myIntegers") as! [Int] // Returns nil. The funny thing is I don't even remotely need security. My data is for song compositions in an entertainment app, so it's strictly loaded and saved to device by my own code without networking, hashing or anything else being involved. Nevertheless I'm now stuck on this 😥. How do I decode arrays (without returning nil)?
4
0
464
Dec ’24