Xcode Pages¶ ↑
The XcodePages gem helps you publish documentation from within Xcode using Doxygen. On Mountain Lion, prerequisites include Doxygen 1.8.2 or above and optionally GraphViz 2.28.0 stable release or above. Drag the Doxygen application to /Applications
as normal. Double-click the GraphViz package to install it.
The term ‘Pages’ comes from the ultimate goal: to publish the HTML web pages on the Internet somewhere appropriate, e.g. on GitHub via the gh-pages
branch feature.
The gem works for Objective-C projects built using Apple’s Xcode IDE. It consequently focuses on documentation within Objective-C and Objective-C++ source files; files ending with extensions h
, m
or mm
.
How to Use Xcode Pages¶ ↑
Step 1¶ ↑
Add a new target to your Xcode project. Suppose your Xcode project has the name MyProject
. Add a new External Build System target called MyProjectPages
.
Step 2¶ ↑
Set the external build target up as follows.
-
Build Tool:
/bin/sh
-
Arguments:
-c "$HOME/.rvm/bin/rvm-auto-ruby -r XcodePages -e XcodePages.doxygen_docset_install"
-
Directory: None
-
Pass build setting in environment: Yes
Note that the arguments above tell the shell to run $HOME/.rvm/bin/rvm-auto-ruby
. This assumes you are running RVM.
Also, do not try to promote your Ruby path to the Build Tool setting unless you have a fixed path to Ruby, e.g. /usr/bin/ruby
. Xcode does not make environment variables substitutions within the Build Tool setting.
Build Settings¶ ↑
Leave Build Settings and Phases as defaults, that is, unless you need to override your PATH
to add some non-standard executable locations. For instance, if you install Doxygen.app using the OS X disk image rather than installing Doxygen using MacPorts and such, then the doxygen
binary lives at /Applications/Doxygen.app/Contents/Resources
. You will need to add that path element to your Unix PATH
environment variable. Similarly, if you install Graphviz from some package and it lives at another unusual location, you will need to add that too. Best place for adding this for Xcode is within Build Settings. Note, Xcode’s sub-processes do not pick up your Bash profile, so setting these search paths up for your user account will not work. Instead, add a setting like this to your Pages build target.
PATH = /bin:/usr/bin:/usr/local/bin:/Applications/Doxygen.app/Contents/Resources:/usr/local/graphviz-2.14/bin
Step 3¶ ↑
Set up a new Doxyfile
in your project’s source root containing four Doxygen settings:
-
GENERATE_DOCSET = YES
-
DOCSET_FEEDNAME = "My Project Documentation Set"
-
DOCSET_BUNDLE_ID = com.domain.MyProjectDocSet
-
DOCSET_PUBLISHER_ID = com.domain.MyProjectDocSet.documentation
-
DOCSET_PUBLISHER_NAME = My Publisher Name
DOCSET_BUNDLE_ID
is the most significant item for this determines the base name for the documentation set. Doxygen just adds extension docset
to make the file name.
Please Note¶ ↑
Be aware that if you specify a Doxyfile
in the project source root folder, any settings provided therein override XcodePages defaults. This may include the INPUT
setting and OUTPUT_DIRECTORY
. Even a blank value overrides the default. You need to comment out or delete the setting to allow XcodePages to auto-generate the appropriate default.
When Pushing to GitHub Pages¶ ↑
When your project uses GitHub for version control, you can conveniently publish the HTML documentation pages by pushing the HTML to branch gh-pages
. However, is a caveat when doing this.
You will need to touch and commit .nojekyll
in the root of your branch. Otherwise, the Doxygen pages will not appear. GitHub uses Jekyll, a blog-aware static site generator that monkeys around with underscores within paths. Unfortunately, Doxygen uses underscore in path names as delimiters, by default. You can switch this off with .nojekyll
or tell Doxygen to use short names using +SHORT_NAMES = YES+ in your Doxyfile
.
In addition, you might want to add some patterns for Git to ignore to your .gitignore
for the gh-pages
branch. The following patterns match Doxygen’s build cruft and the docset
bundle. No need to commit them to GitHub.
-
+*.map+
-
+*.md5+
-
Info.plist
-
Makefile
-
Nodes.xml
-
Tokens.xml
-
+*.docset/+
Step 4¶ ↑
You can now switch target to MyProjectPages
and hit Build (Cmd+B) to compile the documentation. It will appear in folder MyProjectPages
within the source root folder and a new Xcode docset
will appear in +~/Library/Developer/Shared/Documentation/DocSets+.
You would normally have to reload Xcode to see the new documentation. As a courtesy, the last step tells the running Xcode application to pick up the new set.
Benefits¶ ↑
-
Takes the “fiddle” out of fiddling with Doxygen.
There is naturally more documentation, and better too, when generating the documentation is easy. Would it not be easy if you could just type some Doxygen comment blocks in Xcode, press Cmd+B to build the documentation and then immediately read it within Xcode’s documentation? Try out XcodePages! It is that easy.
-
You can easily identify undocumented classes and methods.
Warning messages output by Doxygen make this possible. After building your project Pages target, the build results contain warning about undocumented elements within your project. Press the Cmd+' (Jump to Next Issue command) to navigate through the undocumented code.
Note, however, that you may still need to reload (or even restart Xcode) if your major documentation sections change. Xcode document viewer appears to cache them.
Examples¶ ↑
You can find examples of projects using XcodePages here:
Prerequisites¶ ↑
-
Xcode and associated Apple developer tools
-
Ruby and RubyGems package manager
-
Doxygen