Как CIFilter может генерировать нечитаемый QRCode в Swift? - PullRequest
0 голосов
/ 04 июля 2018

Я разработал приложение для iOS в Swift 4 с XCode 9.3 с минимальной версией iOS 10.0, которая генерирует QR-коды для чтения другим приложением (приложением для чтения). Приложение находится в рабочем состоянии, и данные, отображаемые в QRCode, отправляются сервером и всегда имеют моно-объектные идентификаторы (12 байтов -> 24 цифры)

Проблема в том, что иногда (действительно редко) сгенерированные QR-коды не работают (не читаются сканерами или приложением для чтения), но я не могу воспроизвести его в среде разработки. Изображения были отправлены клиентами.

Генератор QRCode:

extension String {

    func toQRCode() -> UIImage?{

         let data = self.data(using: String.Encoding.ascii)

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

             filter.setValue(data, forKey: "inputMessage")

             filter.setValue("H", forKey: "inputCorrectionLevel")

             colorFilter.setValue(filter.outputImage, forKey: "inputImage")
             colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1, alpha: 0), forKey: "inputColor1") // Background
             colorFilter.setValue(CIColor.init(red: 0.12, green: 0.13, blue: 0.15), forKey: "inputColor0")

             let transform = CGAffineTransform(scaleX: 10, y: 10)

             if let output = colorFilter.outputImage?.transformed(by: transform) {
                  return UIImage(ciImage: output)
             }
         }
         return nil
    }
}

Использование

imageView.image = "QRCodeString".toQRCode()

Я вижу 2 возможные причины

  1. Сервер случайным образом отправляет в приложение неверные данные (возможно, недопустимые символы), поэтому я не могу их воспроизвести.
  2. Данные, отправленные сервером, в порядке, но система iOS генерирует битые QR-коды случайным образом.

Случай 1: Я пытался сгенерировать QR-коды с множеством различных возможных недопустимых символов, но ни один из них не сгенерировал недействительный QRCode

Случай 2. Я много искал о возможных ошибках в CIFilter QRCodes, но ничего не нашел.

Изображение с проблемой:

QRCode1 QRCode2

QRCode3

Извините за качество картинки 1 и 2, это фото телефона.

Значения сервера на изображениях выше примерно такие, как "5073c76a23ce3abf0f000001", но я не могу понять, что происходит.

Есть идеи?

...