我一直在研究iOS阅读器应用程序,用于德国铁路(德国铁路)使用的特殊条形码.它是Aztec条形码的变体,用于连接DSA签名字符串和zlib缩减的有效负载.
我被困住了,当我得知AVMetadataMachineReadableCodeObject没有公共方法来读取条形码中包含的原始字节时,字符串方法总是使zlib压缩数据乱码.
幸运的是,这个答案让我朝着正确的方向前进.可以使用KVO访问(私有)字节,因为我目前不希望在App Store上分发应用程序,这是完美的.
尽管我几乎不存在Swift和Objective-C知识,我设法让这个工作,你可以在示例代码中看到.但是条形码中存储的字节NSData与预期结果不符!我怀疑我使用的zlib库(DeflateSwift)无法正常工作,所以我构建了一个测试用例,工作正常.
我的问题是:我做错了什么?我是否需要进一步处理原始字节以获得预期结果(见下文)?如何生究竟是存储在字节AVMetadataMachineReadableCodeObject?谁能指出我正确的方向?任何帮助表示赞赏.
这是我的代码(这是一个悲伤的mashup Swift和Objective-C)
if let metadataObject = metadataObjects.first {
let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject;
let rawReadableObject = readableObject.valueForKeyPath("_internal.basicDescriptor")!["BarcodeRawData"] as? NSData;
if let rawBytes = rawReadableObject {
let barcodeData = rawBytes; // or use testData instead
let barcodeSplit:Int = 68;
let barcodeLength:Int = barcodeData.length;
let barcodeHeader:NSData = barcodeData.subdataWithRange(NSRange(location: 0, length: barcodeSplit))
let barcodeZlibContent:NSData = barcodeData.subdataWithRange(NSRange(location: barcodeSplit, …Run Code Online (Sandbox Code Playgroud)