2015-04-27 5 views
15

Właśnie rozpocząłem nowy projekt Swift i chciałbym użyć różnych bibliotek. W szczególności chciałbym użyć Realm.io, biblioteki Obj-C. Ale chciałbym również użyć czystych bibliotek Swift, takich jak Alamofire lub Dollar.Nie można używać bibliotek zarówno Swift, jak i Obj-C z Cocoapods

Używam Cocoapods do zarządzania moimi zależnościami. Używam najnowszej wersji (0.37.0) i nowej flagi use_frameworks!. pod install odnosi sukcesy w każdej chwili.

Niestety, gdy próbuję zbudować mojego projektu mam dwa błędy (na mój główny cel):

  • Umbrella header Realm.h not found z module.modulemap
  • Could not build Objective-C module Realm z dowolnego pliku, używając import Realm

Inne importu dobrze pracować.

Zauważyłem następujące: jeśli usunę czyste biblioteki Swift i use_frameworks, wszystko działa poprawnie. Mam świadomość, że jest this current issue from Cocoapods. Jednak nie powinno to stanowić problemu, ponieważ Realm prosi twórców o używanie tej flagi.

Oto moja 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 

używam żadnego nagłówka pomostowej. Czy powinienem?

Każdy pomysł lub obejście problemu?

+0

Nie mogę odtworzyć problemu, który widzisz. Czy mógłbyś udostępnić przykładowy projekt, który demonstruje problem? – segiddins

+0

Hej Sam, zobacz mój najnowszy komentarz (odpowiedź Stefana) poniżej. Działa przy użyciu nagłówka mostu. Jest to możliwe z powodu różnych wersji Cocoapods, których używam. –

Odpowiedz

15

porządku, tutaj jest pełna solucja:

  1. zainstalować zależności wykorzystujące Cocoapods i flagi use_frameworks!.
  2. Aby użyć zależności Objective-C, utwórz nagłówek Bridging. Możesz go łatwo stworzyć, importując klasę Objective-C do projektu Swift, niż ją usuwając (kreator powinien zapytać, czy potrzebujesz nagłówka pomostowego). W przeciwnym razie utwórz nowy plik nagłówkowy. Następnie przejdź do konfiguracji docelowej i wprowadź nazwę pliku w polu Swift Compiler - Code Generation>Objective-C Bridging header.
  3. Nadal w docelowej konfiguracji dodaj nowy wpis w pozycji Search Paths>User Header Search Paths: Pods jako wartość i oznacz go jako rekursywny.
  4. Usunąć z kodu instrukcję import w odniesieniu do biblioteki Objective-C.
  5. Zbuduj swój projekt. Powinieneś odnieść sukces.
+1

Strąki/** zrobili to, dzięki! – Ixx

+1

Dziękuję bardzo. Ratujesz moje życie !! – nRewik

+0

'pods/**/**' pracował dla mnie – Anil

2

Potrzebujesz nagłówka pomostowego i zaimportuj tam nagłówki biblioteki Objective-C.

Jeśli używasz tylko Realm można sprawdzić tę dokumentację do szybkiego http://realm.io/docs/cocoa/ (przejdź do CocoaPods dół w zakładkach)

Swift

  1. Install CocoaPods 0.36.0 lub nowszej ([sudo] gem install cocoapods).
  2. W swoim Podfile dodaj use_frameworks! i do celu swojej aplikacji.
  3. Z wiersza poleceń uruchom instalację pod.
  4. Użyj pliku .xcworkspace wygenerowanego przez CocoaPods do pracy nad projektem!
  5. Pobierz najnowszą wersję Realm i rozpakuj plik ZIP.
  6. Przeciągnij plik w Swift/RLMSupport.swift do Nawigatora plików swojego projektu Xcode, zaznacz pole wyboru Kopiuj elementy, jeśli to konieczne.
+0

Użycie '#import" Realm/Realm.h "' w nagłówku, teraz otrzymuję ten błąd: 'Realm/Realm.h nie znaleziony' –

+0

Ta składnia to' #import ', ale jeśli to nie działa, możesz równie dobrze użyć sugerowanej metody. –

+0

Podążyłem za ich metodą i nie zadziałało. Miałem błąd, który opisałem wcześniej w moim pytaniu (brak nagłówka parasolki). –

1

Właśnie zainstalowano Realm biblioteki w projekcie mam z niektórych bibliotekach można wymienić przede jak Alamofire i SwiftyJSON i innych i to działa dobrze podczas budowania projektu, a nawet umieścić import Realm, brak błędów kompilacji.

Używam Cocoapods 0.36.0, stabilna wersja i to jest mój 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' 

Mam nadzieję, że to pomoże Ci

+1

Używanie Cocoapods 0.37.0.beta.1 to nie działa. –

Powiązane problemy