Post

Replies

Boosts

Views

Activity

NSKeyedUnarchiver validateAllowedClass error
I get this error in Xcode 14 / iOS 16 on device that I had not with previous versions. [general] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSNumber' (0x205da88f8) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.objects', even though it was not explicitly included in the client allowed classes set: '{(     "'NSDictionary' (0x205da1178) [/System/Library/Frameworks/CoreFoundation.framework]",     "'NSString' (0x205da8948) [/System/Library/Frameworks/Foundation.framework]" )}'. This will be disallowed in the future. The only places where I reference NSDictionary.self or NSString.self or NSNumber.self for allowed classes are: @objc class MyClass : NSObject, NSSecureCoding {       required init(coder decoder: NSCoder) {        let myObject = decoder.decodeObject(of: [MyClass.self, NSNumber.self, NSArray.self, NSDictionary.self, NSString.self], forKey: myKey) as? [SomeClass] ?? []     } and in another class class Util { // in a class func:     let data = try Data(contentsOf: fileURL)     guard let unarchived = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSDictionary.self, from: data) else { return nil } I do not understand what NS.objects refers to. I tried to add NSObject.self in        let myObject = decoder.decodeObject(of: [MyClass.self, NSNumber.self, NSArray.self, NSDictionary.self, NSString.self, NSObject.self], forKey: myKey) as? [SomeClass] ?? [] but that gave even more warnings: [Foundation] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:]: NSSecureCoding allowed classes list contains [NSObject class], which bypasses security by allowing any Objective-C class to be implicitly decoded. Consider reducing the scope of allowed classes during decoding by listing only the classes you expect to decode, or a more specific base class than NSObject. This will become an error in the future. Allowed class list: {(     "'NSNumber' (0x205da88f8) [/System/Library/Frameworks/Foundation.framework]",     "'NSArray' (0x205da1240) [/System/Library/Frameworks/CoreFoundation.framework]",     "'NSObject' (0x205d8cb98) [/usr/lib]",     "'NSDictionary' (0x205da1178) [/System/Library/Frameworks/CoreFoundation.framework]",     "'MyClass.self' (0x1002f11a0) [/private/var/containers/Bundle/Application/5517240E-FB23-468D-80FA-B7E37D30936A/MyApp.app]",     "'NSString' (0x205da8948) [/System/Library/Frameworks/Foundation.framework]" Another warning refers to NS.keys: 2022-09-16 16:19:10.911977+0200 MyApp[4439:1970094] [general] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSString' (0x205da8948) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.keys', even though it was not explicitly included in the client allowed classes set: '{(     "'NSDictionary' (0x205da1178) [/System/Library/Frameworks/CoreFoundation.framework]" )}'. This will be disallowed in the future. I do not understand what NS.keys refers to. What additional class types should I add ?
4
2
4.8k
Sep ’22
Failed to install WatchOS 9.1 simulator runtime in Xcode 14.2
I installed Xcode 14.2 (in parallel with other versions of Xcode with different names) on MBP MacOS 12.6.2. Il works OK except when trying to use WatchOS simulator. When I select a WatchOS target and then look for simulator, none is installed. I get an item in menu proposing to GET 9.1. I downloaded. But at the end of download, installation failed with the message that installation of watchOS 9.1 simulator runtime failed in CoreSimulator. I tried the solution proposed here, to no avail. https://stackoverflow.com/questions/74096242/unable-to-select-device-for-watchos-app-in-xcode Note: installation on an iMac running 12.6.2 and Xcode 14.2 shows a long list of simulators:
1
0
1.8k
Dec ’22
Remote control for iPad from BLE device
I need to implement a remote control for a SwiftUI app running on iPad. I would need to handle 2 different events like Start / Stop. On software side, I plan to use .onReceive to listen to BLE device. So my questions: I need realtime reaction (a few 1/100 s max) can any BLE remote control do the job ? If anyone has tested some low cost remote, I am interested to know. Or should I look for Homekit solutions ? Or use an iPhone as remote controller ?
0
0
906
Dec ’22
Button behaviour changes if position(x:y)
With this code, button is at the center of the view and message is logged only when tapping in the button 1. struct ContentView: View { 2. var body: some View { 3. 4. ZStack { 5. Button(action: { 6. print("Touched") 7. }) { 8. Image(systemName: "square.split.diagonal.2x2") 9. .font(.system(size: 24)) 10. .foregroundColor(.black) 11. // .position(x: 12, y: 12) 12. } 13. 14. } 15. .frame(width: 300, height: 300) 16. .background(Color.yellow) 17. } 18. } But if I uncomment line 11, the message is logged on tap anywhere in the view. How is it position() changes the behaviour ?
3
0
1.1k
Dec ’22
ViewBuilder does not force View update
I use a ViewBuilder to generate the destination used in a NavigationSplitView (to select the detail View). This viewBuilder depends on a parameter (in fact 2, but I try to simplify). ViewBuilder is simple, just calls a View: @ViewBuilder func destination(object: SomeObject, name: String) -> some View { MyView(objToUse: object, nameToUse: name) } But this does not work. When I change the selection in the Master of the splitView, view is not updated (even though I've checked the content is updated. This si so simple that I started using directly MyView(objToUse: object, nameToUse: name) in the detail View. It did not work either. Now, here is the surprise: if I use a switch statement in the ViewBuilder, it works: Let's say we have: struct SomeContent: Hashable, Identifiable, Codable { var id = UUID() var name: String } struct Object : Hashable, Identifiable, Equatable, Codable { var id = UUID() var content: [SomeContent] = [] } So I define a func to get all the names func allNames(of object: SomeObject) -> [String] { var names : [String] = [] for o in object.content { names.append(o.name) } return names } And modify ViewBuilder as follows: it works @ViewBuilder func destination(object: SomeObject, name: String) -> some View { let names : [String] = allNames(of: object) switch name { case names[0]: MyView(objToUse: object, nameToUse: name) case names[1]: MyView(objToUse: object, nameToUse: name) case names[2]: MyView(objToUse: object, nameToUse: name) default: EmptyView() } It also works with nested if else if instead of a switch. What is it I am missing ?
2
0
930
Jan ’23
List issues with dynamic content
I have encountered the following problem with a List. The setup is as follows @State private var allItems : [SomeItem] @State private var selected   : SomeItem? // in the body List(allItems, $selection) { theItem in … } where SomeItem is a struct. When some properties of an item in allItems changes, the values that I read in theItem are not updated. Just as if old content was cached. I changed allItems to a computed var and everything works OK. I read this SO thread https://stackoverflow.com/questions/74083515/swiftui-list-item-not-updated-if-model-is-wrapped-in-state but that does not give a full explanation. So my questions: Is there effectively an issue here ? when is it safe to use a State var as the Content of List ? Is it OK (it seems) if the properties of items do not change ? It seems also OK if the list of allItems is modified (appended, reduced) without problem changing the properties of its elements. How to do if needed to change both allItems (append for instance) and change the properties of some items, as computed var cannot be modified. Hope the question is clear.
3
0
1.1k
Mar ’23
On daylight saving time change
Last night we change hour for daylight saving time (at 2:00 it would be 3:00). So I made a simple test to set an alarm at 2:10 At 1:59, clock jumped logically to 3:00 no alarm At 3:10, alarm rang (in fact I had turned it off and back on, but that has no influence) I set an alarm at 3:15, of course it rang I set a new alarm at 2:20 It rang at 3:20 Conclusion: Clock app "replicates" the alarms between 2:00 and 2:59 into 3:00 - 3:59. Which is great, not to miss any. Question: Is this specific to Clock app or a more general system behaviour for all time events ? If so, there may be a side effect: I set an event A to turn On a light at 2:45 And set event B to turn it Off at 3:15 Then B will occur before A and the light will remain On There is no perfect solution ("warping" 2:00 - 2:59 into a minute at 3:00 would creates other issues). Extra question: What happens on winter time ? Will alarm ring twice at 2:10 ?
0
0
2.3k
Mar ’23
Design pattern for scheduling simulation steps
I'm running a simulation (SwiftUI app), which has 100 steps. I need each step to be executed in order. A first try was to dispatch with delay to schedule each second: for step in 0..<100 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(step) * 1.0) { // simulation code } } Very poor results as 100 running threads are too much load for the system. So I split in 2 stages: for bigStep in 0..<10 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(bigStep) * 10.0 ) { for step in 0..<10 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(step) * 1.0) { // simulation code } } } } It works much better, as now there are a max of 20 threads active (in fact I create more levels to limit to a max of 8 concurrent threads). It addition, it allows to interrupt the simulation before end. My questions: is it the appropriate pattern ? Would a timer be better ? Other options ?
4
0
1.2k
May ’23
Dark mode switching modifies ObservedObject
This is a SwiftUI Mac App. There is an observable object with a published array class AllObjects : ObservableObject { @Published var theItems = [Item]() } In the View, observed with: @ObservedObject var allObjects : AllObjects Item class is : class Item: ObservableObject, Identifiable { let id = UUID() var placeNo = 1 // Other properties } When I switch dark / light mode within the app (with a toggle) @Environment(\.colorScheme) var colorScheme the ObservedObject allObjects is modified: array is emptied: allObjects.theItems is now an empty array. What could cause the change to theItems ? I have checked that the only func un which theItems is reset to [] is not called.
2
0
705
Apr ’23
NSKeyedUnarchiver validateAllowedClass error
I get this error in Xcode 14 / iOS 16 on device that I had not with previous versions. [general] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSNumber' (0x205da88f8) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.objects', even though it was not explicitly included in the client allowed classes set: '{(     "'NSDictionary' (0x205da1178) [/System/Library/Frameworks/CoreFoundation.framework]",     "'NSString' (0x205da8948) [/System/Library/Frameworks/Foundation.framework]" )}'. This will be disallowed in the future. The only places where I reference NSDictionary.self or NSString.self or NSNumber.self for allowed classes are: @objc class MyClass : NSObject, NSSecureCoding {       required init(coder decoder: NSCoder) {        let myObject = decoder.decodeObject(of: [MyClass.self, NSNumber.self, NSArray.self, NSDictionary.self, NSString.self], forKey: myKey) as? [SomeClass] ?? []     } and in another class class Util { // in a class func:     let data = try Data(contentsOf: fileURL)     guard let unarchived = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSDictionary.self, from: data) else { return nil } I do not understand what NS.objects refers to. I tried to add NSObject.self in        let myObject = decoder.decodeObject(of: [MyClass.self, NSNumber.self, NSArray.self, NSDictionary.self, NSString.self, NSObject.self], forKey: myKey) as? [SomeClass] ?? [] but that gave even more warnings: [Foundation] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:]: NSSecureCoding allowed classes list contains [NSObject class], which bypasses security by allowing any Objective-C class to be implicitly decoded. Consider reducing the scope of allowed classes during decoding by listing only the classes you expect to decode, or a more specific base class than NSObject. This will become an error in the future. Allowed class list: {(     "'NSNumber' (0x205da88f8) [/System/Library/Frameworks/Foundation.framework]",     "'NSArray' (0x205da1240) [/System/Library/Frameworks/CoreFoundation.framework]",     "'NSObject' (0x205d8cb98) [/usr/lib]",     "'NSDictionary' (0x205da1178) [/System/Library/Frameworks/CoreFoundation.framework]",     "'MyClass.self' (0x1002f11a0) [/private/var/containers/Bundle/Application/5517240E-FB23-468D-80FA-B7E37D30936A/MyApp.app]",     "'NSString' (0x205da8948) [/System/Library/Frameworks/Foundation.framework]" Another warning refers to NS.keys: 2022-09-16 16:19:10.911977+0200 MyApp[4439:1970094] [general] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSString' (0x205da8948) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.keys', even though it was not explicitly included in the client allowed classes set: '{(     "'NSDictionary' (0x205da1178) [/System/Library/Frameworks/CoreFoundation.framework]" )}'. This will be disallowed in the future. I do not understand what NS.keys refers to. What additional class types should I add ?
Replies
4
Boosts
2
Views
4.8k
Activity
Sep ’22
Random generator
Is there a difference in the distribution of results between those 2 forms ? let x = (1...9).randomElement()! let y = Int.random(in: 1...9) In doc, I never see the first form used
Replies
1
Boosts
0
Views
652
Activity
Nov ’22
Info.plist contained no UIScene configuration dictionary
In a SwiftUI project, I get the following runtime error: 2022-12-15 11:31:37.453318+0100 MyApp[7039:3585656] [SceneConfiguration] Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") There are no scene in the project: I have tried to change the settings, To no avail.
Replies
21
Boosts
16
Views
26k
Activity
Dec ’22
Failed to install WatchOS 9.1 simulator runtime in Xcode 14.2
I installed Xcode 14.2 (in parallel with other versions of Xcode with different names) on MBP MacOS 12.6.2. Il works OK except when trying to use WatchOS simulator. When I select a WatchOS target and then look for simulator, none is installed. I get an item in menu proposing to GET 9.1. I downloaded. But at the end of download, installation failed with the message that installation of watchOS 9.1 simulator runtime failed in CoreSimulator. I tried the solution proposed here, to no avail. https://stackoverflow.com/questions/74096242/unable-to-select-device-for-watchos-app-in-xcode Note: installation on an iMac running 12.6.2 and Xcode 14.2 shows a long list of simulators:
Replies
1
Boosts
0
Views
1.8k
Activity
Dec ’22
Remote control for iPad from BLE device
I need to implement a remote control for a SwiftUI app running on iPad. I would need to handle 2 different events like Start / Stop. On software side, I plan to use .onReceive to listen to BLE device. So my questions: I need realtime reaction (a few 1/100 s max) can any BLE remote control do the job ? If anyone has tested some low cost remote, I am interested to know. Or should I look for Homekit solutions ? Or use an iPhone as remote controller ?
Replies
0
Boosts
0
Views
906
Activity
Dec ’22
Button behaviour changes if position(x:y)
With this code, button is at the center of the view and message is logged only when tapping in the button 1. struct ContentView: View { 2. var body: some View { 3. 4. ZStack { 5. Button(action: { 6. print("Touched") 7. }) { 8. Image(systemName: "square.split.diagonal.2x2") 9. .font(.system(size: 24)) 10. .foregroundColor(.black) 11. // .position(x: 12, y: 12) 12. } 13. 14. } 15. .frame(width: 300, height: 300) 16. .background(Color.yellow) 17. } 18. } But if I uncomment line 11, the message is logged on tap anywhere in the view. How is it position() changes the behaviour ?
Replies
3
Boosts
0
Views
1.1k
Activity
Dec ’22
ViewBuilder does not force View update
I use a ViewBuilder to generate the destination used in a NavigationSplitView (to select the detail View). This viewBuilder depends on a parameter (in fact 2, but I try to simplify). ViewBuilder is simple, just calls a View: @ViewBuilder func destination(object: SomeObject, name: String) -> some View { MyView(objToUse: object, nameToUse: name) } But this does not work. When I change the selection in the Master of the splitView, view is not updated (even though I've checked the content is updated. This si so simple that I started using directly MyView(objToUse: object, nameToUse: name) in the detail View. It did not work either. Now, here is the surprise: if I use a switch statement in the ViewBuilder, it works: Let's say we have: struct SomeContent: Hashable, Identifiable, Codable { var id = UUID() var name: String } struct Object : Hashable, Identifiable, Equatable, Codable { var id = UUID() var content: [SomeContent] = [] } So I define a func to get all the names func allNames(of object: SomeObject) -> [String] { var names : [String] = [] for o in object.content { names.append(o.name) } return names } And modify ViewBuilder as follows: it works @ViewBuilder func destination(object: SomeObject, name: String) -> some View { let names : [String] = allNames(of: object) switch name { case names[0]: MyView(objToUse: object, nameToUse: name) case names[1]: MyView(objToUse: object, nameToUse: name) case names[2]: MyView(objToUse: object, nameToUse: name) default: EmptyView() } It also works with nested if else if instead of a switch. What is it I am missing ?
Replies
2
Boosts
0
Views
930
Activity
Jan ’23
List issues with dynamic content
I have encountered the following problem with a List. The setup is as follows @State private var allItems : [SomeItem] @State private var selected   : SomeItem? // in the body List(allItems, $selection) { theItem in … } where SomeItem is a struct. When some properties of an item in allItems changes, the values that I read in theItem are not updated. Just as if old content was cached. I changed allItems to a computed var and everything works OK. I read this SO thread https://stackoverflow.com/questions/74083515/swiftui-list-item-not-updated-if-model-is-wrapped-in-state but that does not give a full explanation. So my questions: Is there effectively an issue here ? when is it safe to use a State var as the Content of List ? Is it OK (it seems) if the properties of items do not change ? It seems also OK if the list of allItems is modified (appended, reduced) without problem changing the properties of its elements. How to do if needed to change both allItems (append for instance) and change the properties of some items, as computed var cannot be modified. Hope the question is clear.
Replies
3
Boosts
0
Views
1.1k
Activity
Mar ’23
Show / Hide navigation links at top of window
How do we switch on/off the display of lines at top of a window. It should be in Preferences, but I cannot find it.
Replies
1
Boosts
0
Views
768
Activity
Feb ’23
Question of curiosity: why different fonts in different forum sections ?
I noticed today that font has changed in some sections of this forum. 2 examples: in forums tag: https://developer.apple.com/forums/ font is apparently Times-Roman in Swift tag: https://developer.apple.com/forums/tags/swift font is apparently SFProText-Medium
Replies
8
Boosts
0
Views
1.5k
Activity
Feb ’23
Forum editor bug since last maintenance
Since the maintenance 2 days ago, it seems editor has issues. Is it only me ? Marking a text as quote does nothing. I mark this sentence as Quote to illustrate.
Replies
12
Boosts
0
Views
2.2k
Activity
Oct ’23
On daylight saving time change
Last night we change hour for daylight saving time (at 2:00 it would be 3:00). So I made a simple test to set an alarm at 2:10 At 1:59, clock jumped logically to 3:00 no alarm At 3:10, alarm rang (in fact I had turned it off and back on, but that has no influence) I set an alarm at 3:15, of course it rang I set a new alarm at 2:20 It rang at 3:20 Conclusion: Clock app "replicates" the alarms between 2:00 and 2:59 into 3:00 - 3:59. Which is great, not to miss any. Question: Is this specific to Clock app or a more general system behaviour for all time events ? If so, there may be a side effect: I set an event A to turn On a light at 2:45 And set event B to turn it Off at 3:15 Then B will occur before A and the light will remain On There is no perfect solution ("warping" 2:00 - 2:59 into a minute at 3:00 would creates other issues). Extra question: What happens on winter time ? Will alarm ring twice at 2:10 ?
Replies
0
Boosts
0
Views
2.3k
Activity
Mar ’23
Impossible to reply to some thread even not marked locked
I tried to reply to a post : https://developer.apple.com/forums/thread/728329 But clicking on Reply button does nothing. ANd the Reply section does not show. No issue to answer to other threads. Is it only me ?
Replies
8
Boosts
0
Views
1.5k
Activity
Apr ’23
Design pattern for scheduling simulation steps
I'm running a simulation (SwiftUI app), which has 100 steps. I need each step to be executed in order. A first try was to dispatch with delay to schedule each second: for step in 0..<100 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(step) * 1.0) { // simulation code } } Very poor results as 100 running threads are too much load for the system. So I split in 2 stages: for bigStep in 0..<10 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(bigStep) * 10.0 ) { for step in 0..<10 { DispatchQueue.main.asyncAfter(deadline: .now() + Double(step) * 1.0) { // simulation code } } } } It works much better, as now there are a max of 20 threads active (in fact I create more levels to limit to a max of 8 concurrent threads). It addition, it allows to interrupt the simulation before end. My questions: is it the appropriate pattern ? Would a timer be better ? Other options ?
Replies
4
Boosts
0
Views
1.2k
Activity
May ’23
Dark mode switching modifies ObservedObject
This is a SwiftUI Mac App. There is an observable object with a published array class AllObjects : ObservableObject { @Published var theItems = [Item]() } In the View, observed with: @ObservedObject var allObjects : AllObjects Item class is : class Item: ObservableObject, Identifiable { let id = UUID() var placeNo = 1 // Other properties } When I switch dark / light mode within the app (with a toggle) @Environment(\.colorScheme) var colorScheme the ObservedObject allObjects is modified: array is emptied: allObjects.theItems is now an empty array. What could cause the change to theItems ? I have checked that the only func un which theItems is reset to [] is not called.
Replies
2
Boosts
0
Views
705
Activity
Apr ’23