Сегодня к нам попала программа для OS X, которую не пропустили в официальный магазин приложений.
Соскучился по Dev Story? Напоминаю, что в рамках этой рубрики, OS X и iOS-разработчики делятся с нами историями о создании своего софта.
На этот раз речь пойдёт о приложении для OS X, которое позволяет скачивать фото и видео из Instagram с любого публичного профиля (или частного, если ты на него подписан). Да, есть способ сделать это вручную, но придётся лично ковыряться в коде страницы и вытягивать по одной фотографии. Зачем терпеть, когда можно упростить этот процесс?
Нам пишет Борис Карулин.
В этой статье я поделюсь опытом разработки приложения для Mac, которое не было допущено в Mac App Store, и, тем не менее, пользуется популярностью. К сожалению, истории успеха тут не будет, взамен — много интересного опыта.
Идея
Я хотел изучить и опробовать на практике язык программирования Swift, а также новую для себя платформу — OS X. Решено было сделать небольшое приложение, достаточное для получения опыта с одной стороны, и не совсем бесполезное с другой.
До этого я писал на Objective-C под iOS. Кроме того, моё предыдущее приложение (Feeds) было завязано на Instagram, поэтому я решил использовать уже полученные знания для создания чего-то нового.
Итак, простое приложение-утилита для Instagram. После того как я пришёл к этому заключению, идея родилась уже сама собой. Это должен быть браузер для просмотра аккаунтов в Instagram с возможностью сохранения фотографий и видео.
Морально-правовые аспекты
Сразу скажу, что Instagram всеми силами препятствует возможности сохранять фотографии пользователей. Моё мнение — если боишься, что твой бесценный контент кто-то скачает, не выкладывай его в интернет. Я не поощряю пиратство, но мне смешно, когда айтишники из Instagram борются с возможностью сохранения фотографий на диск. В пору подавать коллективный иск на Apple за возможность копирования контента без разрешения автора простым нажатием двух кнопок!
Зуб на Instagram
И если сохранять фотографии не запрещено здравым смыслом, то правилами использования API Instagram это делать запрещено.
Мой предыдущий опыт работы с API показал, что Instagram довольно наплевательски относится к сторонним разработчикам и в любой момент может поменять правила игры и заблокировать часть функций. Так было с моим приложением Feeds, они просто запретили ставить лайки пользователям приложения (про подписки я уже и не говорю, их закрыли с самого начала). После моей просьбы объяснить происходящие, был дан ответ, что от Feeds исходит слишком много активности, похожей на спам.
Что мы имеем в итоге: модерация в Instagram непредсказуема, API запрещает скачивать фотографии пользователей, а залезть в App Store с таким приложением — та ещё задачка. Поэтому я отказался от API с их правилами и решил пойти другим путём — через web-интерфейс Instagram. Конечно, пришлось покопаться в том, как устроены их собственные AJAX-запросы.
Название
Отказ от API дал возможность проигнорировать ещё одно глупое требование — использование корней «insta» и «gram» в названии. Рабочее название приложения было Take, но потом я решил воспользоваться полученным преимуществом и придумал InstaBro, как благозвучное, подразумевающее получение «братской» помощи и являющееся сокращением от Instagram Browser.
Дизайн и возможности приложения
За основу я взял дизайн стандартного приложения Image Capture для импорта фотографий и видео с внешних медиаустройств. Все просто — слева список аккаунтов, справа фотографии в виде таблицы или сетки из превью. Добавил возможность быстрого просмотра видео или фото в максимальном разрешении по пробелу. Для просмотра аккаунтов, закрытых настройками приватности, нужно авторизоваться (если у вас есть доступ к ним). Остальное по мелочам — горячие клавиши, экспорт данных и сохранение медиафайлов с разбивкой по подкаталогам, конечно.
App Store
Когда моя идея воплотилась в жизнь, приложение вышло очень даже полезным. Мне, конечно же, захотелось продавать его через Mac App Store баксов, эдак, за 5-6. Тем более я знал о наличии как минимум одного менее «юзабельного» аналога.
«Пропесочивание»
Когда я начал проходить знакомую по iOS процедуру размещения приложения в App Store, оказалось, что не все так просто. Последние несколько лет Apple пытается контролировать софт, который распространяется через Mac App Store, и называется это «Sandboxing». Суть его заключается в том, что для приложения создаётся своё изолированное окружение (песочница) — структура папок для хранения данных, частично копирующая стандартную (в ~/Library) и явно указанные полномочия на доступ к ресурсам компьютера, такие как: чтение и запись файлов, доступ к сети, доступ к стандартным пользовательским папкам и другие.
Тут у разработчиков возникает две проблемы. Во-первых, не все полномочия доступны для песочницы. В таких случаях надо ходатайствовать о предоставлении «временного исключения» для приложения. Во-вторых, сам механизм работы песочницы накладывает отпечаток на удобство работы с программой. К примеру, пользователь должен явно выбирать каждую папку, к которой хочет иметь доступ приложение, что весьма неудобно в случае, скажем, файлового менеджера. Эти и другие препятствия, за которые ещё нужно отдавать 30% своих доходов привели к уходу ряда популярных приложений из Mac App Store, таких как SourceTree или Sketch.
Мне не потребовалось много времени, чтобы загнать InstaBro в песочницу, и тут начался (точнее продолжился) долгий процесс рассмотрения программы модераторами. В результате которого, моё приложение было отклонено. Формальной причиной отказа была «возможность скачивать пользовательский контент без явного разрешения со стороны сервиса». Ну что же, апеллировать тут особо не к чему, и моя бесславная схватка с модераторами закончилась ничем.
Привет, Интернет!
К счастью, на Mac App Store свет клином не сошёлся, и мне не хотелось, чтобы усилия пропали даром, поэтому я решил заявить миру о своём детище, обустроив для него тёплую ламповую домашнюю страницу. Тут пригодились старые навыки вёрстки: Bootstrap, S3, виджет Facebook, Google Forms и Google Analytics.
Lite версия
В дальнейшем я все-таки пропихнул в App Store lite-версию своего приложения без возможности скачивать фотографии, только лишь для того, чтобы она служила дополнительной рекламой. Из неё пришлось убрать любые упоминания, «побуждающие пользователей скачать основную версию, предназначенную для скачивания фотографий». ОК, я вернул эти упоминания после успешного прохождения модерации.
Анонс на Product Hunt
Итак, приложение есть, сайт тоже есть. Теперь нужен трафик. Недолго думая, решил, что заявить об InstaBro нужно прямиком на Product Hunt, излюбленном месте для анонсов всяких технических новинок и стартапов. Чтобы публиковать там что-либо, нужно получить инвайт. Мне удалось довольно легко выйти на человека, который публикует много анонсов на Product Hunt, и он с радостью согласился анонсировать InstaBro. А заодно выдать мне инвайт на правах автора.
Анонс состоялся 8 февраля. Это не было феерией, но и не превратилось в провал. Я поучаствовал в дискуссии, набрал больше 200 голосов, получил порядка 400 закачек сразу и несколько публикаций на других ресурсах.
Особенную популярность после публикации приложение получило в Южной Корее и Японии.
Полную статистику недели после анонса можно посмотреть на сайте.
Старт продаж
После очень даже неплохого старта я начал задумываться, как немного подзаработать. У меня была кнопка для внесения пожертвований через PayPal на сайте, которая принесла мне целых 20 баксов в первые дни, но что-то мне подсказывало, что таким способом я много не заработаю.
Я начал искать простые варианты монетизации приложений для Mac и вышел на сервис DevMate, отличное решение «все-в-одном» от киевских разработчиков.
Вот список того, что они предлагают:
- Базовая аналитика
- Управление лицензиями
- Автоматические обновления (на основе Sparkle)
- Обработка обратной связи
- Обработка краш-репортов
- Интеграция с сервисом оплаты FastSpring
Почти сразу после начала использования, разработчики объявили, что сервис полностью бесплатен! Удача чистой воды, тем более у такого сервиса практически нет аналогов.
Из серьёзных минусов — интеграция с FastSpring, чьи комиссии мне показались несколько завышенными по сравнению с конкурентами, а формы оплаты — устаревшей. Но количество плюсов явно перевешивало все недостатки, да головной боли поубавилось.
У FastSpring, кстати, есть своя очень привлекательная особенность — возможность вывода средств на дебетовую карту Payoneer MasterCard.
Модель монетизации
Осталось решить вопрос, каким образом брать с пользователей деньги. Я остановился на схеме, похожей на ту, что некогда использовали популярные файлообменники. Чтобы начать скачивать фотографии, пользователю надо выждать 40 секунд, после чего — качать фотографии по одной на низкой скорости. В полной версии можно скачать до восьми файлов одновременно, скорость при этом неограниченна.
Покупка лицензии происходит тут же, через приложение, а ключ приходит сразу после оплаты на почту — спасибо интеграции DevMate c FastSpring. Отказ от App Store даёт преимущество не только в размере комиссии, но и в гибкости предоставления функций. В DevMate, помимо прочего, есть возможность управления сроком действия выданных лицензий.
Каких-то баснословных денег приложение не приносит, но несколько покупок в день совершается. Что интересно, ни одной покупки из России не было, а самый большой процент оплаты после установки — в Германии.
В итоге
- Скачивать фотографии — можно!
- Swift — порадовал!
- Instagram API — в топку!
- Mac App Store — туда же!
- Product Hunt — легко!
- DevMate — супер!
- InstaBro — уже в сети.
Это бесплатно. Прочитайте правила.
23 комментариев
Форум →Мне вообще всегда нравились паразитарные разработчики. Мол, основной сервис сделал всю инфраструктуру, собрал кучу пользователей – а мы все равно будем паразитировать на нем, основываясь на том контенте, который этот сервис генерирует, при этом плюя на его ограничения и всячески хуля авторов.
Была такая сказка, “как хитрый украинец пана обжулил”. Вот, чем-то похоже.
Хотя, казалось бы, что мешает сделать свой аналог сервиса, где подобных ограничений не будет? Но нет, кишка тонка и мозгов маловато, а вот паразитировать и зарабатывать на том, на что плюем и всячески пытаемся обмануть – это, наверное, национальная черта.
@vaily, вообще-то, вам самому может понадобиться такая утилита, когда вы захотите из своего аккаунта (не важно, какой сервис) извлечь ваши данные быстро и легко. Причем тут паразитирование?
@PixelMixel, а ты смешной. Извлечь данные из какого-то сервиса задумал? Да еще быстро и легко? Да еще и свои данные (с каких это пор они вдруг твои)? А ты читал вообще лицензионное соглашение? Причем тут паразитирование? Извлечение откуда-то своей собственной выгоды с минимальными затратами и есть паразитирование.
@PixelMixel, со своего аккаунта можно скачать архив, без всяких ограничений, многие сервисы это изначально представляют
@vaily, Кто мешает реализовать подобный функционал самому владельцу сервиса? Не хочу, не буду? Ну так на тебе, придурок, получи для своего сервиса стороннее решение востребованных пользователями функций.
Я пришел в ресторан, они подают блюда только в тарелках.
Я быдлота, я хочу есть из корыта, поэтому я отвлекаю охрану ресторана, чтобы протащить туда корыто и втихаря хлебаю из него. При этом я пользуюсь инфраструктурой ресторана, столиком, туалетом и т.д.
Есть сервис, есть владелец. Его сервис – его правила. Хочет – есть варенье, хочет – по полу размазывает. Не согласен – вали к чертям.
По крайней мере у “придурка” инстаграма десятки миллионов пользователей, а у умных “сторонних” – с гулькин нос.
А то умные и успешные все чего-то постоянно трутся у подножья стола тупых и придурков. По крайней мере, тупой инстаграм спокойно проживет без этого мега-полезного расширения. А вот умное расширение без тупого инстаграма – вряд ли.
@vaily, Ваше сравнение некорректно. Сторонний разработчик никак не меняет работу сервиса, не подменяет тарелки корытами. А вот, например, заказать в ресторане блюдо и вынести его с собой я могу? Или хозяин прикажет своей охране не выпускать меня с оплаченной мною едой? На каком, собственно, основании?
@vaily, поднял настроение с утра)))
Классно написано, Борис!
Мне было интересно почитать именно про ваш настрой как разработчика во время этой эпопеи с разработкой и публикацией. Конечно, я не верю, что вас совсем не огорчил пинок от Apple, но справились с ним достойно )
Если не секрет, сколько длилась разработка?
P.S. Названия лицензий улыбнули :)
@Kirill Dyakonov, спасибо!
Стараюсь приучать себя не зацикливаться на неудачах, а искать другие решения. И историю эту написал, чтобы других вдохновляла. Здесь помогло еще и то, что я морально был готов к отказу.
Разрабатывал месяца 2-3. Не спеша (:
Автор всячески ругает авторов популярной соц.сети и их справедливый подход к защите пользовательского контента, а сам же паразитирует на ней, молодец.
Приятно видеть разработчиков на айфонес.ру.
А мне в Instagram очень нравится то, что фото нельзя скачать просто так… Какая-то, пусть минимальная и условная защита авторских прав. Хорошо, что хоть в MacAppStore такие приложения периодически отклоняют.
@Liyalo_Ru, скриншот и готово.
@Liyalo_Ru, В первую очередь для защиты нужно убирать кнопку Prt.Scr при массовом изготовлении манипуляторов иначе спасет только watermark.
У меня на айфоне давным давно стоит прога(бесплатная) скачивающая фотки и видео из инстаграм.
Ес чё, статью не читал))
Вот поэтому глупо рассматривать мобильные закрытые платформы типа iOS как платформы будущего. Не пустили софт в магазин и сиди лапу посасывай, или не лапу. Это я так, к слову.
А вообще есть ещё прикольная программа “4K Stogram”, она не только для мака, но и для линукса и виндовса.
@sherba800, про Stogram в курсе, но она у меня просто не заработала, да и прикольного я в ней ничего не усмотрел. Разве что с seo-продвижением у них все в порядке, это да.
@Boris Karulin, Пару недель назад портативку скачал, всё что нужно было выкачал. Пробовал на работе на винде и дома на линуксе. Всё работало.
Про продвижение не знаю, случайно наткнулся на эту контору когда искал качалку с ютуба под линукс, а у них оказалось несколько очень полезных программ под три основные платформы, да ещё и портативные.
@sherba800, может, только с Инстаграмом и только на Маке у них проблемы
Версия для iPhone будет?
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Почему не получается поделиться геопозицией с Apple Watch
Не работают работать звонки и сообщения на Mac после покупки нового айфона. Не работает связка Continuity
Как проверить уровень заряда AirPods на смартфоне с Android
Что делать, если автокоррекция в macOS предлагает иностранные слова вместо русских
Как отключать дисплей Mac без перевода в «режим сна»
Как на iPhone с iOS 18.1 размыть лицо на фото
Как на iPhone включать любимый плейлист после звонка будильника
Тупит Viber на macOS, как исправить