Displaying limited contacts list in UIKit

I have an app that was written in UIKit. It's too large, and it would be much too time consuming at this point to convert it to SwiftUI. I want to incorporate the new limited contacts into this app. The way it's currently written everything works fine except for showing the limited contacts in the contact picker. I have downloaded and gone though the Apple tutorial app but I'm having trouble thinking it through into UIKit. After a couple of hours I decided I need help. I understand I need to pull the contact IDs of the contacts that are in the limited contacts list. Not sure how to do that or how to get it to display in the picker. Any help would be greatly appreciated.

 func requestAccess(completionHandler: @escaping (_ accessGranted: Bool) -> Void)
    {
        switch CNContactStore.authorizationStatus(for: .contacts)
        {
        case .authorized:
            completionHandler(true)
        case .denied:
            showSettingsAlert(completionHandler)
        case .restricted, .notDetermined:
            CNContactStore().requestAccess(for: .contacts) { granted, error in
                if granted
                {
                    completionHandler(true)
                } else {
                    DispatchQueue.main.async { [weak self] in
                        self?.showSettingsAlert(completionHandler)
                    }
                }
            }
            // iOS 18 only
        case .limited:
            completionHandler(true)
        @unknown default: break
        }
    }

// A text field that displays the name of the chosen contact
 @IBAction func contact_Fld_Tapped(_ sender: TextField_Designable)
    {
        sender.resignFirstResponder()
        // The contact ID that is saved to the Db
        getTheCurrentContactID()

        let theAlert = UIAlertController(title: K.Titles.chooseAContact, message: nil, preferredStyle: .actionSheet)

        // Create a new contact
        let addContact = UIAlertAction(title: K.Titles.newContact, style: .default) { [weak self] _ in
            self?.requestAccess { _ in
                let openContact = CNContact()
                let vc = CNContactViewController(forNewContact: openContact)
                vc.delegate = self // this delegate CNContactViewControllerDelegate
                DispatchQueue.main.async {
                    self?.present(UINavigationController(rootViewController: vc), animated: true)
                }
            }
        }

        let getContact = UIAlertAction(title: K.Titles.fromContacts, style: .default) { [weak self] _ in
            self?.requestAccess { _ in
                self?.contactPicker.delegate = self
                DispatchQueue.main.async {
                    self?.present(self!.contactPicker, animated: true)
                }
            }
        }

        let editBtn = UIAlertAction(title: K.Titles.editContact, style: .default) { [weak self] _ in
            self?.requestAccess { _ in
                let store = CNContactStore()
                var vc = CNContactViewController()
                do {
                    let descriptor = CNContactViewController.descriptorForRequiredKeys()
                    let editContact = try store.unifiedContact(withIdentifier: self!.oldContactID, keysToFetch: [descriptor])
                    vc = CNContactViewController(for: editContact)
                } catch {
                    print("Getting contact to edit failed: \(self!.VC_String) \(error)")
                }

                vc.delegate = self // delegate for CNContactViewControllerDelegate
                self?.navigationController?.isNavigationBarHidden = false
                self?.navigationController?.navigationItem.hidesBackButton = false
                self?.navigationController?.pushViewController(vc, animated: true)
            }
        }
        let cancel = UIAlertAction(title: K.Titles.cancel, style: .cancel) { _ in }
        if oldContactID.isEmpty
        {
            editBtn.isEnabled = false
        }
        theAlert.addAction(getContact) // Select from contacts
        theAlert.addAction(addContact) // Create new contact
        theAlert.addAction(editBtn) // Edit this contact
        theAlert.addAction(cancel)

        let popOver = theAlert.popoverPresentationController
        popOver?.sourceView = sender
        popOver?.sourceRect = sender.bounds
        popOver?.permittedArrowDirections = .any
        present(theAlert,animated: true)
    }

func requestAccess(completionHandler: @escaping (_ accessGranted: Bool) -> Void)
    {
        switch CNContactStore.authorizationStatus(for: .contacts)
        {
        case .authorized:
            completionHandler(true)
        case .denied:
            showSettingsAlert(completionHandler)
        case .restricted, .notDetermined:
            CNContactStore().requestAccess(for: .contacts) { granted, error in
                if granted
                {
                    completionHandler(true)
                } else {
                    DispatchQueue.main.async { [weak self] in
                        self?.showSettingsAlert(completionHandler)
                    }
                }
            }
            // iOS 18 only
        case .limited:
            completionHandler(true)
        @unknown default: break
        }
    }

// MARK: - Contact Picker Delegate
extension AddEdit_Quote_VC: CNContactPickerDelegate
{
    func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact)
    {
        selectedContactID = contact.identifier
        let company: String = contact.organizationName
        let companyText = company == "" ? K.Titles.noCompanyName : contact.organizationName
        contactNameFld_Outlet.text = CNContactFormatter.string(from: contact, style: .fullName)!
        companyFld_Outlet.text = companyText
        save_Array[0] = K.AppFacing.true_App
        setSaveBtn_AEQuote()
    }
}

extension AddEdit_Quote_VC: CNContactViewControllerDelegate
{
    func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool
    {
        return false
    }

    func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?)
    {
        selectedContactID = contact?.identifier ?? ""

        if selectedContactID != ""
        {
            let company: String = contact?.organizationName ?? ""
            let companyText = company == "" ? K.Titles.noCompanyName : contact!.organizationName

            contactNameFld_Outlet.text = CNContactFormatter.string(from: contact!, style: .fullName)
            companyFld_Outlet.text = companyText

            getTheCurrentContactID()
            if selectedContactID != oldContactID
            {
                save_Array[0] = K.AppFacing.true_App
                setSaveBtn_AEQuote()
            }
        }

        dismiss(animated: true, completion: nil)
    }
}

The CNContactPickerViewController class displays all contacts and doesn't require prompting the user for authorization. When your app has .limited authorization, use the contact access picker to manage which contacts your app can access. To learn when to use each of these pickers, see 2024 WWDC Meet the Contact Access Button starting at 10:57.

Displaying limited contacts list in UIKit
 
 
Q