2015-10-12 33 views
18

Mam projekt Xcode, który tworzy bibliotekę statyczną. Mój zespół planuje wszystkie nowe projekty w Swift. It is not possible to add Swift files to the static library project. Zrzekamy się wsparcia dla iOS 7, więc teraz możliwe jest dołączanie frameworków do naszej aplikacji na iOS. Dlatego zamierzam przekształcić mój projekt biblioteki statycznej w projekt ramowy.Konwertuj cel statycznej biblioteki na cel szkieletowy w projekcie Xcode.

Wyglądałem, ale nie mogę znaleźć żadnych narzędzi ani porad, jak wykonać tę konwersję. Biblioteka statyczna jest duża (ponad 100. M plików).

Mam nadzieję na lepszą odpowiedź niż na stworzenie nowego równoległego celu ramowego. Próbowałem tego dwa razy. Po raz pierwszy jako szybki cel, ale nie udało mi się łatwo zaimportować wszystkich plików Celu C. Następnie jako cel Celu C, ale nie ma już pliku .pch.

+0

Wpadłem na ten sam problem, tworząc szkielet mieszanego kodu objC + swift. Czy znalazłeś jakieś rozwiązanie @Jeffery Thomas? –

+1

@LouWeed No. To był tylko dzień pracy. Stworzyłem nowy cel Celu C, a następnie odtworzyłem wszystkie ustawienia docelowe (w tym .pch). –

+1

Świetne pytanie, bardzo smutne, że nie znaleziono żadnego nie-ręcznego rozwiązania. :( –

Odpowiedz

1

Zobaczyłem, że ktoś stworzył strukturę ręcznie, tworząc plik module.framework i kopiując wszystkie pliki nagłówkowe w module module.framework/Headers. To rozwiązanie wydaje się działać, projekt może poprawnie zaimportować pliki i poprawnie je zobaczyć.

Nie jestem pewien, czy to jest najlepszy sposób na zrobienie tego mocno, próbuję tego na dużym projekcie, który ATM importuje statyczną bibliotekę za pomocą cocoapods, ale wydaje mi się, że mam jakiś problem z widocznością niektóre klasy korzystające z frameworka.

+0

czy mogę dołączyć pliki nagłówkowe z innych frameworków do mojej własnej struktury, aby użytkownik końcowy zobaczył mój framework i mógł uzyskać dostęp do klas z frameworka innego z mojego? – Saty

+0

Czy pamiętasz, jak wkleił je wszystkie w sekcji Kompilacja źródeł framework? Mam kilka tysięcy plików, które muszę obsłużyć. –

4

Aby przekształcić statyczne/dynamiczne ramy połączonej ze statycznej połączonej biblioteki

  1. Dodaj nowe ramy dotykowy kakao jako cel w istniejącym statycznym projektem związany biblioteki.
  2. W fazach kompilacji, dodanie wszystkich .m, .mm, .c, .cpp, .metal itp. Do fazy "\ Build Phases \ Compile Sources" swojego statycznego obiektu docelowego do ramek.
  3. Umieść nagłówki, które chcesz eksponować w "\ Build Phases \ Headers".
  4. W przypadku dynamicznie połączonych ram należy pamiętać o ustawieniu typu Mach-O w swoich ustawieniach kompilacji. Jeśli zamierzasz używać swift, musisz upewnić się, że typ Mach-O jest ustawiony jako biblioteka dynamiczna, dzięki czemu stanie się dynamicznie połączonym frameworkiem. W przypadku statycznie połączonych ram, musisz ustawić typ Mach-O jako bibliotekę statyczną, ale nie możesz użyć metody swift w przekonwertowanym statycznym środowisku połączonym (dozwolone są tylko obiekty-c, obiekty-C++, C++, C itd.) .

Następnie dla aplikacji, która chce skorzystać z tej platformy, wystarczy umieścić nagłówki jako #import i dodać framework do "Build Phases \ Link Binary With Libraries" swojej aplikacji docelowej. Jeśli przekonwertowany framework jest dynamicznie połączonym frameworkiem, musisz go umieścić w "Binach osadzonych".

+0

Wkrótce dodam plik SWIFT do mojego nowego projektu Otrzymuję "Swift nie jest obsługiwany dla bibliotek statycznych" – lostintranslation

+0

Proponowany sposób polega na konwersji "statycznie połączonej biblioteki" do "statycznie połączonych ram". Chociaż Swift nie obsługuje obecnie biblioteki statycznej, nie można po prostu dodać szybko do nowo utworzonego "statycznego" połączonego frameworka. – joseph

+0

Jestem zdezorientowany na twoją odpowiedź powyżej @ joseph, powiedziałeś "nie możesz po prostu dodać szybko do nowo utworzonego" statycznego "połączonego frameworka.", Jaki jest sens kroków w twojej odpowiedzi, jeśli wynik jest nadal nie kompatybilny z Swift? Może chciałeś powiedzieć "może" zamiast "nie może"? Ponadto, jeśli to rzeczywiście działa dla Swift, czy możesz umieścić bardziej szczegółowe kroki? Mam ten sam problem i nie mogę w pełni zrozumieć powyższych kroków (jestem całkiem nowy w rozwoju iOS). – Franco