Jak zintegrować Cocoapods z projektem Swift?

84

Gdy Apple przedstawił Swift , ich nowy język programowania, zastanawiam się, jak można go zintegrować z istniejącymi bibliotekami Objective-C, które są dostępne za pośrednictwem CocoaPods ?

Michał K.
źródło
Możesz również przeczytać mój ostatni artykuł o tym, jak skonfigurować CocoaPods z projektem Swift.
Hemang

Odpowiedzi:

78

Cocoapods 0.36 i nowsze wprowadzają use_frameworks!instrukcję, która sugeruje, że nagłówek mostkujący nie jest wymagany do importowania podów Objective-C w Swift.

Poniżej znajduje się pełny przykład użycia MBProgressHUD i Alamofire :

1. Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!

pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod

2. Usunięcie

Usuń #imports z nagłówka mostkowania lub nawet usuń plik nagłówka mostkowania, jeśli go nie potrzebujesz. Jeśli wybierzesz drugą możliwość, nie zapomnij usunąć ścieżki (do tego usuniętego pliku nagłówka mostkowania) w konfiguracji projektu Xcode.

3. Dodawanie importu

Dodaj import MBProgressHUDi / lub import Alamofirena górze każdego pliku Swift, który potrzebuje tych klas (-ów).

4. W razie potrzeby napraw wyliczenia

Używasz teraz prawdziwych frameworków, więc twoje wyliczenia ruszyły w locie! Możesz mieć linię języka Swift, która byłaby w porządku z nagłówkiem mostkującym w następujący sposób:

progressHUD.mode = MBProgressHUDModeIndeterminate

To teraz musi stać się tym:

progressHUD.mode = MBProgressHUDMode.Indeterminate

Nie jest to wielka sprawa, ale stos błędów może doprowadzić Cię na manowce, że masz większy problem niż w przypadku korzystania z wielu wyliczeń Objective-C.

( Źródło tej odpowiedzi )

Dla twojej informacji: Myślę (będziesz musiał sam przetestować, aby mieć pewność), że use_frameworks! Instrukcja w Twoim Podfile jest zgodna tylko z projektami Xcode dla iOS> = 8.

King-Wizard
źródło
73

Wygląda na to, że proces jest podobny do tego opisanego w sekcji Mix and Match w dokumencie Using Swift with Cocoa and Objective-C .

  1. Utwórz swój plik Podfile i uruchom pod install.
  2. Utwórz nowy plik nagłówkowy celu-C Example-Bridging-Header.hi dodaj go do projektu.
  3. Dodaj instrukcję importu do nagłówka mostka .
  4. Ustaw Objective-C Bridging Headerna swój cel:

wprowadź opis obrazu tutaj

Teraz możesz użyć swojej biblioteki, w tym przypadku MKUnits, w pliku Swift:

let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)

Więcej tutaj: Integracja Cocoapods z projektem Swift

Michał K.
źródło
3
Dla mnie instrukcja import musiała zawierać katalog projektu, czyli #import <Reachability/Reachability.h>raczej niż #import "Reachability.h".
Kyle Clegg
Tylko aktualizacja. Swift POD, czyli: Swift Libs będą wkrótce obsługiwane przez CocoaPods. Następna wersja 0.36 przyniesie pełne wsparcie Swift w CocoaPods. Większość funkcji jest już ukończona i możesz teraz przetestować Swift Pods, korzystając z instrukcji z mojego posta na blogu
Sachin Palewar.
2
Cocoapods 0.36 i nowsze wprowadzają use_frameworks! instrukcja, która sugeruje, że nagłówek mostkujący nie jest już wymagany do importowania podów Objective-C w Swift (zobacz moją odpowiedź poniżej).
King-Wizard
5
Oprócz powyższego stwierdziłem, że muszę dodać „Pods / **” do moich „Ścieżek wyszukiwania nagłówków użytkownika” w ustawieniach kompilacji. Musiałem również dodać „#import <Foundation / Foundation.h>” do pliku mostka.
Swifty McSwifterton
1
Dziękuję Swifty. Próbowałem use_frameworks! ale to nie zadziałało dla mnie. Dodanie „Pods / **” do ścieżki wyszukiwania użytkownika zadziałało.
user3246173
16

AKTUALIZACJA : Wydano stabilną wersję CocoaPods 0.36. Oficjalnie obsługuje Swift.


CocoaPods obsługuje teraz Swift w najnowszej wersji 0.36. Nadal jest w wersji beta, ale działa.

Najpierw musisz zainstalować wersję beta CocoaPods (obecnie beta 2), uruchamiając ją w swoim terminalu.

sudo gem install cocoapods --pre

To prawie wszystko. Możesz dodawać biblioteki Swift tak, jak robisz to normalnie.

Ale jest haczyk, jeśli chcesz dodać bibliotekę napisaną w Objective-C do projektu Swift za pośrednictwem CocoaPods. Musisz dodać tę linię use_frameworks!do swojego pliku Podfile. Oto przykład.

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

Napisałem również wpis na blogu dotyczący tego.

Isuru
źródło
3
use_frameworks!jest tylko dla iOS> = 8, prawda? Jeśli tak, powinieneś napisać to w swojej odpowiedzi.
konfile
2

Jeśli otrzymujesz błąd „nie znaleziono pliku” w twoim bridging-header.h, możesz chcieć upewnić się, że twoja biblioteka Pods jest połączona w twoim schemacie budowania.

Sekcja rozwiązywania problemów z CocoaPods opisuje, jak to zrobić w punkcie 4 tutaj

Michelle
źródło
1

Teraz możesz używać cocoapods w wersji 0.36.0, uruchamiając, sudo gem install cocoapodsktóra obsługuje integrację szybkich frameworków. Kiedy używasz frameworka napisanego przez swift, powinieneś jawnie używać go w Podfile:

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'
Allen
źródło
0

W moim przypadku odkryłem, że nie dodawałem podów do głównego celu, ale tylko do celów Test i TestUI w Podfile, jak wyjaśniono tutaj .

zeeawan
źródło