Когда создание библиотеки стоит того?
Я разрабатываю приложения для iOS около года. За это время я разработал довольно много классов, которые я часто перерабатываю из приложения в приложение. Например, у меня есть куча классов, связанных с упрощением написания табличных представлений для управления настройками в приложении.
Прямо сейчас я просто беру эти классы из одного приложения и вставляю их в следующее. У меня вопрос - в какой момент легче создать и использовать статическую библиотеку?
6 ответов
У статических библиотек тоже есть свои проблемы.
- Использование статической библиотеки отговаривает вас от исправления проблем такими, какими вы их видите, поскольку код находится в другом проекте, и это становится проблематичным.
- В GCC есть ошибка, в то время как любой метод, определенный в категории, оптимизирован вне статической библиотеки. Не хорошо, если ваш библиотечный код состоит из множества удобных категорий существующих классов.
Итак, вам нужно решение, в котором вы можете добавить зависимости к реальному исходному коду. Таким образом вы избежите неприятной ошибки GCC, и правила бойскаутов приветствуются!
Наше решение - простая система зависимостей, основанная на Rake. Он создает символические ссылки на исходный код общих библиотек и печатные копии при сборке на сервере сборки (вы никогда не должны создавать двоичные файлы дистрибутива на собственной машине разработчика!).
Сим-ссылки позволяют разработчикам редактировать общий код так же, как если бы он был частью текущего проекта, гарантируя, что любые очистки, исправления ошибок и т. Д. Всегда распространяются в один репозиторий и приносят пользу всем проектам, использующим общую библиотеку.
Бумажные копии на сервере сборки позволяют помечать разделяемые библиотеки для версии, поэтому точная сборка v1.0, которую вы отправили в App Store, всегда воспроизводима!
Мои коллеги рассказали о настройке сервера сборки для непрерывной интеграции здесь: http://blog.jayway.com/2010/01/31/continuos-integration-for-xcode-projects/
Я буду пилить его в блог и делиться с ними системой зависимости на основе Rake. В основном это всего лишь несколько строк с Ruby-скриптом.
Как только вы устали от копирования и вставки, вы должны создать библиотеку. Или, как только вы совершите свою первую ошибку (неправильное) копирование и (неправильное) вставление.
Или, в более деловом смысле: когда чистая приведенная стоимость превышает чистую приведенную стоимость.
У меня есть своя библиотека разных вещей.
Я добавляю к этому вещи, которые я считаю достаточно общими и которые я могу предусмотреть в будущем в будущем.
В конце концов, нет ничего плохого в том, чтобы добавить его в свою библиотеку, даже если вы никогда не будете использовать его снова.
Если вы хотите распространять свои классы среди своей "команды", вам не нужно будет беспокоиться об изменениях, которые они вносят в ваш код, таким образом сохраняя константу библиотеки.
Или, если вы хотите продать свои классы как API другим разработчикам, то вы можете скрыть исходный код от пользователя API.
У меня есть несколько "полезных" классов, которые я нахожу полезными, и я склоняюсь к тому, чтобы поместить файл классов в свое решение, поскольку я нахожу его более простым и быстрым (не то, чтобы дополнительные 2–3 щелчка имели значение), так что на самом деле я полагаю, что я делаю это из привычки больше всего на свете.
Другое решение - использовать систему контроля версий (например, git), которая поддерживает субмодули. Вы можете заключить каждый из этих вспомогательных классов (или даже набор классов) в свой собственный репозиторий, который можно импортировать в основной репозиторий вашего кода.
Таким образом, вам не нужно беспокоиться об ошибках вырезания и вставки. Кроме того, если вы вносите улучшения в эти классы, они могут быть распространены на другие проекты, которые их используют (если хотите), но вы всегда можете вернуться к предыдущим версиям для исправления ошибок / тестирования.
Обычно такой вспомогательный код можно найти на сайтах, таких как пример github.
У меня есть статическая библиотека, которая находится в отдельном проекте. Таким образом, я могу полностью разработать библиотеку, выполнить модульные тесты и т. Д., А затем просто повторно использовать ее, сделав другой проект зависимым от нее.
Это означает, что мне не нужно вырезать / вставлять, и это также означает, что, если я найду / исправлю ошибку или добавлю / изменим функцию библиотеки, тогда ее можно будет легко регрессивно протестировать.
Теперь все проекты, которые используют эту библиотеку, могут принести пользу.
Так что за мои деньги самое время превратить коллекцию "полезного кода" в библиотеку - это когда вы захотите использовать ее снова.
(Конечно, у всех нас есть полезные фрагменты кода, которые мы повторно используем путем копирования / вставки из предыдущего проекта - они не обязательно подходят для использования в библиотеке.)