Подтвердить что ты не робот

Руководство по созданию собственной библиотеки для Cocoa (touch)

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

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

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

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 2

FYI Xcode 3.2 имеет новый шаблон проекта, называемый Cocoa Touch Static Library. Вы можете пойти по этому маршруту.

Ответ 5

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

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

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

Ответ 6

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

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