2013-09-25 13 views
15

Próbowałem zbudować bibliotekę statyczną, a następnie utworzyć z niej projekt wiążący w Xamarin. Wszystko działało dobrze, dopóki nie pojawi się iOS 7. Musiałem pobrać najnowszą wersję natywnej biblioteki i spróbować zbudować ją w XCode 5, ale daje mi ona wiele różnych problemów. I think może to być związane z procesem kompilacji lub ewentualnie zmienionym ustawieniem w XCode 5 (vs. 4), ale nie jestem pewien.Biblioteki tłuszczu w XCode 5

używałem this skrypt do budowania Universal Binary, która opiera się o pracę w tej kwestii:

Build fat static library (device + simulator) using Xcode and SDK 4+

Jedno zauważyłem jest to, że poprzedni, w starym iOS 6.1 wersją mojego binarny (zbudowany w XCode 4), mój plik binarny miał około 24 Mb, teraz z XCode 5 jest rozrócony do prawie 50 Mb! Co prowadzi mnie do myślenia, że ​​coś jest nie tak z etapem kompilowania i łączenia.

Wszelkie pomysły? Czy ktokolwiek napotkał problemy z uniwersalnymi binariami w XCode 5 (vs 4)?

Odpowiedz

23

Używam makefile poniżej dla mojej biblioteki i działa bezbłędnie, nawet z XCode 5 i SDK iOS7.

XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild 
PROJECT_ROOT=. 
PROJECT=$(PROJECT_ROOT)/GIFLibFrontEnd.xcodeproj 
TARGET=GIFLibFrontEnd 

all: libUniversal.a 

libi386.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a [email protected] 

libArmv7.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a [email protected] 

libArmv7s.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7s -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a [email protected] 

libArm64.a: 
    $(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build 
    -mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a [email protected] 

libUniversal.a: libi386.a libArmv7.a libArmv7s.a libArm64.a 
    lipo -create -output lib$(TARGET)Universal.a $^ 

clean: 
    -rm -f *.a *.dll 
    -rm -rf build 
+1

Proszę wybaczyć moją ignorancję XCode (dlatego używam Xamarin), ale jak skonfigurować plik make? Skrypt, którego używałem właśnie dodałem do "fazy budowy" w moim projekcie XCode. Czy to jest podobne? Czy jest jakaś inna sztuczka do korzystania z tego? –

+0

Powinieneś być w stanie upuścić mój plik Makefile bezpośrednio do folderu projektu biblioteki i dostosować zmienne PROJEKT i TARGET, aby pasowały do ​​twojego projektu i być dobrym celem. Mam na myśli tylko utworzenie pliku "makefile" i wklejenie zawartości mojego pliku makefile i dostosowanie. –

+0

I nie zapomnij uruchomić "make" później :) –

1

Oto link do Makefile with the tabs i zrobiłem małą zmianę wydzielić nazwę docelową z nazwą biblioteki. Wielkie dzięki za to! To rozwiązało mój problem!