Developing Java in Xcode

Version 2
Last Modified: May 6, 2013 11:31 AM

In a better world, no one would have to use Java anymore. Sadly there are still university programs where people are expected to use Java. Rather than cast people into the world of Eclipse, here are instructions on how to get Xcode building Java. These instructions are current as of Xcode 4.6.2. You will need to download a JDK from somewhere.


This is a basic environment meant only for writing simple school programs. It has no debugger. Replace <MyProject> with whatever you want to name your project. Your main project file, main project class, and Xcode project must use this name. Welcome to Java.


1) In Xcode, File > New > New Project > Other > External Build System

2) Give it a meaningful name <MyProject> and save it somewhere. Note the name. You'll need that later.

3) File > New > New File > Other > Empty

4) Give it a Java-friendly name. In my example, use <MyProject>.java

5) Copy the contents below into the file and save.

6) File > New > New File > Other > Empty

7) Save as Makefile.

8) Copy the contents below into the file and save.

9) The "Run" (>) button should at least compile your Java now.


Now it gets tricky. You don't have to do the next part. You could just open a Terminal to your project directory and run java <MyProject> if you want. I strongly suggest that. You can also just type "make" and use Xcode purely as a text editor.

9) Project > Scheme > Edit Scheme > Debug > Info tab

10) Executable > Other > type ^⌘g > type /usr/bin > choose java

11) Change Debugger to None

12) Arguments tab

13) For Arguments Passed on Launch, add $(TARGETNAME)

14) For Environment Variables, add CLASSPATH with a value of $(PROJECT_DIR)

15) For Expand Variables based on, use <MyProject>

16) Click the "Run" (>) button.


PS: I have no idea how to run the Java debugger in Xcode. But then, I have no idea how to run the Java debugger at all.


Here are some starter file contents:

public class HelloWorld


  public static void main(String[] args)


    System.out.println("Hello, World!");





# A simple makefile for a Hello World Java program


# Define a makefile variable for the java compiler

JCC = javac


# Define a makefile variable for compilation flags

# The -g flag compiles with debugging information



# typing 'make' will invoke the first target entry in the makefile

# (the default one in this case)

default: $(subst .java,.class,$(wildcard *.java))


# this target entry builds the Average class

# the Average.class file is dependent on the file

# and the rule associated with this entry gives the command to create it


%.class :

          $(JCC) $(JFLAGS) $<


# To start over from scratch, type 'make clean'.

# Removes all .class files, so that the next make rebuilds them



          $(RM) *.class



NOTE: Those indentations are true tab characters. Ugh!


Good luck on your class. Hopefully you can progress onto more complicated projects and eventually use a real language like Objective-C.