Руководство по созданию собственной библиотеки для разработки Какао (сенсорный) - PullRequest
22 голосов
/ 25 марта 2009

В настоящее время я использую множество однотипных объектов с пользовательскими методами. Было бы удобнее создать свою собственную библиотеку, которую я могу использовать для нескольких проектов .

Цель состоит в том, чтобы мои собственные классы были доступны таким же образом, как классы, такие как UIView, CGRect и т. Д., Включая удобные методы, такие как CGRectMake, как с классами, так и со структурами. Подводя итог, я хочу создать свои собственные эквиваленты:

  • Классы типа UIView
  • Структуры как CGRect
  • Удобные функции, такие как CGRectMake
  • Сделать это доступным в виде библиотеки
  • Сделайте это доступным как шаблон XCode, таким образом, эти пользовательские объекты будут доступны как «новые файлы» в XCode

Так что в основном я ищу инструкции о том, как создавать классы, структуры и т. Д. Для создания всего вышеперечисленного. Каков наилучший способ сделать это? Проект 320 кажется хорошей отправной точкой. Но ему не хватает (я думаю):

  • наличие библиотеки, доступной сразу в новых проектах
  • новые классы доступны в 'новом файле'

Даже если бы я создал собственную статическую библиотеку, смогу ли я выпустить приложение в магазине приложений , так как ссылки на сторонние библиотеки не поддерживаются на телефоне?

Для вашего удобства это в основном подвопросы, охватывающие сферу действия этого вопроса:

  • Как создать собственную библиотеку для разработки на Mac / iPhone?
  • Как создать классы, структуры и встроенные функции для этой библиотеки?
  • Как мне создать свой собственный шаблон Xcode на основе этой библиотеки?
  • Смогу ли я выпускать приложения для iPhone, используя собственную статическую библиотеку?

Ответы [ 6 ]

18 голосов
/ 12 января 2010

FYI Xcode 3.2 имеет новый шаблон проекта под названием «Статическая библиотека Cocoa Touch» Вы можете пойти по этому пути.

16 голосов
/ 25 марта 2009

Если бы вы делали это для Mac, вы бы создали фреймворк. Тем не менее, вы упоминаете UIView, так что, очевидно, вы работаете с iPhone. Apple не позволяет приложениям iPhone динамически связываться с другими библиотеками во время выполнения, поэтому единственный вариант - создать статическую библиотеку. Статическая библиотека связана с исполняемым файлом приложения при сборке.

Насколько мне известно, в Xcode нет шаблона проекта статической библиотеки. Скорее всего, вам придется начать с другого шаблона iPhone Xcode и добавить цель статической библиотеки. Держитесь за цель приложения по умолчанию; Вы можете использовать это для создания простого тестового приложения, чтобы убедиться, что библиотека действительно работает.

Чтобы фактически использовать библиотеку в приложении, вам понадобятся две вещи: скомпилированная библиотека (с расширением .a) и все файлы заголовков. В готовом приложении вы будете ссылаться на статическую библиотеку, и вам потребуется #import файлы заголовков, чтобы компилятор понимал, какие классы, функции и т. Д. Доступны для него. (Обычный способ - создать один заголовочный файл, который импортирует все остальные. Таким образом, вам нужно импортировать только один файл в исходные файлы.)

Что касается создания собственных пользовательских шаблонов, здесь есть простое руководство, с которого следует начать: http://www.macresearch.org/custom_xcode_templates Возможно, вы можете скопировать шаблоны по умолчанию и просто настроить их в соответствии с вашими целями.

Синтаксис структуры выглядит следующим образом:

typedef struct _MyPoint {
    CGFloat x;
    CGFloat y;
} MyPoint;

Структуры объявляются в заголовочных файлах, так что вы можете (я полагаю) Ctrl + двойной щелчок по имени структуры, чтобы увидеть, как она объявлена.

Еще один маленький трюк для создания структур - сделать что-то вроде этого:

MyPoint aPoint = (MyPoint){ 1.5f, 0.25f };

Поскольку компилятор знает порядок полей в структуре, он может очень легко сопоставить значения, указанные в фигурных скобках, с соответствующими полями. Конечно, удобнее иметь такую ​​функцию, как MyPointMake, поэтому вы можете написать так:

MyPoint MyPointMake(CGFloat x, CGFloat y) 
    return (MyPoint){ x, y };
}

Обратите внимание, что это функция, а не метод, поэтому она находится вне контекста @interface или @implementation. Хотя я не думаю, что компилятор будет жаловаться, если вы определите его в контексте @implementation.

CGPointMake определяется как функция, известная как inline. Вы можете увидеть определение этого в заголовочных файлах Какао, также. (Разница между встроенной функцией и обычной функцией заключается в том, что компилятор может заменить вызов на CGPointMake копией CGPointMake, что позволяет избежать затрат на создание вызов функции. Это довольно незначительная оптимизация, но для такой простой функции это имеет смысл.)

4 голосов
/ 25 марта 2009

Проект 320 является хорошим примером библиотеки классов iPhone. Вы в основном компилируете свой проект в библиотеку .a и затем статически связываетесь с этим в своих клиентских проектах.

2 голосов
/ 05 июня 2009

Поскольку это вики сообщества, я подумал, что будет полезно связать некоторые ресурсы и учебные пособия:

http://blog.stormyprods.com/2008/11/using-static-libraries-with-iphone-sdk.html

http://www.clintharris.net/2009/iphone-app-shared-libraries/

Наслаждайтесь!

1 голос
/ 25 марта 2009

Проект 320 кажется хорошей отправной точкой. Но ему не хватает (я думаю) в:

  • наличие библиотеки в новых проектах прямо сейчас
  • с новыми классами, доступными в «новом файле»

Это шаблоны проектов и файлов. Для получения дополнительной информации обратитесь в Google .

0 голосов
/ 25 марта 2009

Если вы планируете выпустить это в магазине приложений, вы не сможете использовать свою библиотеку так, как вам бы хотелось. Как упоминалось выше, ссылки на сторонние библиотеки не поддерживаются на телефоне. Я думаю, что есть «хакерский» способ заставить его работать, но вы потеряете дистрибутив.

Лучшее, что я мог придумать, это поместить весь соответствующий код в каталог и поделиться им таким образом. Я знаю, что это не так элегантно, но их ограничение, т.е. вне нашего контроля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...