Właśnie zaktualizowałem do Xcode 6 Beta 4 i mam framework, który stworzyłem dla Live Views w Beta 2. Z powodu kolejnego szybkiego błędu musiałem użyć trochę kodu Obj-C. Jednak podczas aktualizacji pojawia się następujący błąd:
błąd: używanie nagłówków mostkujących z elementami docelowymi struktury nie jest obsługiwane
Nie widziałem niczego w informacjach o wersji ani nie znalazłem żadnej innej ścieżki migracji. Czy ktoś jeszcze to widział i znalazł rozwiązanie?
Zdaję sobie sprawę, że Beta 3 wyeliminowała potrzebę tworzenia ram dla podglądów na żywo, ale w moim przypadku ma sens, jeśli uda mi się to uruchomić. Mogę to jednak usunąć jako rozwiązanie awaryjne, ale wolałbym użyć frameworka, jeśli nie są one całkowicie zepsute w wersji Beta 4.
xcode
frameworks
beta
Chris Conover
źródło
źródło
Odpowiedzi:
Jak stwierdza błąd, mostkowanie nagłówków nie jest dozwolone w strukturach. Sekcja Importowanie kodu z tego samego celu w tej samej strukturze w dokumentacji Mix & Match zawiera wskazówki dotyczące tego. Jak mówią, musisz „W swoim pliku nagłówkowym parasolowym zaimportować każdy nagłówek Objective-C, który chcesz udostępnić w Swift”.
Jednak odkryłem, że może być również konieczne upublicznienie tych konkretnych nagłówków. W tej odpowiedzi opisano, dlaczego i jak to zrobić: Błąd kompilatora Swift: „niemodułowy nagłówek w module frameworka” .
Więc zrób to:
Uwaga : „Plik nagłówkowy parasolki” to plik (o nazwie [ProductName] .h), który ogólnie reprezentuje wszystkie publiczne nagłówki frameworka. Zwykle jest to tylko lista instrukcji #import do innych nagłówków zawartych w frameworku. W Xcode, jeśli otworzysz UIKit.h, zobaczysz dobry przykład pliku parasolowego.
źródło
Są dwie możliwości. Dodanie niezbędnych nagłówków do pliku nagłówkowego parasolki i upublicznienie ich jest jednym ze sposobów. Jest to jednak problem, jeśli nagłówki powinny być dostępne dla Swift, ale nie powinny być publiczne.
Druga możliwość, która udostępni wewnętrzne nagłówki Swift, jest szczegółowo opisana tutaj . Zasadniczo należy utworzyć mapę modułów podobną do poniższej:
module AwesomeKitPrivate { header "../InternalClass.h" export * }
Można to następnie uwzględnić w XCode przy użyciu ustawienia:
SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule
źródło
header
Oświadczenie akceptuje ścieżkę względną. Co robisz, gdy chcesz dodać nagłówki innego frameworka?Zobacz Importowanie Objective-C do Swift .
Aby zaimportować kod Objective-C do Swift z tej samej struktury
W pliku nagłówka parasolowego zaimportuj każdy nagłówek Objective-C, który chcesz udostępnić w Swift. Na przykład:
Upublicznij dołączone pliki w sekcji „Nagłówki” frameworka w „Fazach kompilacji”.
Oczyść i odbuduj.
Swift zobaczy każdy nagłówek, który ujawnisz publicznie w nagłówku parasola. Zawartość plików Objective-C w tej strukturze będzie dostępna w dowolnym pliku Swift w tej strukturze docelowej automatycznie, bez żadnych instrukcji importu. Użyj własnego kodu Objective-C z tą samą składnią Swift, której używasz z klasami systemowymi.
let myOtherCell = XYZCustomCell() myOtherCell.subtitle = "Another custom cell"
Ważne: „parasolowy plik nagłówkowy” oznacza plik {ModuleName} .h. BTW, nazwa docelowa to {ModuleName} .framework.
źródło
W moim przypadku pomogło samo usunięcie
Objective-C Bridging Header
ustawienia z mojego frameworkaBuild Settings
.źródło