Как добавить файл в pod

Обновлено: 06.07.2024

Upd: Слайды с прошедшей презентации есть тут.

Проблемы?

Наверное, каждый, кто добавлял в iOS- (или, если брать шире, Cocoa-) проект библиотеку-другую, знает, насколько бесчеловечно организована работа со сторонним кодом в XCode и всём эппловском тулчейне. Особенно очевидна проблема для тех, кто ранее разрабатывал под платформы, где есть развитые средства для управления зависимостями. В частности это Java (и всё разношёрстное JVM-based-племя) c монстрообразным Maven и инструментами на его основе (ivy, gradle, buildr, sbt) и Ruby (с общепринятыми gems и bundler). Собственно, так было и в моём случае. Попробую описать вкратце встречающиеся проблемы.

Установка

Начинается всё с установки. Инструкция по оной к более-менее развесистой библиотеке занимает обычно не один экран текста со скриншотами, да ещё и имеет неприятное свойство устаревать или быть несовместимой с какими-то версиями XCode. Хорошими примерами могут быть RestKit или, например, SQLCipher. Да и если библиотека устанавливается просто добавлением исходников (или статической либы) в проект, процедура скачать-распаковать-перенести-добавить-в-проект начинает несколько доставать. И уж совершенно точно это всё отбивает охоту попробовать несколько библиотек, с тем, чтобы найти подходящую под нужды конкретного проекта.

Хранение

После установки, перед разработчиком встаёт выбор варианта хранения.

  • Положить статически собранную библиотеку в проект и VCS.
  • Положить сорцы библиотеки в проект и VCS. Обычно в какую-нибудь отдельную папочку типа Vendors.
  • Положить сорцы в виде Git-сабмодуля.
  • Держать библиотеки вообще вне VCS.
  • Вытаскивать библиотеки откуда-либо шелл-скриптом при сборке.

У каждого из этих способов есть куча разных достоинств и надостатков. Даже ставшие стандартом де-факто git submodules неидеальны. Библиотека-то может лежать и в SVN. А уж сколько плясок с бубном придётся выполнить, чтобы сменить репозиторий (например, на свой форк библиотеки). Впрочем, на первых порах проблемы вызывает даже процесс обновления исходников.

Подзависимости

Обновление

Вот где начинается главное веселье. Проблемы могут возникнуть уже при попытке определить, а какая, собственно, версия используется сейчас. Хорошо если это сабмодуль, или есть какой-ниубдь README. А если нет? Проблема вовсе не надумана: невозможность узнать текущую версию библиотеки мешает понять, например, исправлен ли в ней определённый баг.

Дальше — интереснее. Хорошим примером тут будет всё тот же RestKit. Обновление с версии 0.9.4 до 0.10.0 с непривычки может легко съесть рабочий день. Тут и пляски с сабмодулем, и обновление Header Search Paths (которые, кстати, теперь, оказываются в разных местах при сборке из XCode и на билд-сервере). По сути, обновление библиотеки, это просто ещё одна установка. Как-то спасают здесь (не всегда) только git submodules.

Решение

Итак, как мы выяснили, проблем при использовании библиотек в Cocoa-разработке возникает целая куча. При этом на других платформах она вполне себе решается использованием dependency management tools, таких как maven или bundler. Как оказалось, альтернатив для платформы от Apple, оказалось даже несколько, однако стандартом де-факто сегодня становится одна: CocoaPods. Этот инструмент создан бывшим Ruby-девелопером Eloy Durán, написан на Ruby, и очень напоминает bundler.

Установка

Cocoapods является рубёвым гемом, поэтому установка проста до безобразия:

Собственно всё, теперь cocoapods установлен на вашей машине.

Podfile

Все зависимости прописываются в специальном файле под названием Podfile . Синтаксис довольно простой. Предположим, мы хотим добавить в наш проект ( Example.xcodeproj ) библиотеку AFNetworking . Создаём в папке с проектом (рядом с .xcodeproj) оный подфайл и пишем туда:

Последняя строчка говорит нам о том, что cocoapods создал workspace с таким же названием, как и наш проект, и теперь надо использовать именно его. Собственно, вот как выглядит папка с проектом после установки подов:

Этот воркспейс состоит из нашего проекта и проекта Pods, содержащего все указанные в подфайле библиотеки с зависимостями и собирающегося в одну единственную библиотеку libPods.a . Собственно, это всё. Никаких копирований-распаковок, никаких ковыряний в build settings. Собcтвенно и хранить-то папочку с проектом Pods в VCS не нужно, достаточно добавить только Podfile и Example.xcworkspace (и то я не уверен, что второе обязательно).

Specs

Естественно, никакой магии в этом нет, вся информация о зависимостях (откуда тянуть файлы, какие есть подзависимости, нужен ли для сборки ARC, какие платформы поддерживаются) содержится в большом репозитории на гитхабе в виде файликов, называющихся Specs. Искать по нему библиотеки можно с помощью команды pod search , или на сайте проекта, а присоединиться к команде мейнтейнеров может любой: достаточно написать свою спеку (это довольно просто) и сделать pull request, что собственно я и сделал.

Кстати, слежение за пулл-реквестами в specs-репозиторий, равно как и слежение за твиттером проекта — хороший способ находить полезные библиотеки, чем я и пользуюсь для своих линкопостов.

Версии и обновление

Cocoapods использует semantic versioning для зависимостей, поэтому их версии можно указывать несколькими способами. Здесь, в принципе, почти всё понятно из синтаксиса.

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

Чтобы обновить библиотеку (или добавить ещё одну), достаточно просто обновить Podfile и опять сделать pod install

Посторонние библиотеки

Всё это прекрасно — скажете вы — но что делать, если нужной мне библиотеки нет в спеках, а заморачиваться с пулл-реквестом лень? Здесь есть несколько способов. Во-первых, можно использовать спеку, не лежащую в главном репозитории:

Во-вторых, можно даже включить спеку прямо в подфайл:

В-третьих, если спека на библиотеку уже есть, но вы хотите использовать другую (более новую, например, версию), можно указать репозиторий, откуда тащить код:

Точное управление зависимостями

Часто, для разных таргетов в проекте необходимы разные зависимости. Классический случай: тестовый фреймворк нужен только для тестов. В этом случае, можно собрать несколько версий libPods:

Опция exclusive указывает на то, что в библиотеку включаются только указанные зависимости. Нужные библиотеки нужно будет прицепить куда надо ручками, но это не так уж и сложно.

Грабли и бонусы

Поскольку cocoapods — молодой проект, то, естественно, не обходится без каких-то проблем. Впрочем, пока всё что я встречал - довольно легко решалось. Одной такой граблей была проблема с тем же злополучным RestKit: как оказалось, необходимо было вместо добавления существующей большой спеки, добавить штук пять под-спек (вида RestKit/CoreData ). Впрочем, возможно это уже починили.

Другая проблема — xcodebuild на билд-сервере не видит схем внутри воркспейса. Для починки нужно один раз открыть воркспейс в XCode на машине, где происходит сборка. Впрочем, эта потеря времени должна компенсироваться наличием кеша для библиотек: лично у меня добавление RestKit в проект запросто добавляет лишние пять минут к сборке на сервере именно за счёт долгого git clone .

Заключение

В общем, по опыту тех нескольких проектов, где я использовал CocoaPods — впечатления очень хорошие. Довольно много времени экономится на добавлении и обновлении библиотек, да и единый их список для проекта очень удобен. Я очень надеюсь, что нам удастся встроить этот инструмент в стандартный процесс iOS-разработки в e-Legion, для чего, собственно я и создал это введение. Спасибо за внимание и пишите фидбеки.

iTunes всегда использовался по умолчанию для передачи файлов с iPhone, iPad, iPod touch и компьютера. Многие любители музыки хотят перенести файлы MP3 с локального компьютера на свой iPod touch. Помимо использования iTunes, существуют также другие решения для передачи музыки в формате MP3 на iPod. В этом посте мы поговорим о как перенести MP3 на iPod с iTunes или без него.

Передача MP3 на iPod

Часть 1. Как скопировать MP3 на iPod с помощью iTunes

iTunes - это стандартный способ передачи файлов Apple. Перед переносом MP3 на iPod с помощью iTunes вам необходимо обнови свой iTunes сначала до последней версии. Ознакомьтесь с подробными инструкциями по копированию MP3 на iPod с помощью iTunes.

Откройте iTunes и нажмите Файл > Добавить файл в библиотеку or Добавить папку в библиотеку для добавления ваших песен в формате MP3 в медиатеку iTunes.

Добавить файл

Нажмите Вид меню в iTunes и убедитесь, что Показать Sidebar включен. Подключите свой iPod к компьютеру, и ваш iPod будет отображаться в УСТРОЙСТВА в боковой панели. Нажмите на свое устройство и выберите Музыка с левой панели. Ты можешь проверить Синхронизация музыки и выберите синхронизацию всей музыкальной библиотеки, видеоклипов или голосовых заметок. Затем нажмите Применить кнопку.

Синхронизация музыки

После этого файлы MP3 будут быстро синхронизированы с iTunes. Вы также можете перейти на Недавно добавленные на вкладке iTunes, перетащите файлы MP3 на свой iPod.

Часть 2. Как перенести MP3 на iPod без iTunes

Хотя iTunes - хороший инструмент для передачи музыки, вы не можете синхронизировать все файлы MP3 с iPod в iTunes. Aiseesoft FoneTrans это профессиональный музыкальный менеджер iPod и передача. Он может не только передавать музыку с компьютера на iPod, как это делает iTunes, но также управлять списком воспроизведения iPod, например добавлять, удалять или создавать новый список воспроизведения. Вы также можете легко создавать рингтоны с помощью этого инструмента для передачи музыки iPod.

FoneTrans

  • Перенос файлов MP3 с компьютера или устройств iOS на iPod.
  • Управляйте музыкой iPod, например, удаляйте, добавляйте, создавайте плейлист, редактируйте теги ID3 и т. Д.
  • Переносите фотографии, видео, музыку, контакты между устройствами iOS, компьютером и iTunes.
  • Поддержите все модели iPod, iPhone и iPad с любыми версиями iOS.
Запустите FoneTrans на вашем компьютере с Windows или Mac. Подключите iPod к компьютеру с помощью кабеля USB. Он быстро обнаружит ваше устройство iOS, и вы можете проверить основную информацию своего iPod в главном интерфейсе.

Презентация

Нажмите на Музыка на левой панели, и вы можете увидеть, что все музыкальные файлы разделены на разные группы.

Нажмите Музыка

Помимо передачи музыки с компьютера на iPod, Aiseesoft FoneTrans также позволяет передавать фотографии, контакты, фильмы, мелодии звонка, подкасты, голосовые заметки и многое другое между устройствами iOS или между iPod и компьютером.

Часть 3. Как записать MP3 в iPod с помощью MediaMonkey

MediaMonkey - это бесплатное и мощное программное обеспечение для управления музыкой, объединяющее управление музыкой, воспроизведение и редактирование тегов. MediaMonkey - это не просто медиа-менеджер и проигрыватель. Передача файлов с iPod. Поэтому, если вы хотите перенести музыкальный файл в формате MP3 на iPod, вы можете вместо этого попробовать MediaMonkey.

Открыв MediaMonkey на своем компьютере, выберите «Инструменты»> «Синхронизировать устройство». Затем выберите свой iPod, чтобы переместить файл MP3 на iPod.

MediaMonkey

Часть 4. Часто задаваемые вопросы о переносе MP3 на iPod

1. Как мне вручную добавлять песни на мой iPod?

Чтобы добавить песни на iPod вручную, вам необходимо сначала подключить его к компьютеру. Откройте iTunes на своем компьютере и щелкните значок iPod. На вкладке «Сводка» прокрутите вниз до «Параметры» и выберите параметр «Управлять музыкой и видео вручную». Затем нажмите кнопку «Готово», чтобы подтвердить выбор, и нажмите кнопку «Применить».

2. Как просмотреть файлы на iPod?

Подключите iPod к компьютеру с помощью USB-кабеля. Нажмите меню «Пуск» и выберите «Мой компьютер». Дважды щелкните диск, на котором находится ваш iPod. В меню «Сервис» выберите пункт «Свойства папки» и перейдите на вкладку «Просмотр». Нажмите на кружок рядом с надписью Показать скрытые файлы и папки. Затем появится папка iPod_Control, в которой вы сможете просматривать файлы iPod.

3. Как перенести музыку с iPod на компьютер?

Если ты хочешь передавать музыку с iPod на компьютер, вы можете положиться на Aiseesoft FoneTrans. Бесплатно скачайте и откройте FoneTrans на вашем компьютере. Подключите iPod к компьютеру через USB-кабель. На вкладке «Музыка» вы можете выбрать музыку, которую хотите передать, и нажать «Экспорт на ПК», чтобы перенести музыку на компьютер.

В основном мы говорили о 3 решениях для передачи MP3 на iPod, и вы можете легко добавить свою любимую музыку на iPod для прослушивания в свободное время. Если вы предпочитаете метод передачи в один клик, вы можете попробовать Aiseesoft FoneTrans, который без проблем перенесет все ваши музыкальные файлы на iPod touch, iPod Classic или iPod Shuffle. По-прежнему возникают проблемы при передаче MP1 на iPod? Пожалуйста, не стесняйтесь оставлять свои комментарии.

Что вы думаете об этом посте.

Рейтинг: 4.7 / 5 (на основе голосов 101) Подпишитесь на нас в

Перенести музыку с iPod на MP3-плеер очень просто. Следуйте этим 3 способам, чтобы взять музыку с iPod и поместить ее в другие MP3-плееры с iTunes или без него.

Чтобы установить Blu-ray DVD на iPod или iPhone, вы можете перенести конвертер Blu-ray на устройства iOS или отразить Blu-ray фильмы с компьютера на iPod или iPhone из статьи.

Как удалить песни из iPod разных типов? Не волнуйся! В статье перечислены 5 различных способов удаления музыки с iPod.

ящик

iOS Transfer

Лучшее программное обеспечение iOS Transfer для управления и передачи файлов iOS с iPhone / iPad / iPod на ваш компьютер или наоборот, без запуска iTunes.

CocoaPods — это очень мощный инструмент, имеющий статус must have для любого iOS Developer'а. С помощью него мы можем легко, быстро и просто подключать различные вкусные тулзы, утилиты и библиотеки, которые значительно облегчают нам жизнь при разработке приложений. Но всяким инструментом надо уметь пользоваться и CocoaPods не исключение.
Под катом информация, которая позволит начать освоение этого инструмента (основано на том, что изложено в документации и собственном опыте). И так, дорогой читатель, отложи в сторону микроскоп, хватит уже им гвозди заколачивать и продолжай читать.

Podfile

Podfile — это как раз и есть та волшебная спецификация, в которой обозначены все зависимости необходимые для нашего проекта. Podfile всегда создает неявную цель (target), названную по умолчанию, которая связывает с первой целью (target'ом) проекта. Этот файл должен быть назван просто Podfile и лежать в одной папке с файлом .xcodepoj.

Для начала очень важно указать для какой платформы и какой ее версии ведется разработка. Это делается вот таким образом:


В этом примере мы указываем, что разрабатываем приложение для iOS версии не ниже чем 8.0

Далее мы можем скрыть все предупреждения от xCode, котоыре касаются подключаемых библиотек:

Target проекта

Если вы хотите использовать подключаемые библиотеки для нескольких target'ов (например для тестов), то для этого можно использовать команду link_with:


В этом примере мы подключаем библиотеки не только для target'а нашего приложения, но и для тестов. Но с этой командой нужно быть предельно осторожным: эта команда подключает все библиотеки к двум target'ам, а иногда это может привести к ошибкам в работе, например не все привычные нам методы API будут работать для Application Extension (тех же виджетов — Today Extension).

Более надежный способ — вручную задать target'ы для которых будут подключаться те или иные библиотеки:


С помощью такого Podfile'а мы определили те библиотеки, которые будут у нас использоваться и для виджета и для приложения (shared_pods). И обозначили какие именно надо подключать для какого target'а.

Версия библиотеки

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


Так мы это делаем как минимум потому, что подобные рекомендации нам как правило дают в ответе по запросу pod search. И с одной стороны это правильно, но сдругой стороны возможны нюансы.

Вы подключили некую библиотеку (с указанием версии как в примере выше) и активно ее используете, потом на некоторое время приостановили работу над проектом, а вернулись только спустя n времени. И возобновить работу вы решили с команды pod update, которая подтянет новые версии используемых библиотек. Запускаем проект и можем столкнуться с тем, что разработчик библиотеки добавил новые методы, а те что используете вы уже объявил как deprecated или удалил вовсе, или принял merge request от другого программиста проверив его не очень внимательно, а тот допустил критичную ошибку и теперь у нас все крашится.

f***

Как избежать ненужных потерь нервных клеток? Иначе указать версию! Возможностей для этого много.

Таким образом мы указываем точно какая версия нам нужна:


Кроме этого мы можем использовать и логические операторы, которые пояснять подпробно нет необходимости: '> 4.1.4' или '>= 4.1.4' или '< 4.1.4' или '<= 4.1.4'.

Более подробно нужно рассказать об операторе '

>'. С помощью него мы можем указать версию, которая нам необходимо, но при этом получать нужные для нее bugfix'ы. Например вот так '

> 0.1.2' мы указываем, что хотим использовать версию библиотеки от 0.1.2 и до 0.2, но не включая версию 0.2. Или указав '

> 0.1' мы указываем, что планируем использовать все версии от 0.1 до 1.0, но не включая версию 1.0.
Кроме этого мы можем указать ресурс репозитория с которого будем загружать библиотеку:

Но и на этом еще не все. Указав ресурс мы еще можем указать нужную нам ветку,

или даже конкретный коммит


image

Автоматизируй максимум или post_install

Иногда бывает так, что после установки той или иной библиотеки, нужно открыть тот или иной файл проекта, который был сгенерирован Cocoapods и добавить/убрать/изменить там какой-то параметр чтобы все работало корректно.

Первое что нам приходит в голову в такой ситуации: сделать все как надо и написать в wiki на gitlab'е. Вроде все окей. А! Еще обязательно написать об этом всей команде в Skype… и сделать рассылку в почте! И ссылку на вики обязательно приложу…
Сделано! А теперь все об этом забыли. Как быть? Использовать post_install!


В примере выше мы после установки всех необходимых библиотек перебираем в цикле все target'ы проекта автоматически создаваемого cocoapods, находим среди них нужный, а затем перебираем настройки этого target'а и найдя нужную добавляем нужную в build settings. В конкретном примере мы для AFNetworking устанавливаем параметр позволяющий использовать эту библиотеку в Application Extensions. И больше никаких записок в wiki. Совсем! Well done!

Это руководство по установке CocoaPods и Realm я написал в большей степени для себя, как заметку! Но, если эта статья кому-то пригодится, то я буду только рад. (-:

Итак, начнем!
Сначала краткое пояснение о том …

CocoaPods — это мощное и одновременно изящное средство управления зависимостями Cocoa-библиотек, которые разработчики используют в своих iOS и macOS проектах.

Realm — это кроссплатформенная мобильная баз а данных для iOS (Swift, Objective-C) и Android. Realm построен чтобы быть лучше и быстрее, чем SQLite и Core Data. Она не просто лучше и быстрее, она легка в использовании, и Вы сможете делать много вещей используя всего несколько строк кода.

Для установки CocoaPods откройте Терминал и введите следующую строку:

Вот и всё! CocoaPods установлен. CocoaPods Guides.

Список часто используемых команд терминала:
help — список команд
help имя_команды — cправка по конкретной команде
cd — перейти в папку выше
cd .. — перескочить в “родную” папку, обычно это /users/имя_пользователя
cd / — перейти в корневую папку диска
cd

— прямой переход в основную папку пользователя /users/имя_пользователя
cd

/Documents — перейти в папку документы принадлежащую тукещему пользователю. Таким образом, можно переходить и в другие папки пользователя
cd Documents/RealmTasks/ — переход в папкуDocuments/RealmTasks/
cd /pictures — попытка перехода в директорию pictures расположенную в КОРНЕВОЙ папке диска
cd pictures — попытка перехода в папку pictures в текущей папке
cd ‘Имя папки’ и cd Имя\ папки — имя папки с “пробелом” должно быть заключено в одинарные кавычки или должен быть обратный слэш перед пробелом
pwd — она показывает, где вы сейчас находитесь (print working directory)

Для начала, нам необходимо создать в Xcode новый проект “Single View Application” и назовем его “RealmTasks” или как Вам нравиться.

Читайте также: