Показаны сообщения с ярлыком Terminal. Показать все сообщения
Показаны сообщения с ярлыком Terminal. Показать все сообщения

19 февр. 2015 г.

Xcode. Синхронизация ваших сниппетов.

Во время разработки приложений очень часто приходится писать один и тот же код или реализацию какого-нибудь алгоритма (взять тот же банальный rootViewController). Чтобы тратить меньше времени на написание монотомного кода создаю сниппеты.

Через некоторое время стал вопрос (т.к. иногда приходится брать работу на дом, да и не отставать в своих проектах) - КАК синхронизировать свои сниппеты с "домашней" средой разработки и наоборот.

Перелопатив кучу интернет-ресурсов и информации толком так ничего и не нашел. Но вопрос оставался открытым, уже выкинул из головы эту тему, НО, тут на днях по некоторой воли "случайности" наткнулся на зарубежную статью. Решение синхронизации между IDE оказалось довольно простым (все телодвижения проводим в терминале):

$ cd ~/Library/Developer/Xcode/UserData
$ mv CodeSnippets /Dropbox/Xcode/
$ ln -s ~/Dropbox/Xcode/CodeSnippets/ CodeSnippets

Логично использовать, вместо Dropbox, свой любимый облачный сервис.
Главное что стоит помнить - Данные манипуляции проводятся только на одной стороне. На другой стороне нужны только первая и третья строчки, не забыв перед этим удалить папку CodeSnippets, а потом уж создавать симлинк на папку в Dropbox`е.

8 мар. 2014 г.

Не убиваемое приложение на OS X

Небольшая, невинная шалость, которую Вы можете сделать своему другу на его Маке. Инструменты которые нам понадобятся:

- Текстовый редактор;
- Терминал.

Предполагаю что у Вас уже есть некоторые знания по запуску приложений из терминала (launchd) и использованию launchctl инструмента. Все что нужно для не убиваемого приложения (будь то какое-нибудь фоновое приложение) это определить его в качестве сервиса / процесса ( службы) и запустить (получится что если вы его убьете (kill), то система автоматически его снова запустит). launchd используется для администрирования службы на OS X. У него есть инструмент launchctl который запускает / останавливает сервис / процессы (службу). Также - каждая служба определяется с помощью plist - файла. Давайте создадим такой файл:

<plist version="1.0">
 <dict>
    <key>Label</key>
    <string>com.apple.SafariService</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Applications/Safari.app/Contents/MacOS/Safari</string>
    </array>
    <key>OnDemand</key>
  <false/>
 </dict>
</plist>

Дальше все просто. Мы его обзываем как com.apple.SafariService и делаем его как исполняемое  (даем права на выполнение/запуск) дополнение Safari. Опция OnDemand говорит, что он должен всегда работать. Сохраняем XML как файл с именем com.apple.SafariServicе.plist и помещаем его в папку ~/Library/LaunchAgents. Теперь для "не убиваемой части" - откройте терминал и введите следующую команду:

$ launchctl load ~/Library/LaunchAgents/com.apple.SafariService.plist

Это запустит Safari, если он не работает. Также - это будет перезапускать Safari как только вы попытаетесь выйти из него. То же самое касается kill - как только вы отправите службе сообщение SIGTERM - ОС будет перезапускать приложение. Вот и все. Удачного издевательства!