Swift - Dados da imagem do código QR da CIImage / Como renderizar saída CIFilter

Estou com esse problema há algum tempo e olhei para dezenas de respostas aqui e parece que não consigo encontrar nada que ajude.

Cenário

Estou gerando um QR Code no lado iOS do meu aplicativo e quero que esse código QR seja enviado para a extensão WatchKit que estou desenvolvendo no momento.

Como eu estou gerando o QR Code
func createQR(with string: String) {

    if let filter = CIFilter(name: "CIQRCodeGenerator") {

        //set the data to the contact data
        filter.setValue(string, forKey: "inputMessage")
        filter.setValue("L", forKey: "inputCorrectionLevel")

        if let codeImage = filter.outputImage {
            return UIImage(ciImage: codeImage);
        }
    }
}
O que eu quero a seguir

Desejo obter os dados da imagem QR para poder enviá-los ao aplicativo Apple Watch, da seguinte forma:

let data = UIImagePNGRepresentation(QRCodeImage);

Mas, Isso sempre retornanil porque não há dados de imagem que apóiam a saída do filtro.

Nota: Eu sei que não há dados associados à imagem do IC porque ela não foi renderizada e nem tem dados associados a ela, porque é apenas a saída do filtro.Não sei como contornar isso porque eu sou muito novo no processamento de imagens e tal. : /

O que eu tenteiCriando umcgImage defilter.outputImage
func createQR(with string: String) {
    if let filter = CIFilter(name: "CIQRCodeGenerator") {

        //set the data to the contact data
        filter.setValue(contactData, forKey: "inputMessage")
        filter.setValue("L", forKey: "inputCorrectionLevel")

        if let codeImage = filter.outputImage {
            let context = CIContext(options: nil)
            if let cgImage = context.createCGImage(codeImage, from: codeImage.extent) {
                self.QRCode = UIImage(cgImage: cgImage)
            }
        }
    }
}

Mas isso não funciona, não parece, porque a imagem na exibição está em branco.

Criando uma CIImage em branco como imagem de entrada
func update(with string: String) {
    let blankCiImage = CIImage(color: .white) //This probably isn't right...
    if let filter = CIFilter(name: "CIQRCodeGenerator") {

        filter.setValue(contactData, forKey: "inputMessage")
        filter.setValue("L", forKey: "inputCorrectionLevel")
        filter.setValue(blankCiImage, forKey: kCIInputImageKey)

        if let codeImage = filter.outputImage {
            let context = CIContext(options: nil)
            if let cgImage = context.createCGImage(codeImage, from: codeImage.extent) {
                self.contactCode = UIImage(cgImage: cgImage)
                print(self.contactCode!)
                print(UIImagePNGRepresentation(self.contactCode!))
            }
        }
    }
}

Isso também não funciona - meu pensamento era adicionar uma imagem em branco a ela e depois fazer o filtro em cima dela, mas provavelmente não estou fazendo isso corretamente.

Meu gol

Literalmente, só paraobtenha os dados do QR Code gerado. A maioria dos tópicos sugereUIImage(ciImage: output) , mas isso não possui dados de backup.

Se alguém pudesse me ajudar com isso, seria ótimo. E qualquer explicação sobre como funciona também seria maravilhosa.

Editar: Não acredito que seja o mesmo que a duplicata marcada - A duplicata marcada é sobre a edição de uma imagem existente usando filtros de IC e a obtenção desses dados, e trata-se de uma imagem criada exclusivamente através do filtro de CI sem imagem de entrada - QR Codes . a outra resposta não estava totalmente relacionada.

questionAnswers(1)

yourAnswerToTheQuestion