2013-09-25 56 views
15

Tôi đã cố gắng xây dựng một thư viện tĩnh và sau đó tạo một dự án ràng buộc từ nó trong Xamarin. Mọi thứ đã hoạt động tốt cho đến khi iOS 7 hit. Tôi đã phải lấy phiên bản mới nhất của thư viện gốc và thử và xây dựng nó trong XCode 5, nhưng nó đã cho tôi tất cả các loại vấn đề. Tôi nghĩ rằng nó có thể liên quan đến quá trình xây dựng hoặc có thể một số thay đổi thiết lập trong XCode 5 (so với 4) nhưng tôi không chắc chắn.Thư viện chất béo trong XCode 5

Tôi đã sử dụng this kịch bản để xây dựng một nhị phân phổ quát mà là dựa công việc trong câu hỏi này:

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

Một điều tôi đã thông báo là trước đó, trong iOS 6.1 phiên bản cũ của nhị phân của tôi (được xây dựng trong XCode 4), nhị phân của tôi là khoảng 24 Mb, bây giờ với XCode 5 nó đã phát ra gần 50 Mb! Điều này khiến tôi nghĩ rằng có điều gì đó sai trái với việc biên dịch và liên kết bước.

Bất kỳ ý tưởng nào? Có ai khác gặp phải vấn đề với nhị phân phổ quát trong XCode 5 (vs 4)?

Trả lời

23

Tôi đang sử dụng tệp makefile bên dưới cho thư viện của mình và nó hoạt động hoàn hảo ngay cả với XCode 5 và 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

Hãy tha thứ cho sự thiếu hiểu biết của tôi về XCode (đó là lý do tại sao tôi sử dụng Xamarin) nhưng làm cách nào để thiết lập một tệp? Kịch bản tôi đã sử dụng tôi vừa thêm vào "xây dựng các giai đoạn" trong dự án XCode của tôi. Điều này có giống nhau không? Hoặc là có một số thủ thuật khác để sử dụng điều này? –

+0

Bạn sẽ có thể thả tệp makefile của tôi trực tiếp vào thư mục dự án thư viện của bạn và điều chỉnh các biến PROJECT và TARGET để phù hợp với dự án của bạn và tốt. Tôi có nghĩa là chỉ cần tạo một tập tin "makefile" và dán nội dung của makefile của tôi và điều chỉnh. –

+0

Và đừng quên chạy "make" sau đó :) –

1

Đây là liên kết đến Makefile with the tabs và tôi đã thực hiện một chút thay đổi để tách biệt tên mục tiêu khỏi tên thư viện. Cảm ơn rất nhiều vì điều này! Điều này đã giải quyết được vấn đề của tôi!