2015-06-03 10 views
5

Sto lavorando su un progetto iOS, che mostra il numero cliente in un codice a barre. Avevo installato il framework ZXingObjC con CocoaPods, descritto in GitHub.Impossibile integrare ZXingObjC in un progetto Swift iOS

Posso compilare il mio progetto senza errori. Posso anche usare le classi di ZXingObjC nelle mie classi Objective-C, senza errori. Dopo di, ho aggiunto il comando di importazione #import <ZXingObjC/ZXingObjC.h> al mio file di intestazione di bridging, come le mie altre classi di obiettivo-c personalizzate, senza errori di compilazione. (Avevo testet il file di intestazione distruggendo alcune istruzioni di importazione e ottenuto il file previsto non trovato eccezione.)

Ma ora, non posso usare qualsiasi classe di ZXingObjC nelle mie classi veloci. Ho ottenuto solo il seguente errore di compilazione: Use of undeclared type '...'. Anche il completamento automatico di Xcode non funziona.

ad es.

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

ho provato: nuovo progetto

  • configurazione, stesso problema
  • controllato percorso di ricerca intestazione: $(SRCROOT)/Pods/Headers/Public/Adjust
  • reinstallato il quadro ZXingObjC
  • impostazioni di generazione controllato: Enable Modules: YES
  • controllato impostazioni di costruzione: Other Linker Flags: $(inherited) -ObjC -framework "ZXingObjC"
  • controllato binari linkati nelle fasi di creazione: quadro si aggiunge
  • istruzione import controllato nel file di intestazione di bridging (#import <ZXingObjC/ZXingObjC.h> e #import "ZXingObjC/ZXingObjC.h" - nessuna differenza)
  • di Windows stile: Xcode riavvio e Mac ;-)

sto usando:

  • Xcode: 6.3.2
  • CocoaPods: 0.37.2
  • progetto di destinazione della distribuzione: iOS 8.0
  • SDK: 8,3

Qualcuno sa il problema? Qualcuno può aiutare? Come posso rendere disponibile la struttura ZXingObjC in swift?

+0

All'altra Bandiere Linker, ho $ (ereditati) -ObjC -l "Pods-ZXingObjC" - framework "AVFoundation" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreVideo" -framework "ImageIO" -framework "QuartzCore" e funziona bene. –

risposta

0

Il percorso di ricerca dell'intestazione non era corretto nel mio progetto. I valori corretti sono:

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

La seconda e la terza riga non sono state aggiunte dall'installazione con CocoaPods.

MODIFICA: Il framework installato deve essere aggiunto a "Embedded Binaries" nella scheda General del progetto.

4

In realtà è un problema semplice:

Podfile

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

platform :ios, '8.0' 
use_frameworks! 

pod 'ZXingObjC', '~> 3.1' 

Così, il terminale:

cd workspace 
pod install 

Poi, progetto una volta aperto su Xcode, è necessario modificare colmare-header aggiungendo ZXingObj:

#import <ZXingObjC/ZXingObjC.h> 

Infine, nelle classi veloci che usano ZXingObjC, devi importare ZXingObjC.

import ZXingObjC 

class ZXingObjCWrapper { 

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

} 
0

Ho provato tutto su questa pagina per aggiungere ZXingObjC come pod. Il mio obiettivo era quello di generare un codice a barre Aztec.

Ho controllato il mio percorso di ricerca dell'intestazione. Come diceva Reddas, dovevo aggiungere manualmente "$ {PODS_ROOT}/Intestazioni/Pubblico/ZXingObjC". Ho anche aggiunto ZXingObjC come file binario incorporato (nella scheda Generale).

Ho controllato il mio file di collegamento & tutto andava bene. Ho controllato i controller della mia vista dove volevo generare il codice a barre. L'importazione ZXingObjC era lì.

Nessun errore di compilazione. Ma non posso dichiarare una variabile di ZXingObjC.

Nessuna fortuna. Altri suggerimenti?

MODIFICA - Sono entrato in Targets, Build Settings e cercato i percorsi di ricerca dell'intestazione. Ho aggiunto in entrambi i "$ {} PODS_ROOT/intestazioni/pubblici/ZXingObjC" e "$ {} PODS_ROOT/intestazioni/privato/ZXingObjC"

Questo sembrava a sbloccare tutto ciò si è rotto. Ora funziona. Stranamente, ora posso persino cancellare quelle voci e funziona.

0

Il resto del codice per quando è necessario impostare un UIImage con questo codice a barre:

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 
} 
Problemi correlati