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