2013-09-25 17 views
15

Ich habe versucht, eine statische Bibliothek zu erstellen und dann ein bindendes Projekt daraus in Xamarin zu erstellen. Alles funktionierte gut bis iOS 7 schlug. Ich musste mir die neueste Version der nativen Bibliothek holen und versuchen, sie in XCode 5 zu erstellen, aber das hat mir alle möglichen Probleme bereitet. I denke, es könnte sich auf den Build-Prozess oder möglicherweise einige geänderte Einstellung in XCode 5 (vs. 4), aber ich bin mir nicht sicher.Fettbibliotheken in XCode 5

I this Skript wurde unter Verwendung eines Universal Binary zu bauen, die Arbeit in dieser Frage beruht:

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

Eine Sache, ich habe bemerkt, ist, dass die bisherigen, in der alten iOS 6.1 Version meiner binären (eingebaut in XCode 4), meine Binärdatei war ungefähr 24 Mb, jetzt ist sie mit XCode 5 auf fast 50 Mb aufgeblasen! Das führt mich zu der Annahme, dass etwas mit dem Kompilierungs- und Verknüpfungsschritt nicht stimmt.

Irgendwelche Ideen? Hat jemand anderes Probleme mit Universal-Binärdateien in XCode 5 (vs 4) festgestellt?

Antwort

23

Ich benutze das Makefile unten für meine Bibliothek und es funktioniert einwandfrei auch mit XCode 5 und dem iOS7 SDK.

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

Bitte vergib mir meine Unwissenheit über XCode (weshalb ich Xamarin verwende), aber wie richte ich eine Make-Datei ein? Das Skript, das ich benutzte, hatte ich gerade in meinem XCode-Projekt zu "Build-Phasen" hinzugefügt. Ist das ähnlich? Oder gibt es einen anderen Trick, um dies zu verwenden? –

+0

Sie sollten in der Lage sein, das My Makefile direkt in Ihren Bibliotheksprojektordner zu legen und die PROJECT- und TARGET-Variablen anzupassen, um sie an Ihr Projekt anzupassen und gut zu sein. Ich meine, einfach eine Datei "Makefile" erstellen und den Inhalt meines Makefiles einfügen und anpassen. –

+0

Und vergessen Sie nicht, "make" danach zu machen :) –

1

Hier ist ein Link zu einem Makefile with the tabs, und ich habe eine kleine Änderung des Zielnamen aus dem Bibliotheksnamen zu trennen. Vielen Dank dafür! Das hat mein Problem gelöst!