Какие либы использует auto.ru iOS приложение

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

Первый раз я это встретил в приложениях google. Вот теперь дело дошло до отечественных разработчиков 🙂

Auto.ru — старейший портал об автомобилях в рунете. iOS приложение доступно с 2012 года. Проект был куплен Яндексом в 2014 году.

Посмотрим на библиотеки в iOS приложении auto.ru. Наверняка там будут динозавры и увидим в каком направлении они двигаются сейчас. Ведь библиотек в приложении более 50 штук!

Acknowledgements

А вы знали, что cocoapods может автоматически сгенерировать данную настройку для вашего приложения на основании используемых библиотек? Нет? Теперь знаете. Фича доступна с 2012 года!

Документация простая и ясная, только немного устаревшая.

Требуется добавить post install hook

post_install do | installer |
  require 'fileutils'
  FileUtils.cp_r('Pods/Target Support Files/Pods/Pods-Acknowledgements.plist', 'Resources/Settings.bundle/Acknowledgements.plist', :remove_destination => true)
end

Отредактировать исходное местоположение для  ‘Pods/Target Support Files/Pods/Pods-Acknowledgements.plist’ — добавить имя target’a

Отредактировать конечное местоположение для ‘Resources/Settings.bundle/Acknowledgements.plist’ — в зависимости от созданного местоположения bundl’a

Далее следует заменить или отредактировать Setting Bundle’s Root.plist на следующий

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>StringsTable</key>
	<string>Root</string>
	<key>PreferenceSpecifiers</key>
	<array>
		<dict>
			<key>Type</key>
			<string>PSChildPaneSpecifier</string>
			<key>Title</key>
			<string>Acknowledgements</string>
			<key>File</key>
			<string>Acknowledgements</string>
		</dict>
	</array>
</dict>
</plist>

И в настройках появится Acknowledgements. Пример можно глянуть в Swift Viper Weather App в ветке feature/Acknowledgements

Список библиотек Auto.ru

Без прелюдий список библиотек для iOS приложения auto.ru на начало 2018 года.

  1. ARAnalytics
    • MIT License
    • 1.7k ☆
    • Objective-C
    • Абстракция над большим списком аналитик(Flurry, GoogleAnalytics, Firebase, HockeyApp, Crashlytics, Fabric, AppsFlyer и т.д.) , предоставляющее единое API
  2. adjust
    • MIT License
    • 109 ☆
    • Objective-C
    • SDK для мобильной аналитики adjust.com
  3. Asana
    • MIT License
    • ? ☆
    • Asana представляет из себя менеджер проектов с множеством интеграций. В репозитории под iOS множество форков, какой используется в auto.ru неизвестно. Из своих sdk нет под ios. Возможно, что то для webview из js, npm и т.д. 
  4. Asana by Geor Kasapidi
    • MIT License
    • 0 ☆
    • Objective-C + Swift
    • Расширение для работы с layout из кода
  5. AutoJSON by Geor Kasapidi
    • MIT License
    • 0 ☆
    • Objective-C
    • Расширение для работы с JSON
  6. Bolts
    • BSD-3 License
    • 5k ☆
    • Objective-C or Swift
    • Фреймворк под разные платформы(iOS, Android), который упрощает разработку мобильный приложений. Разработан Parse и Facebook для своих внутренних нужд и выложенных в общий доступ. Tasks — аналог JS promise. Реализован помощник работы с Deep Links.
  7. CocoaLumberjack
    • BSD-3 License
    • 10k ☆
    • Objective-C or Swift
    • Логгер, который не нуждается в представлении.
  8. Crashlitics от fabric.io
    • Commercial License
    • ? ☆
    • Objective-C
    • Аналитика по крашам
  9. FBSDKCoreKit
    • Commercial License
    • 6k ☆
    • Objective-C
    • SDK от Facebook
  10. FBSDKLoginKit
    • Commercial License
    • 6k ☆
    • Objective-C
    • SDK от Facebook
  11. FLAnimatedImage
    • MIT License
    • 6k ☆
    • Objective-C
    • Движок для GIF под iOS
  12. FLEX
    • BSD-3 License
    • 9k ☆
    • Objective-C
    • Набор инструментов для отладки и изменения UI.
  13. FABRIC
    • Commercial License
    • ? ☆
    • Objective-C
    • Набор инструментов для мобильных приложений (теперь уже от Google)
  14. Firebase
    • Apache-2.0 License
    • 548 ☆
    • Objective-C
    • Набор инструментов для мобильных приложений от Google
  15. GRDB.swift
    • MIT License
    • 1.2k ☆
    • Swift
    • Набор инструментов для работы с SQLLite
  16. Gallery
    • MIT license
    • 680 ☆
    • Swift
    • Пикер для картинок и видео
  17. Google Toolbox for Mac
    • Apache-2.0 License
    • 625 ☆
    • Objective-C
    • Набор инструментов для разработчика
  18. IGListKit
    • BSD-3 License
    • 7.5k ☆
    • Objective-C
    • Божественная библиотека для работы с CollectionView. Так же содержит DiffUtil.
  19. INTULocationManager
    • MIT license
    • 2.2k ☆
    • Objective-C
    • Библиотека для работы с геолокацией
  20. LLSimpleCamera
    • Apache-2.0 License
    • 1.1k ☆
    • Objective-C
    • Библиотека для создания кастомизированных экранов видеозаписи, аналогично Snapchat
  21. MBProgressHUD
    • MIT license
    • 14.2k ☆
    • Objective-C
    • Куда же без троббера
  22. MBTraitCollection
    • MIT license
    • 9 ☆
    • Objective-C
    • Расширение VC для работы с объектом UITraitCollection
  23. Mantle
    • MIT license
    • 10.9k ☆
    • Objective-C
    • Библиотека для написания модельного слоя
  24. Nirvana by Geor Kasapidi
    • MIT license
    • 0 ☆
    • Swift
    • Расширения для работы с Async attributed text, расширения для IgListKit — добавления swipe и прочее. Интересно глянуть.
  25. OAStackView
    • MIT license
    • 2.1k ☆
    • Objective-C
    • Порт UIStackView под iOS 7+
  26. PINCache
    • Apache-2.0 License
    • 1.8k ☆
    • Objective-C
    • Быстрый кеш объектов для iOS и MacOs, переработанный форк TMCache  от Pintrest
  27. PINOperation
    • Apache-2.0 License
    • 43 ☆
    • Objective-C
    • Быстрая очередь для iOS и MacOs от Pintrest
  28. PINRemoteImage
    • Apache-2.0 License
    • 3.2k ☆
    • Objective-C
    • Быстрая качалка картинок из интернета + кеш от Pintrest
  29. protobuf
    • Commercial License
    • 23.4k ☆
    • Objective-C
    • Протокол обмена данными между клиентом и сервером от Google, как эффективная бинарная альтернатива текстовому формату XML
  30. PureLayout
    • MIT license
    • 6.8k ☆
    • Objective-C or Swift
    •  API обертка над Autolayout
  31. RACBackports
    • MIT license
    • 1 ☆
    • Objective-C
    • This library contains backports of some useful classes & operators from abandoned pre-swift RAC-3.0 branch.
  32. ReactiveCocoa
    • MIT license?
    • 18.3k ☆
    • Swift
    • Расширения над Cocoa frameworks под работу с ReactiveSwift
  33. RxCocoa
  34. RxSwift
    • MIT license
    • 12.2k ☆
    • Swift
    • Reactive Extension для асинхронного программирования. RxCocoa — Расширения над Cocoa frameworks под работу c RxSwift
  35. RxGRDB
    • MIT license
    • 49 ☆
    • Swift
    • Reactive extensions for SQLite
  36. SDCAlertView
    • MIT license
    • 1.4k ☆
    • Swift
    • Переработка AlertView для кастомного контента и устранения родных ошибок
  37. SKPhotoBrowser
    • MIT license
    • 1.4k ☆
    • Swift
    • Простой фото браузер, написанный под вдохновлением facebook, twitter
  38. SZTextView
    • MIT license
    • 641 ☆
    • Objective-C
    • Замена UITextView с возможностью добавить placeholder
  39. swift-protobuf
    • Apache-2.0 License
    • 1.5k ☆
    • Swift
    • Библиотека для protobuf от apple
  40. TTTAttributedLabel
    • MIT license
    • 7.9k ☆
    • Objective-C
    • Расширение UILabel для работы с текстом. Возможность указать ссылку и т.д.
  41. Texture
  42. vk-ios-sdk
    • MIT license
    • 254 ☆
    • Objective-C
    • SDK от вконтакта
  43. VMBArrayDiff
    • MIT license
    • 1 ☆
    • Objective-C
    • Библиотека для подсчета разницы между двумя массивами на основе LCS алгоритма
  44. VMBCollectionChanges
    • MIT license
    • 1 ☆
    • Objective-C
    • Библиотека для подсчета разницы между двумя наборами данных, необходимых для инкрементального обновления uitableview, uicollectionview
  45. yandex-ads-sdk-ios
    • Commercial License
    • 6 ☆
    • Objective-C
    • Библиотека для работы с рекламой от Yandex
  46. metrica-sdk-ios
    • Commercial License
    • 27 ☆
    • Objective-C
    • Библиотека для работы с метрикой от Yandex
  47. metrica-push-sdk-ios
    • Commercial License
    • 2 ☆
    • Objective-C
    • Библиотека для работы с метрикой push уведомлений от Yandex
  48. yandex-login-sdk-ios
    • Commercial License
    • 1 ☆
    • Objective-C
    • Библиотека для работы с авторизацией через сервисы от Yandex
  49. yoga
    • BSD-3 License
    • 9.1k ☆
    • Objective-C
    • Кроссплатформенный движок разметки, по примеру Flexbox от facebook
  50. libwebp
    • BSD-3 License
    • 432 ☆
    • C
    • Библиотека для работы с изображениями в формате WebP от Google
  51. nanopb
    • MIT license?
    • 701☆
    • C
    • Protocol Buffers with small code size
  52. ok-ios-sdk
    • MIT license
    • 13 ☆
    • Objective-C
    • SDK от однокласников
  53. Chatto
    • MIT license
    • 3.1k ☆
    • Swift
    • Чат от Badoo
  54. MarqueeLabel
    • MIT license
    • 2.1k ☆
    • Objective-C, Swift
    • UILabel со скроллингом, если контент не помещается на экране(и даже такое бывает?) Эффект бегущей строки
  55. NVActivityIndicatorView
    • MIT license
    • 6.5k ☆
    • Swift
    • Различные индикаторы
  56. Starscream
    • Apache-2.0 License
    • 3.5k ☆
    • Swift
    • Реализация Websocket (RFC 6455)

Вывод

Ну конечно же приложение написано на Objective-C, но новая функциональность пишется уже на Swift. Не было замечено какого либо DI контейнера, а именно Typhoon. Возможно есть самописный service locator или подобное. А может и нет. Возможно отсутсвие DI облегчило переход на swift. А может и нет.

Пройдемся по слоя приложения.

Presentation layer

UI написан с помощью Texture(AsyncDisplayKit), autolayout через код(Purelayout). Старые модули для таблиц и коллекций используют библиотеки  VMBCollectionChanges, новые написаны через IGListKit(рекомендую). Много мелких либ для Label, TextView, AlertView, StackView, пикеров под фото/видео. Использование библиотек от pinterest для работы с картинками. Классические тробберы и индикаторы. Чатик от Badoo + вебсокеты. Ну и куда же без Rx.

Из странного — yoga. Why? Where?

Из интересного — MBTraitCollection, FLEX. Любопытно глянуть на case использования. Расширения для CollectionView и IGListKit — Nirvana. Добавляют функциональность таблиц.

Business layer

Тут правит бал Rx. И самое интересное, что несколько различных либ для реактивного программирования. Старые ReactiveCocoa и новый Reactive Extensions. Это видимо связано с переходом на Swift. Не представляю какой там адок творится в фасадах между старыми и новыми сервисами 🙂

Core layer

Страшное место, где перемешаны PINOperations, Bolts + protobuf. Ну и щепоточка Rx для SQLLite. Много SDK от соц сетей и аналитик, крашлитиков.

Из интересного обертка ARAnalytics на всеми аналитиками.

Model layer

Mantle.

Из интересного — самописная работа с JSON(AutoJSON).

Добавить комментарий