Development

The source code for Vienna lives at GitHub. This section is intended to help you get started with downloading and building Vienna on your own machine. See the Vienna GitHub Page to quickly browse the Vienna sources. The rest of this page explains how to download the source to your machine.

To make modifications to the Vienna source code, you will need a working knowledge of Objective-C and the Cocoa framework. See the Apple Developer’s Web Site for more information on XCode, Objective-C and Cocoa.

Getting Started

The Vienna source code has to be be checked out (or cloned, in Git terms) to a folder whose path does not contain spaces. This is a limitation of the project file that will likely be fixed in the future but, for now, make sure the full path to the Vienna source folder does not have any spaces in it.

The trunk contains the current development version and all changes should be contributed to it.

Get coding, and send us a pull request from your GitHub repository when your patch is ready.

Contributing Changes

We welcome improvements and bug fixes to the Vienna source code. While you are free as per the terms of the Apache 2.0 license to reuse parts of the Vienna code in your own project, please consider contributing any improvements in Vienna itself back to us so we can review and add to the main source tree.

If you are looking for ideas to work on, please see theVienna Bug Tracker for bugs that need fixing or the file TODO in Vienna’s source code folder for features that have been requested. Please let us know what you are working on by posting a note in the Vienna Development Forum. Feel free as well to post any questions or comments you may have about Vienna development. We’re happy to help, and we encourage developers to join the Vienna project.

Documentation

Vienna’s source-code is very well documented. Read the (many, many…) comments and use the debugger to work out which functions do what. If the code becomes large enough then we might write a high level architecture overview but right now the source code is documentation enough. If you are contributing changes, please ensure you follow the coding style used by the rest of the code. That means – function header style, nesting, spacing between keywords, etc. Consistency is important here.

Development-related Discussion

Coding Guidelines

We don’t accept patches (pull requests, in Git lingo) unconditionally. While the license for Vienna permits you to make your own changes and redistribute them as you see fit, we have our own quality bar for changes that are submitted to the official build so please take a moment to read the below before you start making changes.

Source code style is crucial. Look at the existing code and note the layout of the code, the use of tabs vs. spaces, braces, indents and spaces before and after parenthesis and pointers. We’ll undertake minor cleanups if necessary but if your contribution is large and doesn’t adhere to the style of the rest of the code, we’ll bounce it back for cleanup.

Every function has a comment block at the beginning. If you add new functions, add comments. They are there to help with future source code indexing and also to make sure that the intent and usage of the function is clear to anybody who maintains it in future.

If you want to pick something from the wish-list to implement then let us know first so we can mark it as “in progress” and avoid duplicate effort.

UI changes have a high bar and we recommend you discuss your idea with us first before going ahead and implementing.

Non-UI changes don’t have such a high bar so if you have a patch or a nifty idea, feel free to code it up and send us a pull request.

We review all patches before we accept them. For small bugs we’ll probably make any fixes ourselves. Larger problems get bounced back for correction.

Localization

We welcome volunteers who are willing to contribute by localizing Vienna into other languages. The below table shows the current languages into which Vienna is already localized:

English

Swedish

French

Italian

German

Dutch

Traditional Chinese

Spanish

Japanese

Korean

Brazilian Portuguese

Simplified Chinese

Danish

Czech

Euskara (Basque)

Russian

Ukrainian

Additional languages planned for which volunteers are needed:

Arabic

Polish

Portuguese

Hebrew

If you wish to volunteer to localize Vienna for any of the above languages, contact us at the Developer Forum.

Tools

To create localised versions of Vienna, you will need the same tools that are required to build Vienna. If you would prefer to work outside of Subversion, then an alternative approach is to copy the English.lproj file from the most recent build of Vienna and work on that.

Apple provides tools on its web site that may help you with your efforts. Note that we don’t mandate the use of any specific tools. It is up to you to use whatever you find works best for you.

You need Subversion to enlist in the source code and obtain the latest changes in the English.lproj folder for localization.