#!/usr/bin/env bash # Copyright 2012 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # Illustrates how a Go language specification can be installed for Xcode 4+, # to enable syntax coloring, by adding an entry to a plugindata file. # # FIXME: Write a decent Xcode plugin to handle the file type association and # language specification properly instead of altering Xcode library files. set -e # Assumes Xcode 4+. XCODE_MAJOR_VERSION=`xcodebuild -version | awk 'NR == 1 {print substr($2,1,1)}'` if [ "$XCODE_MAJOR_VERSION" -lt "4" ]; then echo "Xcode 4+ not found." exit 1 fi # DVTFOUNDATION_DIR may vary depending on Xcode setup. If Xcode has installed # the `xcode-select` command, it will be determined automatically. Otherwise, # change it to reflect your current Xcode setup. Find suitable path with e.g.: # # find / -type f -name 'DVTFoundation.xcplugindata' 2> /dev/null # # Example of DVTFOUNDATION_DIR's from "default" Xcode 4+ setups; # # Xcode 4.1: /Developer/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/ # Xcode 4.3: /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/ # Defaults to Xcode 4.3's DVTFOUNDATION_DIR. Path is modified automatically if # `xcode-select` command is available, as mentioned above. DVTFOUNDATION_DIR="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/" if type "xcode-select" > /dev/null; then DVTFOUNDATION_DIR=`xcode-select --print-path` DVTFOUNDATION_DIR+="/.." FRAMEWORK_NAME="DVTFoundation.framework" DVTFOUNDATION_DIR=`find $DVTFOUNDATION_DIR -name $FRAMEWORK_NAME -print` DVTFOUNDATION_DIR+="/Versions/A/Resources" fi PLUGINDATA_FILE="DVTFoundation.xcplugindata" PLISTBUDDY=/usr/libexec/PlistBuddy PLIST_FILE=tmp.plist # Provide means of deleting the Go entry from the plugindata file. if [ "$1" = "--delete-entry" ]; then echo "Removing Go language specification entry." $PLISTBUDDY -c "Delete :plug-in:extensions:Xcode.SourceCodeLanguage.Go" $DVTFOUNDATION_DIR/$PLUGINDATA_FILE echo "Run 'sudo rm -rf /var/folders/*' and restart Xcode to update change immediately." exit 0 fi GO_VERSION="`go version`" GO_LANG_ENTRY=" Xcode.SourceCodeLanguage.Go conformsTo identifier Xcode.SourceCodeLanguage.Generic documentationAbbreviation go fileDataType identifier com.apple.xcode.go-source id Xcode.SourceCodeLanguage.Go languageName Go languageSpecification xcode.lang.go name The Go Programming Language point Xcode.SourceCodeLanguage version $GO_VERSION " echo "Backing up plugindata file (copied to $PLUGINDATA_FILE.bak)." cp $DVTFOUNDATION_DIR/$PLUGINDATA_FILE $DVTFOUNDATION_DIR/$PLUGINDATA_FILE.bak echo "Adding Go language specification entry." echo $GO_LANG_ENTRY > $PLIST_FILE $PLISTBUDDY -c "Merge $PLIST_FILE plug-in:extensions" $DVTFOUNDATION_DIR/$PLUGINDATA_FILE rm -f $PLIST_FILE echo "Installing Go language specification file for Xcode." cp $GOROOT/misc/xcode/4/go.xclangspec $DVTFOUNDATION_DIR echo "Run 'sudo rm -rf /var/folders/*' and restart Xcode to update change immediately." echo "Syntax coloring must be manually selected from the Editor - Syntax Coloring menu in Xcode."