Статьи

Создание вашего первого CocoaPod

CocoaPods — отличный инструмент для управления зависимостями при создании приложений для iOS или OS X. Зрелость CocoaPods уже много лет и хорошо поддерживается. Хотя использование CocoaPods в ваших программных проектах для iOS или OS X очень распространено, на самом деле реже создают стручки, которые другие могут использовать. Из этого туториала вы узнаете, как создать свой первый модуль, и он даст вам несколько советов о том, что характеризует отличный модуль.

Очевидно, чтобы создать модуль, вам нужно установить CocoaPods. Он доступен как Ruby Gem от RubyGems . Чтобы установить CocoaPods, выполните следующие команды из командной строки:

1
gem install cocoapods

Это руководство было написано против CocoaPods 0.37.2.

С высокого уровня, есть пять шагов, необходимых для создания вашего первого модуля:

  1. Определите идею для вашего первого стручка.
  2. Используйте команду pod lib чтобы создать каркасную структуру каталогов и связанные файлы для вашего модуля.
  3. Обновите метаданные вашего модуля, такие как его лицензия и информация о версии.
  4. Добавьте код для вашего модуля. Это включает в себя как код самого модуля, так и любой код, который понадобится для примера проекта.
  5. Сделайте стручок общедоступным.

Подсторминг на самом деле не слово, но пришло время провести мозговой штурм по функциональности вашего первого модуля. В официальном репозитории Specs есть более 10 000 общедоступных модулей. Люди нашли все виды вещей, чтобы сделать их доступными в виде капсул. Вот несколько советов, которые помогут вам начать подстурминг, я имею в виду мозговой штурм:

  • Код утилиты: Есть ли у вас уникальный взгляд на то, как выполнять определенные операции со строками? У вас есть любимый подкласс, который вы написали для выполнения гладкой анимации в UIView ? Конкретный код утилиты, подобный этому, является отличным примером того, что можно превратить в пакет. Он часто уже хорошо продуман и отделен от других существующих баз кода.
  • Сторонние пакеты: вы создали оболочку для стороннего API? Есть ли у вас приложение, для которого вы хотите предоставить хуки для интеграции других приложений, например для аутентификации? Предоставляет ли ваша компания веб-API для веб-ресурсов, которые могут быть полезны для других приложений iOS, с которыми легко интегрироваться? Если это так, то модуль имеет смысл, поскольку для других приложений iOS это простой способ интеграции с этими пакетами.
  • Компоненты пользовательского интерфейса: создали ли вы плавный виджет пользовательского интерфейса, который вы хотели бы использовать в других приложениях? Это мои любимые стручки. Замечательно иметь возможность добавлять сложный и восхитительный компонент пользовательского интерфейса в приложение, просто включив зависимость от модуля.
  • Все, что вы хотели бы, чтобы другие могли использовать. Вы создали что-то, что, по вашему мнению, было бы полезным для других? Если так, превратите это в стручок, чтобы другие могли легко использовать это.

Из этого туториала вы узнаете, как создать модуль, который позволяет создавать UILabel . Мы назовем это BlinkingLabel .

Время окунуться. Теперь, когда вы знаете, какую функциональность собирается предоставить ваш модуль, пришло время его создать. Команда pod lib является важным инструментом, который мы будем использовать для двух целей в процессе создания.

  1. pod lib lint проверит, что с вашим модулем все в порядке и что он готов к использованию CocoaPods.
  2. pod lib create самом деле поможет вам быстро начать работу, предоставив стандартную структуру каталогов с кучей стандартных файлов, необходимых для высококачественного модуля. pod lib create — не единственный способ создать ваш pod, но он самый простой.

Откройте окно терминала, перейдите в рабочий каталог и выполните следующую команду:

1
pod lib create BlinkingLabel
  • Когда вас спросят, какой язык вы хотите использовать, ответьте на Swift .
  • На вопрос, хотите ли вы добавить демонстрационное приложение, ответьте « Да» .
  • При определении, создавать ли образец проекта или нет, команда CocoaPods предлагает спросить себя: «Должен ли этот Pod включать скриншот?» Если так, то это хорошая идея, чтобы включить пример проекта.
  • На вопрос, какую платформу тестирования использовать, ответьте « Нет» .
  • Ответьте « Нет» на запрос о тестировании на основе просмотра.

Тестирование выходит за рамки этого учебного пособия, но не позволяйте ему останавливаться на дальнейших исследованиях этого учебного пособия. Отношение тестов к строкам кода является фактором, который учитывается индексом качества CocoaPods .

Когда будут установлены леса для вашего модуля, Xcode откроет ваш новый проект, готовый для работы на нем.

Существует три основных элемента метаданных, которые необходимо включить в ваш модуль:

  • .podspec: этот файл описывает информацию об этой конкретной версии вашего модуля. Ваш модуль, номер версии, домашняя страница и имена авторов являются примерами того, что включено. Проверьте официальную страницу ссылки для получения дополнительной информации.
  • README: Если вы раньше использовали GitHub, вы знаете, насколько важен README. README проекта, написанный на Markdown , отображается на домашней странице проекта на GitHub. Правильный README может быть разницей между тем, кто использует ваш проект или нет. Кроме того, это фактор, способствующий высокому качественному индексу CocoaPods .
  • ЛИЦЕНЗИЯ: чтобы ваш модуль был принят в репозиторий Spec, ваш модуль должен включать лицензию. Команда pod lib create автоматически заполняет файл LICENSE лицензией MIT, и это то, что мы собираемся использовать для этого урока.

Чтобы получить .podspec в форме, откройте его в Xcode. Вы найдете его в BlinkingLabel / Метаданные Podspec / BlinkingLabel.podspec . К счастью, CocoaPods создал хорошо заполненный шаблон для нас, когда мы выполнили pod lib create   команда. Вы собираетесь любить этот инструмент еще больше. Команда pod lib lint автоматически проверит файл .podspec, чтобы убедиться, что он соответствует передовым методам. Или, если вы ленивы, вы также можете использовать его, чтобы выяснить необходимый минимум для создания правильного файла .podspec .

Из командной строки в корне проекта BlinkingLabel выполните следующую команду:

1
pod lib lint BlinkingLabel.podspec

Это должно вывести следующее:

1
2
3
4
5
6
7
8
9
> pod lib lint BlinkingLabel.podspec
 
 -> BlinkingLabel (0.1.0)
    — WARN |
    — WARN |
    — WARN |
 
[!] BlinkingLabel did not pass validation.
You can use the `—no-clean` option to inspect any issue.

Инструмент сообщает вам, что в файле .podspec необходимо исправить три вещи:

  • добавить больше информации в резюме
  • добавить правильное описание
  • укажите URL для домашней страницы модуля

Вот некоторые рекомендуемые значения для этих полей:

  • s.summary: подкласс UILabel который обеспечивает мигание.
  • s.description: Этот CocoaPod предоставляет возможность использовать UILabel которая может быть запущена и UILabel мигать.
  • s.homepage: https://github.com/obuseme/BlinkingLabel (замените obuseme на ваше имя пользователя GitHub)

Но подождите, если вы следовали инструкциям шаг за шагом, технически еще нет проекта по этому URL. Пришло время отправить ваш проект в публичный репозиторий на GitHub . Хотя есть и другие варианты размещения ваших модулей, GitHub, безусловно, является наиболее распространенным.

Чтобы перенести свой проект на GitHub, перейдите к GitHub, войдите или создайте учетную запись и создайте новый репозиторий BlinkingLabel . Затем из командной строки выполните следующие команды:

1
2
3
4
git add .
git commit -m “Initial Commit»
git remote add origin https://github.com/<GITHUB_USERNAME>/BlinkingLabel.git // replace <GITHUB_USERNAME> with your github.com username
git push -u origin master

На этом этапе, если вы все сделали правильно и снова скопируете файл .podspec , он должен пройти проверку.

1
2
3
4
5
> pod lib lint BlinkingLabel.podspec
 
 -> BlinkingLabel (0.1.0)
 
BlinkingLabel passed validation.

Теперь у вас есть основная оболочка капсулы, но она ничего не делает. Пришло время добавить некоторые функции. Изюминка примера проекта, созданного для вас CocoaPods, заключается в том, что вы можете одновременно писать код как для pod, так и для примера проекта.

Сначала найдите файл ReplaceMe.swift в разделе Pods / Development Pods / BlinkingLabel / Pod / Classes / и удалите его.

Навигатор проекта, показывающий ReplaceMeswift

Затем создайте новый файл Swift в том же каталоге и назовите его BlinkingLabel.swift . Замените содержимое нового файла следующим:

01
02
03
04
05
06
07
08
09
10
11
12
13
public class BlinkingLabel : UILabel {
    public func startBlinking() {
        let options : UIViewAnimationOptions = .Repeat |
        UIView.animateWithDuration(0.25, delay:0.0, options:options, animations: {
            self.alpha = 0
            }, completion: nil)
    }
 
    public func stopBlinking() {
        alpha = 1
        layer.removeAllAnimations()
    }
}

Вы только что добавили функциональность в свой первый модуль, подкласс UILabel . У подкласса есть метод, чтобы заставить метку мигать, и другой метод, чтобы остановить ее мигание.

Чтобы другие разработчики могли легко понять, как использовать BlinkingLabel , добавьте пример кода в пример проекта. Откройте BlinkingLabel / Example для BlinkingLabel / ViewController.swift и сделайте так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import UIKit
import BlinkingLabel
 
class ViewController: UIViewController {
 
    var isBlinking = false
    let blinkingLabel = BlinkingLabel(frame: CGRectMake(10, 20, 200, 30))
 
    override func viewDidLoad() {
        super.viewDidLoad()
 
        // Setup the BlinkingLabel
        blinkingLabel.text = «I blink!»
        blinkingLabel.font = UIFont.systemFontOfSize(20)
        view.addSubview(blinkingLabel)
        blinkingLabel.startBlinking()
        isBlinking = true
 
        // Create a UIButton to toggle the blinking
        let toggleButton = UIButton(frame: CGRectMake(10, 60, 125, 30))
        toggleButton.setTitle(«Toggle Blinking», forState: .Normal)
        toggleButton.setTitleColor(UIColor.redColor(), forState: .Normal)
        toggleButton.addTarget(self, action: «toggleBlinking», forControlEvents: .TouchUpInside)
        view.addSubview(toggleButton)
    }
 
    func toggleBlinking() {
        if (isBlinking) {
            blinkingLabel.stopBlinking()
        } else {
            blinkingLabel.startBlinking()
        }
        isBlinking = !isBlinking
    }
 
}

На этом этапе вы увидите, что Xcode жалуется на множество ошибок в ViewController.swift . Это потому, что модуль BlinkingLabel еще не установлен в примере проекта. Для этого перейдите в командную строку и из корня каталога BlinkingLabel выполните следующую команду:

1
2
3
4
5
6
7
8
> cd Example
> pod install
Analyzing dependencies
Fetching podspec for `BlinkingLabel` from `../`
Downloading dependencies
Installing BlinkingLabel 0.1.0 (was 0.1.0)
Generating Pods project
Integrating client project

Затем переключитесь обратно на Xcode, выберите цель BlinkingLabel-Example и нажмите кнопку Run .

Создайте и запустите пример проекта

Вы должны увидеть что-то вроде этого:

Симулятор iOS, показывающий пример проекта

Нажмите Toggle Blinking, чтобы опробовать свой новый модуль. Последний шаг в создании вашего модуля — обновить файл README.md. В Xcode откройте README.md в BlinkingLabel / Метаданные Podspec / README.md . Вы увидите, что CocoaPods добавил некоторую документацию по умолчанию для вас. Не останавливайтесь на достигнутом, вы можете сделать это лучше. Добавьте документацию о пакете и добавьте скриншот. Помните, что README — часто первое, что кто-то увидит, глядя на вашу капсулу. Важно, чтобы оно было высокого качества. Взгляните на мою для вдохновения.

Теперь, когда у вас есть полнофункциональный модуль, работающий на вашем локальном компьютере, пришло время сделать BlinkingLabel доступным для других для включения в их проекты. На высоком уровне это достигается путем добавления вашего нового модуля в публичный репозиторий Specs .

Репозиторий Specs — это публичное место на GitHub, где индексируются все общедоступные модули. На самом деле вы не обязаны использовать GitHub для размещения исходного кода вашего модуля. Вы также можете использовать BitBucket, например. Хотя спецификации вашего модуля будут храниться в репозитории Specs на GitHub.

Добавить ваш модуль в репозиторий Specs очень просто. Существует три шага для отправки вашего пакета. Не пытайтесь выполнить эти шаги, так как я уже обнародовал BlinkingLabel. Они только здесь, чтобы служить ссылкой.

В качестве предварительного условия убедитесь, что ваши локальные изменения в каталоге проекта BlinkingLabel добавлены в git и отправлены на удаленный компьютер.

Пометьте свой последний коммит и отправьте его на пульт.

1
2
3
4
5
> git tag 0.1.0
> git push origin 0.1.0
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/obuseme/BlinkingLabel.git
 * [new tag] 0.1.0 -> 0.1.0

Этот шаг означает, что вы помечаете этот коммит как определенный выпуск вашего модуля. Имя тега должно соответствовать s.version в вашем файле .podspec . Следующий шаг подтвердит это.

Затем выполните следующую команду из командной строки, чтобы убедиться, что все настроено правильно между местом хранения исходного кода и файлом .podspec :

1
pod spec lint BlinkingLabel.podspec

Это должно вывести следующее:

1
2
3
4
> pod spec lint BlinkingLabel.podspec
 -> BlinkingLabel (0.1.0)
Analyzed 1 podspec.
BlinkingLabel.podspec passed validation.

Наконец, поместите спецификацию в репозиторий Specs , выполнив следующую команду:

1
pod trunk push BlinkingLabel.podspec

Это должно вывести следующее:

01
02
03
04
05
06
07
08
09
10
11
12
> pod trunk push BlinkingLabel.podspec
Updating spec repo `master`
 
Validating podspec
 -> BlinkingLabel (0.1.0)
 
Updating spec repo `master`
 
  — Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/f7fb546c4b0f80cab93513fc228b274be6459ad2/Specs/BlinkingLabel/0.1.0/BlinkingLabel.podspec.json
  — Log messages:
    — June 29th, 20:40: Push for `BlinkingLabel 0.1.0′ initiated.
    — June 29th, 20:40: Push for `BlinkingLabel 0.1.0′ has been pushed (1.701885099 s).

Буквально тысячи пакетов доступны в репозитории Specs . При поиске стручка не легко определить качество стручка. При добавлении стороннего кода в свой проект вы хотите иметь высокий уровень уверенности в коде, который вы будете отправлять клиентам. Исторически, разработчик должен был сделать свою собственную интерпретацию качества случайного пакета, который они нашли.

По состоянию на июнь 2015 года CocoaPods представила инструмент под названием « Индекс качества», который предоставляет обобщенное суждение о качестве данного модуля на основе определенных показателей. Всесторонние и самые современные метрики можно найти на GitHub .

Итак, вот что может помочь улучшить показатель качества вашей капсулы:

  • популярность проекта, измеряемая звездами, вилками, подписчиками и участниками
  • документация по коду
  • высокое качество README
  • написано в Swift
  • использование лицензии GPL
  • не так много открытых вопросов
  • качество кода обеспечивается с помощью автоматических тестов
  • экономный размер установки за счет минимизации включенных ресурсов
  • меньшие, хорошо сложенные, классы

Индекс качества модуля может увеличиваться или уменьшаться в зависимости от того, насколько данный проект соответствует этим показателям.

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

Теперь у вас есть знания, чтобы создать свой первый модуль. Я хотел бы услышать, какие стручки вы планируете построить. Пожалуйста вернитесь и оставьте ссылку на ваш модуль после его создания.