Сделать статическую библиотеку для iOS с существующим кодом C в Xcode
Краткая версия вопроса:
Поэтому в основном я хочу взять существующую библиотеку, написанную на C ( https://github.com/lsalzman/enet), и превратить ее в статическую библиотеку для iOS.
Я просто ищу легкий для понимания шаг за шагом, как сделать это в Xcode.
Длинная версия:
Я ознакомился с некоторыми учебниками по созданию простой статической библиотеки, написанной на Objective-C ( http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial), и в целом я понять, что там происходит, но я не понимаю, как это сделать с существующим кодом, написанным на C.
Я думаю, что приближаюсь, но я не уверен.
- Я начинаю с создания проекта "Статическая библиотека Cocoa Touch" в xcode.
- Я добавляю все файлы enet.h и.c
- Удостоверьтесь, что enet находится в моих "Пути поиска заголовка пользователя" в настройках сборки.
- нажмите build - он компилируется!
Сгенерированный файл.a имеет размер 517 КБ, поэтому я почти уверен, что на этом этапе он строит содержимое enet.
Моя проблема сейчас заключается в том, что заголовочный файл библиотеки в основном пуст:
#import <Foundation/Foundation.h>
@interface enet_ios : NSObject
@end
Я думаю, мне либо нужно написать оболочку в Objective-C, которая общается с библиотекой enet, либо мне нужно каким-то образом перенастроить мой проект xcode так, чтобы enet.h был "точкой входа" в эту библиотеку, а не предварительно сгенерированные файлы.h /.m. Хотя я не совсем уверен, как это сделать. В идеале я хотел бы просто пропустить любую оболочку и использовать то, что уже предоставляет мне библиотека enet.
Спасибо, что посмотрели!
1 ответ
Вопрос, вы пытаетесь вызвать функции, используя синтаксис / объектную нотацию? Тогда вам нужен объект-обертка, никак не обойтись.
Но если вы прекрасно вызываете функции C напрямую, что вполне приемлемо в IOS/Objective C, тогда нужно убедиться, что ваши заголовочные файлы из библиотеки enet (те, что находятся в каталоге include, который я вижу в ссылке на github, которой вы поделились)) также распространяются вместе со статической библиотекой. Это ограничение статической библиотеки. Вы можете скопировать их с помощью *.a, но они должны быть скопированы со статической библиотекой. Это отличается от Framework, который включает в себя.H и активы, которые разработчики не могут легко создать с помощью инструментов Apple для IOS.
Я считаю, что управление библиотекой в Objective C само по себе является болезненным, так как статические библиотеки являются проблемой по этой и многим другим причинам. Еще одним предложением, определенно более элегантным и портативным, но немного излишним для личного использования, было бы создание проекта в качестве кокопод. Вы можете сделать это, разветвив проект и превратив его в кокоподов. Есть много примеров того, как структура проекта должна выглядеть на кокоподах и других OSS, таких как AFNetworking. Похоже, это стандартный стандарт, по которому люди создают библиотеки IOS. Смотрите http://cocoapods.org/ для более подробной информации. Это будет включать в себя исходный код в качестве модуля и скомпилированы с целевым приложением.
Это единственный способ справиться со своими библиотеками и сторонними библиотеками. Дошло до того, что, если библиотека не использует cocoapods, я не использую библиотеку и не разбираю ее, а сама делаю из нее стручок....