2010-10-23 3 views
8

Я пытаюсь создать статическую библиотеку, которую я могу использовать как с ios3.x, так и с ios4.x. Я могу создать статическую библиотеку с ios3.0, которая работает с другим проектом в ios3.0, но не будет компилироваться в ios4. То же самое происходит с ios4 до ios3.Как создать универсальную статическую библиотеку ios

Вот как воссоздать:

  1. Открыть XCode 3.2.4 и начать новый проект, это Cocoa Touch Static Library называется Library4
  2. Нажмите на папку классов и создать новый UIViewController под названием «TestViewController»
  3. Щелкните правой кнопкой мыши на папке «Каркасы», добавьте существующую структуру, выберите UIKit
  4. На левой панели разверните цели, щелкните правой кнопкой мыши по моей целевой библиотеке и нажмите «Получить информацию». Перейдите во все конфигурации, измените базовый sdk на симулятор iphone 4.0, измените цель развертывания ios на ios3.0
  5. Нажмите на ссылку Библиотека с папкой Binaries. В правой части окна, изменить роль как для «слабых»
  6. Построить библиотеку
  7. Открыть Xcode 3.2.2 и начать новое приложение, основанное View под названием Library4Test
  8. Копировать TestViewController.h классам папку
  9. Скопируйте файл libLibrary4.a в папку фреймворков. Он автоматически добавляется к фазе компоновщика цели
  10. Щелкните правой кнопкой мыши по объекту Library4Test и нажмите «Получить информацию». В других флагов компоновщика, добавьте «-ObjC» и «-all_load»
  11. В заголовке приложения делегат добавить Import «TestViewController.h»
  12. В методе didFinishLaunchingWithOptions приложения в приложение делегата Header Добавить в

    TestViewController * тест = [TestViewController alloc] init;

  13. Compile с ios3.0 тренажером

Когда я компилирую я получаю:

Ld build/Debug-iphonesimulator/library4Test.app/library4Test normal i386 
cd /Users/test/Documents/Testing/library4Test 
setenv MACOSX_DEPLOYMENT_TARGET 10.5 
setenv PATH "/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/GrandpaIPhone/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
/Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Developer/GrandpaIPhone/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk -L/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -L/Users/test/Documents/Testing/library4Test -F/Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator -filelist /Users/test/Documents/Testing/library4Test/build/library4Test.build/Debug-iphonesimulator/library4Test.build/Objects-normal/i386/library4Test.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -llibrary4_1 -o /Users/test/Documents/Testing/library4Test/build/Debug-iphonesimulator/library4Test.app/library4Test 

Undefined symbols: 
"_objc_msgSendSuper2", referenced from: 
-TestViewController didReceiveMemoryWarning in liblibrary4_1.a(TestViewController.o) 
-TestViewController viewDidUnload in liblibrary4_1.a(TestViewController.o) 
-TestViewController dealloc in liblibrary4_1.a(TestViewController.o) 
"__objc_empty_vtable", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
"_OBJC_CLASS_$_UIViewController", referenced from: 
_OBJC_CLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
"_OBJC_METACLASS_$_UIViewController", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
".objc_class_name_TestViewController", referenced from: 
[email protected][email protected][email protected] in library4_1os3TestAppDelegate.o 
"_OBJC_METACLASS_$_NSObject", referenced from: 
_OBJC_METACLASS_$_TestViewController in liblibrary4_1.a(TestViewController.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
+0

Для людей, которые просто хотят создать статическую библиотеку IOS: http://stackoverflow.com/questions/3520977/build-fat-static-library-device-simulator-using-xcode-and-sdk-4 –

ответ

2

Не уверен точно, но это выглядит как проблема связующей (все те .o вещи). Вот как я установил статическую библиотеку iOS. Это очень простая вещь, но она работает.

  1. Начните новый проект и выберите IOS Libarary >> Cocoa Touch Static Library
  2. Добавить некоторые классы. Mine - это категории на UIView, которые дают лучшие описания для использования в NSLog.
  3. Выберите цель и убедитесь, что Роль каждого класса установлена ​​в соответствующее значение. В случае моих категорий, которые должны быть «общедоступными».
  4. Дважды нажмите на цель и выберите вкладку «Сборка».
  5. Выберите релиз конфигурации и установить следующие строить параметры:
  6. Deployment Расположение ДА (проверка)
    Deployment Постобработка YES (проверка)
    Установка сборки Продукты Местонахождение/

Создайте свою статическую библиотеку. По умолчанию он будет строить в/usr/local/lib

Теперь создайте символическую ссылку для легкого доступа к новой библиотеке. Самый простой способ это открыть терминал и выполните следующие команды:

cd ~  
ln -s /usr/local/lib 

Теперь откройте Xcode проект, в котором вы хотите использовать вашу библиотеку. Создайте группу под названием «Библиотеки» или что-то в этом роде, нажмите ctrl-click и используйте «Добавить существующие файлы», чтобы добавить библиотеку. Он будет называться чем-то вроде libYourLibrary.a Когда вы запустите проект, вы получите сообщение об ошибке. Поэтому дважды щелкните файл , перейдите в раздел «Построение >> Все конфигурации и добавьте следующее значение в« Пути поиска библиотеки »: ~/lib

+0

Я просто создал вопрос, на который вы можете ответить, но я не уверен. Вот он: http://stackoverflow.com/q/26597889/1735836 – Patricia

0

Как вы можете создать одну цель с помощью sdk? Я создаю статическую библиотеку для iOS-OSx, и процедура была намного проще.

  1. создать проект (из шаблона IOS "Cocoa Touch Static Library")
  2. добавить исходные файлы
  3. добавить одну цель для SDK

Конечно я должен добавить

#if TARGET_OS_IPHONE 
... 
#else 
... 
#endif 

к коду. Вы можете добавить свои собственные условные обозначения.

0

Ошибки компилятора происходят из-за того, что вы не ссылались на правильные системные рамки. Все символы в темно-красном цвете - это Foundation.framework, UIKit.framework и libobjc.dylib.

Статические библиотеки не автоматически втягивают необходимые рамки, с которыми им нужно связать, поэтому при их использовании вы должны добавить их в проект самостоятельно.