【问题标题】:Unable to integrate ZXingObjC in a iOS Swift Project无法将 ZXingObjC 集成到 iOS Swift 项目中
【发布时间】:2015-06-03 08:47:10
【问题描述】:

我正在开发一个 iOS 项目,该项目在条形码中显示客户编号。我已经使用 CocoaPods 安装了框架 ZXingObjC,在 GitHub 中进行了描述。

我可以毫无错误地编译我的项目。我还可以在我的 Objective-C 类中使用 ZXingObjC 的类,而不会出错。之后,我将 import Command #import <ZXingObjC/ZXingObjC.h> 添加到我的桥接头文件中,就像我的其他自定义 Objective-C 类一样,没有编译错误。 (我通过破坏一些导入语句测试了头文件并得到了预期的文件未找到异常。)

但是现在,我不能在我的 swift 类中使用任何类 ZXingObjC。我只收到以下编译错误:Use of undeclared type '...'。 Xcode 自动完成功能也不起作用。

例如

var test : ZXMultiFormatWriter?
>> Use of undeclared type 'ZXMultiFormatWriter'

我试过了:

  • 设置新项目,同样的问题
  • 检查的标头搜索路径:$(SRCROOT)/Pods/Headers/Public/Adjust
  • 重新安装了 ZXingObjC 框架
  • 检查构建设置:Enable Modules: YES
  • 检查构建设置:Other Linker Flags: $(inherited) -ObjC -framework "ZXingObjC"
  • 在构建阶段检查了链接的二进制文件:添加了框架
  • 检查了桥接头文件中的导入语句(#import <ZXingObjC/ZXingObjC.h>#import "ZXingObjC/ZXingObjC.h" -- 否 区别)
  • Windows 风格:重新启动 Xcode 和 Mac ;-)

我正在使用:

  • Xcode:6.3.2
  • CocoaPods:0.37.2
  • 项目部署目标:iOS 8.0
  • SDK:8.3

有人知道这个问题吗?任何人都可以帮忙吗? 如何让 ZXingObjC 框架在 swift 中可用?

【问题讨论】:

  • 在其他链接器标志处,我有 $(inherited) -ObjC -l"Pods-ZXingObjC" -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreVideo" -框架“ImageIO”-框架“QuartzCore”并且运行良好。

标签: ios objective-c xcode swift zxing


【解决方案1】:

其实这是一个简单的问题:

播客文件

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'
use_frameworks!

pod 'ZXingObjC', '~> 3.1'

所以,在终端上:

cd workspace
pod install

然后,在 Xcode 上打开项目后,您必须编辑 bridging-header 添加 ZXingObj:

#import <ZXingObjC/ZXingObjC.h>

最后,在使用 ZXingObjC 的 swift 类中,您必须导入 ZXingObjC。

import ZXingObjC

class ZXingObjCWrapper {

    func encode() {
       let writer = ZXMultiFormatWriter.writer()        
       ....
    }

}

【讨论】:

    【解决方案2】:

    当您需要使用此条形码设置 UIImage 时的其余代码:

    func generateDataMatrixQRCode(from string: String) -> UIImage? {
        do {
            let writer = ZXMultiFormatWriter()
            let hints = ZXEncodeHints() as ZXEncodeHints
            let result = try writer.encode(string, format: kBarcodeFormatDataMatrix, width: 1000, height: 1000, hints: hints)
    
            if let imageRef = ZXImage.init(matrix: result) {
                if let image = imageRef.cgimage {
                    return UIImage.init(cgImage: image)
                }
            }
        }
        catch {
            print(error)
        }
        return nil
    }
    

    【讨论】:

      【解决方案3】:

      我的项目中的标头搜索路径不正确。正确的值是:

      $(inherited)
      "${PODS_ROOT}/Headers/Public"
      "${PODS_ROOT}/Headers/Public/ZXingObjC"
      

      第二行和第三行不是用 CocoaPods 安装的。

      编辑:已安装的框架必须添加到项目常规选项卡中的“嵌入式二进制文件”中。

      【讨论】:

        【解决方案4】:

        我尝试了此页面上的所有内容以将 ZXingObjC 添加为 Pod。我的目标是生成一个 Aztec 条形码。

        我检查了我的标题搜索路径。正如 Reddas 所说,我必须手动添加“${PODS_ROOT}/Headers/Public/ZXingObjC”。我还添加了 ZXingObjC 作为嵌入式二进制文件(在常规选项卡中)。

        我检查了我的桥接文件,一切都很好。我检查了我想要生成条形码的视图控制器。 import ZXingObjC 在那里。

        没有编译错误。但是我不能声明 ZXingObjC 的变量。

        运气不好。还有什么建议吗?

        编辑 - 我进入了目标、构建设置并搜索了标题搜索路径。我添加了“${PODS_ROOT}/Headers/Public/ZXingObjC”和“${PODS_ROOT}/Headers/Private/ZXingObjC”

        这似乎疏通了任何破损的东西。现在可以了。奇怪的是,我现在什至可以删除这些条目并且它有效。

        【讨论】:

          猜你喜欢
          • 2017-12-17
          • 1970-01-01
          • 2012-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-20
          • 2015-06-15
          • 2020-04-04
          相关资源
          最近更新 更多