Макрос принудительной проверки для XCode4
Я хотел бы настроить макрос в XCode 4 для извлечения текущего файла из Perforce. Как я могу это сделать? Я неНе волей-неволей интегрировался с моим проектом и не хочу этого делать. Это довольно просто в Visual Studio, но я не знаю эквивалента XCode.
4 ответа:
Самое близкое, что я могу придумать, - это сервис, поэтому похоже, что Xcode 4 Perforce Services может сделать эту работу. Хотя лично я его не пробовал. Я наткнулся на него в этом вопросе .
Только что наткнулся на это в Perforce.com как их средство заставить это работать. Я попробовал, и это довольно хорошо.
Http://answers.perforce.com/articles/KB/2997
Согласно комментарию, он также работает в Xcode 5.
И теперь он протестирован и работает в Xcode 6!
Править: Если это не сработает, и вы используете OS X Mavericks, этот парень исправил сценарий, чтобы он продолжал работать. Просто убедитесь, что скрипт ссылается на p4 правильно. Мне пришлось изменить его с
/usr/local/bin/p4
на/usr/bin/p4
.
- убедитесь, что средство командной строки' p4 'установлено в файле'/usr/local/bin/'.
- убедитесь, что переменные среды Perforce настроены правильно. Я использую 'волей-неволей.rc ' файл в корне каждого рабочего пространства клиента с именем клиента (P4CLIENT) и порта (P4PORT). Не забывайте о P4USER, P4PASSWD, P4CONFIG и т. д...
- Создайте следующий скрипт в папке ~/bin и убедитесь, что разрешения установлены так, чтобы он был исполняемым (755 должен работать).
- вперед к настройкам в Xcode и выберите "поведение".
- прокрутите вниз до "Unlock file"
- прокрутите вниз еще немного и установите флажок рядом с " Run "
- Выберите " Выбрать Сценарий..."и укажите на следующий сценарий:
xcodeunlock.sh
#!/bin/bash # Xcode4 doesn't setup the environment source ~/.bashrc # Delete the URL part from the file passed in fn=${BASH_ARGV#file://localhost} echo "fn=" $fn if [ -a ${fn} ]; then res=$(/usr/local/bin/p4 edit ${fn}) # TODO: Report the status back to the user in Xcode # This output goes to the console. echo $res else echo "FnF" ${fn} fi
Как только это настроено правильно, разблокировка файла в Xcode должна запустить этот скрипт и попытаться извлечь файл. К сожалению, любой вывод идет в '/var / log / system.бревно". Я не знаю, как уведомить Xcode 4 о неудаче в этом сценарии.
Это сводит с ума, пытаясь заставить XCode работать с силой. Вот решение, которое я придумал:
- быстро настраиваемся
- легко записать в мышечную память, так что вам не нужно думать, чтобы проверить файлы
- не требует никакого моушинга вообще
Одноразовая настройка следующим образом:
- Загрузите и установите бесплатное приложение "DTerm" от Decimus Software.
- убедитесь, что у вас установлена утилита командной строки Perforce. Введите "p4" в окне терминала и посмотрите, распознает ли он эту команду. Если нет, вам нужно зайти на веб-сайт Perforce и найти и загрузить то, что они в настоящее время называют "клиентом командной строки Perforce (P4)". Там нет установщика; просто сохраните его из браузера прямо в
/usr/bin
(или что-то еще) и сделайте chmod +x на нем. Для официальных заметок по настройке, а также если вам нужно сделать какие-либо пользовательские трюки с переменными окружающей среды, пожалуйста, смотрите эту техническую заметку.Как только вы закончите допустим, вы находитесь в XCode и просматриваете файл исходного кода, который хотите проверить. Вот канитель:
- есть файл, отображаемый в активном редакторе XCode
- Нажмите
Shift Command Enter
, чтобы получить окно DTerm- введите
p4 edit
, а затем нажмитеShift Command V
, чтобы вставить имя файла активного файла, и нажмите return- Perforce проверяет файл, и DTerm показывает вам состояние / ошибки.
- Нажмите "escape", чтобы закрыть окно DTerm
- начните вносить изменения к файлу в XCode. XCode может (ошибочно) сказать, что файл доступен только для чтения, потому что он тупой и не знает, что он был сделан из read-only для чтения-записи, поэтому вам нужно нажать разрешить редактирование. Сначала я этому не поверил и несколько раз перепроверял, но теперь у меня есть слепая вера в то, что это правильно.
Я не настраивал это в течение некоторого времени, поэтому, пожалуйста, дайте мне знать, если вы столкнетесь с какими-либо сбоями, и я обновлю свою информацию здесь, чтобы сделать это как можно безболезненнее. Но в противном случае, это лучшее решение, которое я нашел.