Встроенные фрагменты Xcode

Есть ли способ редактировать встроенные фрагменты Xcode? Существует кнопка редактирования, но нажатие на нее, похоже, не позволяет изменить текст фрагмента.

Любое понимание понимается.

Ответ 1

Вы по-прежнему не можете редактировать встроенные фрагменты системы. Однако вы можете редактировать "пользовательские" фрагменты.

Самое простое решение, на мой взгляд, заключалось в том, чтобы создавать копии всех стандартных фрагментов, но изменять их так, чтобы они были "пользовательскими" фрагментами и переопределяли версии по умолчанию. Я написал небольшой Python script, чтобы выполнить эту работу. Это очень просто, и после запуска все фрагменты Xcode будут редактироваться магически с помощью графического интерфейса Xcode. Не нужно трахаться в plist вручную:

import plistlib
import os.path

# Create user snippet directory if needed.
user_snippet_path = os.path.expanduser("~/Library/Developer/Xcode/UserData/CodeSnippets")
try: 
    os.makedirs(user_snippet_path)
except OSError, err:
    if err.errno != errno.EEXIST or not os.path.isdir(user_snippet_path): 
        raise

# Important, you'll need to quit and restart Xcode to notice the effects.
# Important, change this if you're on a Developer Preview of Xcode.
system_snippet_path = "/Applications/Xcode.app/Contents/PlugIns/IDECodeSnippetLibrary.ideplugin/Contents/Resources/SystemCodeSnippets.codesnippets"

print("Reading snippets from " + system_snippet_path)
plist = plistlib.readPlist(system_snippet_path)
for entry in plist:

    # Create a new user snippet file with modified
    # contents of the original snippet. Ignore paths that
    # already contain a user snippet to prevent overwriting
    # previously generated snippets.
    snippet_id = entry["IDECodeSnippetIdentifier"]
    snippet_path = user_snippet_path + "/" + snippet_id + ".codesnippet"
    if os.path.exists(snippet_path):
        print(snippet_path + " already exitsts: Skipping.")
        continue

    print("Writing " + snippet_path)

    # Marks the snippet as a user snippet. Xcode will
    # crash if a user snippet and a system snippet share
    # the same identifier.
    entry["IDECodeSnippetUserSnippet"] = True

    # Given two snippets with the same identifier,
    # Xcode will only show the snippet with the higher
    # "version number". This effectively hides the
    # default version of the snippet.
    entry["IDECodeSnippetVersion"] += 1

    plistlib.writePlist(entry, snippet_path)

print("Done writing snippets.")

Вы заметите, что на самом деле он не меняет никаких внутренних файлов Xcode. Он просто добавляет файлы, а Xcode достаточно умен, чтобы использовать добавленные файлы вместо оригинальных фрагментов. Вы можете вернуться к оригиналам в любое время, просто удалив пользовательскую версию фрагмента. Вы также можете запускать script столько раз, сколько хотите, не беспокоясь о перезаписке любых пользовательских фрагментов, сгенерированных предыдущими прогонами script.

Ответ 2

Там есть большой маленький инструмент под названием "Редактирование фрагментов". Я просто попробовал, и очень рекомендую. По-видимому, это было приложение для оплаты, но автор теперь дает его бесплатно.

http://cocoaholic.com/snippet_edit/

Ответ 3

Вы можете редактировать фрагменты кода системы вручную:

  • Перейдите в этот каталог: "/Developer/Library/Xcode/PrivatePlugIns".
  • Показать содержимое пакета "IDECodeSnippetLibrary.ideplugin"
  • Откройте "Содержание/Ресурсы/SystemCodeSnippets.codesnippets" в виде текстового файла
  • Изменить его

.codesnippets file.plist, но некоторые строки, введенные с CR/LF, и не могут быть отредактированы стандартным редактором plist.

Ответ 4

Вы можете редактировать фрагменты системы Xcode с помощью текстового редактора и знать расположение файла фрагментов кода системы. В Xcode 5.1.1 расположение файла фрагментов кода системы еще раз изменилось на:

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

и у вас должны быть привилегии root для редактирования файла plist на месте, потому что его владелец и разрешения:

$ ls -l /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets
-rw-r--r--  1 root  wheel  190 May 16 18:23 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/SystemCodeSnippets.codesnippets

Щелевые словарные клавиши довольно понятны и для IDECodeSnippetIdentifier, вы можете самостоятельно генерировать UUID, используя например, команда:

$ uuidgen
42F6B133-5DA3-41DB-8874-4E10E447F723

После того как вы отредактировали файл, используя, например, sudo и ваш редактор, вы необходимо перезапустить Xcode, чтобы получить ваши изменения.

Счастливый взлом!

Ответ 5

Либо это ошибка, либо функция. Я верю этому последнему. Вы можете добавить свои собственные фрагменты, но вы не можете редактировать встроенные. Я бы просто сделал новый фрагмент и настроил его так, как вы этого хотите.

Ответ 6

Я написал script сегодня, который использует python и uncrustify, чтобы вытаскивать фрагменты из предоставленных Xcode, переформатировать их по своему вкусу и выгружать их в каталог, где я могу импортировать их в ~/Library/Developer/Xcode/USERDATA/CodeSnippets. Это на github здесь: Xcode4Customization