Erlang support in Apple's XCode IDE

Bjorn Gustavsson <>
Wed Aug 18 09:20:57 CEST 2004


Have you tried the new XCode 1.5 that was released recently?

I have tried it myself, but if you are lucky some bugs might have
been fixed.

/Bjorn

Vance Shipley <> writes:

> I had another look at XCode today with a mind to seeing what it
> could offer in my Erlang centric work flow.  After way too much 
> time spent reverse engineering I came to the conclusion that it
> isn't much help now, but it could be ...
> 
> I did however get basic syntax highlighting working and put Erlang
> templates in place for targets and files.  I am giving up for now.
> If anyone else is working on this, or wants to, here is what I found:
> 
> For user specific changes use a base path of:
> 
> $(HOME)/Library/Application Support/Apple/Developer Tools/
> 
> For local system wide changes use a base path of:
> 
> /Library/Application Support/Apple/Developer Tools/
> 
> The system resources are in:
> 
> /System/Library/PrivateFrameworks/DevToolsCore.framework/Versions/A/Resources/
> 
> By copying things from the system files I came up with the following
> files to be added (relative to the base path).  The Specifications 
> directory probably doesn't exist yet so create it.
> 
> Specifications/Erlang File Specification.pbfilespec:
> (
>     //  Erlang Source File Specification
>     {
>         Identifier = sourcecode.erlang;
>         BasedOn = sourcecode;
>         Name = "Erlang source files";
>         Extensions = (erl);
>         ComputerLanguage = erlang;
>         AppliesToBuildRules = yes;
>     }
> )
> 
> 
> Specifications/Erlang Language Specification.pbfilespec:
> (
>     //  Erlang Language Specification
>     {
>         Identifier = erlang;
>         Name = "Erlang";
>         Description = "Erlang";
>         BasedOn = "pbx_root_language";
>         Extensions = ( erl );
>         ComputerLanguage = erlang;
>         AppliesToBuildRules = yes;
>         SupportsIndentation = YES;
>         Indentation = {
>         };
>         SyntaxColoring = {
>             CaseSensitive = YES;
>             UnicodeSymbols = YES;
>             IndexedSymbols = NO;
>             CommentsCanBeNested = YES;
>             String = (
>                 ( "\"", "\"" )
>             );
>             SingleLineComment = (  "%" );
>             DocComment = "%%";
>             DocCommentKeywords = (
>                 "@author",
>                 "@clear",
>                 "@copyright",
>                 "@deprecated",
>                 "@doc",
>                 "@end",
>                 "@equiv",
>                 "@hidden",
>                 "@private",
>                 "@reference",
>                 "@see",
>                 "@since",
>                 "@spec",
>                 "@type",
>                 "@version"
>             );
>             Keywords = (
>                 "after",
>                 "begin",
>                 "case",
>                 "catch",
>                 "end",
>                 "fun",
>                 "if",
>                 "of",
>                 "receive",
>                 "throw",
>                 "when"
>             );
>             PreprocessorKeywordStart = "-";
>             PreprocessorKeywords = (
>                 "behaviour",
>                 "define",
>                 "else",
>                 "endif",
>                 "export",
>                 "ifdef",
>                 "ifndef",
>                 "import",
>                 "include",
>                 "module",
>                 "record"
>             );
>         };
>     }
> )
> 
> 
> Those two additions get XCode to recognize that these are source
> files and will get rudimentary support as such.  An editor is slected
> and syntax highlighting is in effect.  The definition above for the
> syntax higlighting was my first pass and is unquestionably incomplete/wrong.
> 
> To include an Erlang category in the menu for creating files you add the
> directory:
> 
> File Templates/Erlang
> 
> In that directory you can create entries for different file types.
> Name the directories with a .pbfiletemplate suffix:
> 
> File Templates/Erlang/Erlang File.pbfiletemplate/
> File Templates/Erlang/Behaviour/application.pbfiletemplate/
> File Templates/Erlang/Behaviour/supervisor.pbfiletemplate/
> File Templates/Erlang/Behaviour/gen_server.pbfiletemplate/
> File Templates/Erlang/Behaviour/gen_fsm.pbfiletemplate/
> File Templates/Erlang/Behaviour/gen_event.pbfiletemplate/
> ...
> 
> In those directories you put your template .erl files.  You should 
> have a TemplateInfo.plist as well:
> 
> File Templates/Erlang/Behaviour/gen_fsm.pbfiletemplate/fsm.erl
> File Templates/Erlang/Behaviour/gen_fsm.pbfiletemplate/TemplateInfo.plist
> 
> TemplateInfo.plist:
> {
>    MainTemplateFile = "fsm.erl";
>    Description = "An Erlang gen_fsm behaviour module source file.";
> }
> 
> 
> To include an Erlang category in the menu for creating targets add:
> 
> Target Templates/Erlang/
> 
> Target Templates/Erlang/Beam.trgttmpl:
> {
>     Class = Native;
>     ProductType = "erlang.beam";
>     Description = "Target for building an Erlang beam file.";
>     CustomBuildSettings = {
>         INSTALL_PATH = "$(HOME)/ebin";
>         PRODUCT_NAME = "«PROJECTNAME»";
>     };
>         BuildPhases = (
>             {
>                 Class = Sources;
>             }
>         );
> }
> 
> 
> I think we need these files as well:
> 
> Specifications/Erlang Package Types Specification.pbpackspec
> Specifications/Erlang Product Types Specification.pbprodspec
> 
> I gave up after quite some time trying to get the syntax right with 
> these.  It looks like with the right incantations in these files you
> could have a good deal of the supported features.
> 
> For what it's worth I get an "Internal Error":
> File: /SourceCache/DevToolsBase/DevToolsBase-387/pbxcore/Target.subproj/PBXBuildSettingExpansion.m
> Line:	237
> Function:	PBXFindFirstMacroReferenceInRangeOfCFString
> 
> Assertion failed: macroNameRange.length >= 1
> 
> 	-Vance
> 
> Vance Shipley
> Motivity Telecom Inc.
> +1 519 240 3684
> 
> 

-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list