Андреа Биццотто рассказывает о том, как правильно работать с открытыми проектами. Во многом его советы можно применить и к приложениям!
Я являюсь iOS разработчиком с 2012 года. Тогда же я начал писать open source код, чтобы не изобретать каждый раз велосипед заново и переносить мой лучший код между проектами.
Хотя некоторые из моих ранних проектов получили некоторое внимание со стороны сообщества, ни один из них не стал настолько же популярным, как SwiftyStoreKit.
Прежде, чем поделюсь его секретным ингредиентом, позвольте мне сказать следующее:
Я хочу, чтобы мой код влиял на мир.
Я хочу, чтобы он экономил время разработчиков, чтобы они могли сосредоточиться на создании прекрасных приложений, полезных для других.
Если у меня это получится, то все исправления ошибок, все мои ответы на вопросы и то неоплаченное время, что я трачу на этот проект, окупятся сторицей.
У написания открытого программного обеспечения есть эффект усиления. Мой код может достичь конечных пользователей через многие приложения за счет того, что он позволяет разработчикам быть более продуктивными. Насколько заметен этот эффект?
Усиление
По данным Cocoapods Metrics API, на 20 октября 2016 года SwiftyStoreKit скачали 42,302 раза и работает он в 1194 приложениях.
Для контекста, AFNetworking (один из ведущих iOS проектов) скачан 21,659,973 раз и работает в 413,742 приложениях.
Но достаточно хвастовства.
Суть в том, что вы тоже можете делать это.
- Изучите список популярных разработчиков и ресурсов.
- Напишите свой код и откройте его, или сделайте вклад в существующий проект.
- Вы будете расти как разработчик и на самом деле сможете помочь другим и принести им пользу.
- Работа над открытым проектом хороша для вашего резюме и позволит вам выделиться и получить лучшую работу и клиентов.
Итак. Как я получил все эти ⭐️⭐️⭐️⭐️⭐️?
Мой рецепт
- Выберите правильный проект.
- Сделайте его простым в использовании.
- Напишите лучший README из всех.
- Поделитесь им в правильных местах.
- GitHub Trending.
- Поиск Google.
- Продолжайте расти.
Давайте посмотрим на эти пункты подробнее.
1. Выберите правильный проект
Хороший способ начать — это решить проблему, которая у вас есть. В моем случае, мне нужен был фреймворк для встроенных покупок для одного из моих приложений.
Встроенные покупки это важный инструмент монетизации, который набирает все большую популярность в App Store.
К сожалению, Store Kit от Apple не слишком прост в обращении:
- В нем множество нативных API, большая часть из которых создана в эпоху Objective-C.
- Несколько типов покупок.
- Необходимо рассмотреть вопросы безопасности.
- Тестирование покупок сложный процесс.
Простого и легкого фреймворка для управления IAP не было, а потребность в нем была, так что SwiftyStoreKit стал правильным проектом.
2. Сделайте его простым в использовании
Я попробовал некоторые сторонние библиотеки для IAP в некоторых моих приложениях, но ни одна из них не была настолько проста, насколько я рассчитывал.
Я начал создавать SwiftyStoreKit сразу после того, как Apple выпустила Swift 2 и смог использовать все возможности языка для написания ясного и простого API.
С SwiftyStoreKit вам больше не надо явно регистрировать наблюдателя за очередью платежных операций. Вы просто вызываете асинхронный метод для вашей покупки и обновляете состояние приложения и UI при получении ответа.
Я заимствовал идею и дизайн кода у других популярных open source проектов и пришел к тому, чем сам был доволен.
3. Напишите лучший README
Ваш README это лендинг вашего проекта. Вы должны потратить на него много времени.
Он должен выглядеть хорошо! Если вы делаете UI контрол, включите в него анимированный gif, скриншоты или ссылку на прототип. Прекрасно это сделано у Swift Messages.
На странице должны быть бейджи, рассказывающие о состоянии проекта. Многие используют shields.io. Так что используйте их и вы.
В README должно подчеркиваться:
- Какие функции реализует проект и объяснено, как их можно использовать при помощи понятной документации.
- Как его устанавливать. Примечание: Поддерживайте столько менеджеров зависимостей, сколько возможно, а не только Cocoapods.
- Поддерживаемые платформы. Угадаете? Столько, сколько возможно.
- Поддерживаемые языки со ссылками на соответствующие ветки или теги для разных версий языка.
- Список известных проблем (опционально). Это может быть итогом текущего выпуска в проекте.
Кроме того, вы можете добавить FAQ, ссылки на соответствующие проекты и ресурсы для изучения, список участников и лицензию.
Очень важно: если у вас есть несколько открытых запросов на уточнение информации об использовании проекта, то ваш README недостаточно хорош. Ответьте на запросы и исправьте описание соответствующим образом.
Включение типового проекта
Предоставление такого проекта может очень здорово помочь другим разработчикам в использовании вашей библиотеки.
Если ваш проект станет популярным, то вы увидите, как закладка issues наполняется вопросами. Хороший README и тестовый проект позволяют держать количество таких вопросов под контролем.
4. Поделитесь им в правильных местах
Некоторые пользователи GitHub ведут списки популярных open source проектов для разных платформ и языков. Я сделал Pull Request на включение SwiftyStoreKit в эти списки:
Не ограничивайтесь только GitHub:
- Найдите сайты, которые агрегируют open source проекты и отправьте им ваш.
- Попробуйте пробиться в популярные рассылки по вашему языку или платформе.
- Поделитесь проектом с соответствующими разработчиками и группами в социальных сетях. Хорошо бы засветиться на Product Hunt, Hacker News, Twitter, Reddit.
5. GitHub Trending = Множество ⭐️⭐️⭐️⭐️⭐️
Если вы попадете в список GitHub Trending, то ваш проект сможет действительно получить хороший старт. Для меня это стало сюрпризом. Коллега по работе сказал мне, что SwiftyStoreKit был отмечен в недельном списке по Swift от GitHub. Начиная с этого момента, я стал получать по 50 звезд каждый день!
Как попасть в GitHub Trending? Прочитайте это.
Примечание: такая засветка вызовет большой интерес к вашему проекту, так что будьте готовы активно работать над ним.
6. Бонус: Поиск Google
Другим большим источником трафика стал поиск Google:
Оказывается, поиск «Swift StoreKit” и “Swift In App Purchase» показывает SwiftyStoreKit на втором и четвертом местах соответственно:
Признаюсь, что я не делал никакого исследования ключевых слов для улучшения SEO моего проекта. Он просто попал в топ, как только стал популярным.
Тем более – если вы планируете SEO стратегию для вашего проекта, то результаты могут быть великолепными!
7. Продолжайте расти
Как только ваш проект станет популярным, случится несколько интересных вещей:
- Люди начнут задавать кучу вопросов.
- Люди начнут открывать пул реквесты.
В какой-то момент один контрибьютор портировал весь мой проект на macOS и добавил поддержку проверки покупки. У меня не было никакого опыта в этой области, так что здорово, что кто-то помог мне и сделал проект лучше!
После этого было еще много ценных дополнений и я понял, что сижу на двух стульях одновременно — главного разработчика и сопровождающего.
Чтобы быть хорошим сопровождающим надо быть хорошим судьей:
- Тщательной оценивать запросы на новые функции в интересах поддержания API чистым и во избежание разрастания кода. Это особенно верно для SwiftyStoreKit, так как он должен быть легковесным фреймворком.
- Для каждого пул запроса, добавляющего полезный функционал, не бойтесь запрашивать изменения, если они необходимы для поддержания вашего кода и API ячным и последовательным.
- Вы можете отказаться от пул реквеста, который выходит за рамки или если проект уже покрывает предложенный функционал.
- Всегда будьте вежливы с участниками, и если вы отвергаете их изменения, вежливо объясните почему. Не будьте как Линус Торвальдс. :)
Вещи, которым я научился
SwiftyStoreKit стал прекрасным проектом и впервые вывел меня на роль сопровождающего.
Это заставило меня искать новых знаний по управлению проектами, особенно тогда, когда другие люди делаю свой вклад.
Мне кажется, что тут нужна цитата о стратегическом управлении:
На самом деле, самая большая проблема в ведении open source проекта состоит в необходимости управления. Эта обязанность состоит, в основном, в работе с людьми и и в правильном менеджменте – особенно если проект набрал достаточную популярность. Большинство проектов не становятся достаточно большими, чтобы управление стало обременительным.
Я понимаю, что иногда не мог вовремя ответить на вопросы о моем проекте. Я надеюсь улучшить это со временем и планирую улучшить этот процесс:
- Добавить файл CONTRIBUTING с рекомендациями по открытию вопросов и пул реквестов, как это сделано в популярных открытых проектах.
- Добавить Code of Conduct. (кодекс поведения).
- Добавить покрытие юнит тестами, так как мне нужна уверенность в принятии изменений. На самом деле, мне надо было это сделать давно.
- Добавить статический анализатор кода.
Сейчас я прямо в той точке, когда управление SwiftyStoreKit еще не стало обременительным. Я хочу, чтобы он и мои другие проекты процветали и привлекали участников из комюнити.
Заключение
Написание программного обеспечения с открытым исходным кодом может быть очень полезным опытом, который заставит вас расти вместе с проектами.
Я, как разработчик, за 10 лет помогал командам в разных компаниях и в этом использовал много open source ПО.
Я чувствую, что написание open source кода это отличный способ отдать дань великому сообществу, и я наслаждаюсь процессом.
Вот как можно сделать мир лучше, строчка за строчкой!