2015-04-27 7 views
15

Ho appena avviato un nuovo progetto Swift e vorrei utilizzare diverse librerie. In particolare, vorrei usare Realm.io, una libreria Obj-C. Ma mi piacerebbe anche usare librerie pure di Swift come Alamofire o Dollar.Impossibile utilizzare le librerie Swift e Obj-C con Cocoapods

Io uso Cocoapods per la gestione delle mie dipendenze. Uso la versione più recente (0.37.0) e la nuova bandiera use_frameworks!. pod install ha successo in qualsiasi momento.

Purtroppo, quando cerco di costruire il mio progetto ho due errori (per il mio obiettivo principale):

  • Umbrella header Realm.h not found da module.modulemap
  • Could not build Objective-C module Realm da qualsiasi file utilizzando import Realm

altre importazioni funziona bene

Ho notato quanto segue: se rimuovo le librerie Swift pure e use_frameworks, tutto funziona correttamente. Sono a conoscenza di this current issue from Cocoapods. Tuttavia, non dovrebbe essere un problema per Realm chiede agli sviluppatori di usare quel flag.

Ecco il mio Podfile:

platform :ios, '8.0' 
use_frameworks! 

target 'rothrock' do 
    pod 'Realm' 
    pod 'Cent' 
    pod 'SwiftyJSON' 
    pod 'Alamofire' 
end 

target 'rothrockTests', :exclusive => true do 
end 

non uso intestazione bridging. Dovrei?

Qualche idea o soluzione alternativa?

+0

Non riesco a riprodurre il problema che si sta verificando. Sarebbe possibile per te condividere un esempio di progetto che dimostra il problema? – segiddins

+0

Hey Sam, vedi il mio ultimo commento (la risposta di Stefan) sotto. Funziona usando un'intestazione di bridging. Forse a causa della diversa versione di Cocoapods che sto usando. –

risposta

15

Va bene, qui è il walkthrough completo:

  1. installare le dipendenze utilizzando Cocoapods e la bandiera use_frameworks!.
  2. Poiché è necessario utilizzare una dipendenza Objective-C, creare un'intestazione Bridging. Puoi crearne uno facilmente importando una classe Objective-C nel tuo progetto Swift, piuttosto che rimuoverlo (la procedura guidata dovrebbe chiederti se hai bisogno di un'intestazione di bridging). Altrimenti, crea un nuovo file di intestazione. Quindi, passa alla configurazione di destinazione e inserisci il nome del file in Swift Compiler - Code Generation>Objective-C Bridging header.
  3. Sempre nella configurazione di destinazione, aggiungere una nuova voce in Search Paths>User Header Search Paths: Pods come valore e contrassegnarla come ricorsiva.
  4. Rimuovere qualsiasi istruzione import dal codice, relativa alla libreria Objective-C.
  5. Costruisci il tuo progetto. Dovresti avere successo.
+1

I pod/** ce l'hanno fatta, grazie !! – Ixx

+1

Grazie mille. Mi hai salvato la vita !! – nRewik

+0

'pods/**/**' ha funzionato per me – Anil

2

Hai bisogno di un'intestazione di bridging e importa le intestazioni della libreria Objective-C lì.

Se si utilizza solo Realm è possibile controllare questa documentazione per Swift http://realm.io/docs/cocoa/ (vai a CocoaPods giù in schede)

Swift

  1. Installare CocoaPods 0.36.0 o versione successiva ([sudo] gem install cocoapods).
  2. Nel file Pod, aggiungere use_frameworks! e pod 'Realm' al target dell'app.
  3. Dalla riga di comando, eseguire pod install.
  4. Usa il file .xcworkspace generato da CocoaPods per lavorare sul tuo progetto!
  5. Scarica l'ultima versione di Realm ed estrai lo zip.
  6. Trascinare il file su Swift/RLMSupport.swift nel Navigatore file del progetto Xcode, selezionando la casella Copia gli elementi se necessario.
+0

Usando '#import" Realm/Realm.h "' nella mia intestazione, ora ottengo questo errore: 'Realm/Realm.h non trovato' –

+0

Questa sintassi è' #import ', ma se che non funziona si potrebbe anche usare il loro metodo suggerito. –

+0

Ho seguito il loro metodo e non ha funzionato. Ho avuto l'errore che ho descritto in precedenza nella mia domanda (manca l'intestazione dell'ombrello). –

1

Ho appena installato il Reame biblioteca in un progetto che ho con alcune delle librerie che hai citato sopra come Alamofire e SwiftyJSON e gli altri e funziona bene quando si genera il progetto e anche mettere il import Realm, nessun errore di compilazione.

Sto usando Cocoapods 0.36.0, la versione stabile, e questo è il mio PodFile:

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

use_frameworks! 

platform :ios, '8.0' 

link_with 'ApiWorkflow', 'ApiWorkflowTests' 

pod 'SwiftyJSON', '~> 2.2' 
pod 'Alamofire', '~> 1.2' 
pod 'Typhoon', '~> 3.0' 
pod 'SwiftCSV', '~> 0.1' 
pod 'Realm' 

Spero che questo aiuto si

+1

Utilizzo di Cocoapods 0.37.0.beta.1 non funziona. –