2015-06-03 107 views
5

我在iOS項目上工作,該項目顯示條形碼中的客戶編號。我已經安裝了帶有CocoaPods的框架ZXingObjC,如GitHub中所述。無法將ZXingObjC集成到iOS Swift項目中

我可以編譯我的項目沒有錯誤。我也可以在我的Objective-C類中使用ZXingObjC的類,沒有錯誤。除此之外,我已將導入命令#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語句在橋接頭文件(#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

有誰知道這個問題?誰能幫忙? 如何使Swift中的ZXingObjC框架可用?

+0

在其它鏈接器標記,我有$(繼承)-ObjC -l「豆莢-ZXingObjC」 - 框架「AVFoundation」框架「CoreGraphics」框架「CoreMedia」框架「CoreVideo」框架「ImageIO」框架「QuartzCore」,並運作良好。 –

回答

0

標題搜索路徑在我的項目中不正確。正確的值是:

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

第二行和第三行沒有通過安裝與CocoaPods添加。

編輯:已安裝的框架必須添加到項目的常規選項卡中的「嵌入式二進制文件」。

4

其實這是一個簡單的問題:

Podfile

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

platform :ios, '8.0' 
use_frameworks! 

pod 'ZXingObjC', '~> 3.1' 

因此,在終端:

cd workspace 
pod install 

然後,在Xcode的一次打開的項目,你必須編輯橋接頭加入ZXingObj:

#import <ZXingObjC/ZXingObjC.h> 

最後,在使用ZXingObjC的swift類中,您必須導入ZXingObjC。

import ZXingObjC 

class ZXingObjCWrapper { 

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

} 
0

我試了一下在這個頁面上添加ZXingObjC作爲一個Pod。我的目標是生成一個阿茲臺克人的條形碼。

我檢查了我的標題搜索路徑。正如Reddas所說,我必須手動添加「$ {PODS_ROOT}/Headers/Public/ZXingObjC」。我還將ZXingObjC添加爲嵌入式二進制文件(在常規選項卡中)。我的橋接文件&都很好。我檢查了我想要生成條形碼的視圖控制器。 import ZXingObjC在那裏。

沒有編譯錯誤。但我無法聲明ZXingObjC的變量。

沒有運氣。還有什麼建議?

編輯 - 我進入了目標,構建設置和搜索標題搜索路徑。我在這兩個 「$ {} PODS_ROOT /頭/ 公共/ZXingObjC」 和 「$ {} PODS_ROOT /頭/ 私人/ZXingObjC」

加入這似乎疏通任何破門。它現在有效。奇怪的是,我現在甚至可以刪除這些條目,它的工作原理。

0

的代碼,因爲當你需要設置一個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 
} 
相關問題