Observing UserDefaults on iOS 13

Hello there,

I stumbled on the issue of observing UserDefaults. My need is to "listening"/observing UD key named "com.apple.configuration.managed" which is responsible for reading provided MDM external plist. I checked that on the opened app it is possible to provide that plist, and app read this payload correctly.

My problem is to observing that change, when plist is uploading. Requirement is to support iOS 13, this is why I can't use AppStorage. Despite using some similar solutions like:

it still doesn't work.

My, I feel, the closest one solution was:

  @objc dynamic var mdmConfiguration: Dictionary<String, String> {
    get { (dictionary(forKey: MDM.ConfigurationPayloadKey) != nil) ? dictionary(forKey: MDM.ConfigurationPayloadKey)! as! Dictionary<String, String> : Dictionary<String, String>() }
    set { setValue(newValue, forKey: MDM.ConfigurationPayloadKey)}
  }
}


class MDMConfiguration: ObservableObject {
   
  //@Binding private var bindedValue: Bool
   
  @Published var configuration: Dictionary = UserDefaults.standard.mdmConfiguration {
    didSet {
      UserDefaults.standard.mdmConfiguration = configuration
    //  bindedValue.toggle()
    }
  }

  private var cancelable: AnyCancellable?
  init() {
 // init(toggle: Binding<Bool>) {
    //_bindedValue = toggle
    cancelable = UserDefaults.standard.publisher(for: \.mdmConfiguration)
      .sink(receiveValue: { [weak self] newValue in
        guard let self = self else { return }
        if newValue != self.configuration { // avoid cycling !!
          self.configuration = newValue
        }
      })
  }
}


struct ContentView: View {
   
  @State private var isConfigurationAvailable: Bool = false
  @State private var showLoadingIndicator: Bool = true
  @ObservedObject var configuration = MDMConfiguration()
   

  var body: some View {
     
    GeometryReader { geometry in
       
      let width = geometry.size.width
      let height = geometry.size.height
             
       
      VStack {
        Text("CONTENT -> \(configuration.configuration.debugDescription)").padding()
        Spacer()
        if !configuration.configuration.isEmpty {
          Text("AVAILABLE").padding()
        } else {
          Text("NIL NULL ZERO EMPTY")
            .padding()
        }
      }   
    }
  }
}

But it still doesn't ensure any changes in view, when I manually click on f.e. button, which prints the configuration in the console when it has uploaded, it does it well. Please help, my headache is reaching the zenith. I am a newbie in Swift development, maybe I did something weird and stupid. I hope so :D

Thank in advance!

Observing UserDefaults on iOS 13
 
 
Q