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 ?
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:
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.
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.
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'
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
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'
Odpowiedzi:
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 MBProgressHUD
i / lubimport Alamofire
na 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.
źródło
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 .
pod install
.Example-Bridging-Header.h
i dodaj go do projektu.Objective-C Bridging Header
na swój cel: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
źródło
#import <Reachability/Reachability.h>
raczej niż#import "Reachability.h"
.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.
źródło
use_frameworks!
jest tylko dla iOS> = 8, prawda? Jeśli tak, powinieneś napisać to w swojej odpowiedzi.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
źródło
Teraz możesz używać cocoapods w wersji 0.36.0, uruchamiając,
sudo gem install cocoapods
któ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'
źródło
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 .
źródło