News [23.10.17]: ObjFW 0.90.2 has been released! See the ChangeLog!

News [20.08.17]: ObjFW 0.90.1 has been released! See the ChangeLog!

News [01.08.17]: ObjFW 0.90 has been released! See the ChangeLog!

News [08.10.16]: Please create a fresh clone of ObjFW. My PGP smartcard created invalid signatures and I had to rebase to sign the last 20 commits.

News [04.10.15]: ObjFW 0.8.1 has been released! See the ChangeLog!

News [14.08.15]: ObjFW 0.8 has been released! See the ChangeLog!

News [12.11.12]: ObjFW 0.7.1 has been released! See the ChangeLog!

News [27.10.12]: ObjFW 0.7 has been released! See the ChangeLog! (If you are getting errors during compilation, please re-download the archive!)

News [19.03.12]: ObjFW has switched to Git, so please update your repositories!

News [27.02.12]: ObjFW 0.6 has been released! See the ChangeLog!

News [30.08.11]: ObjFW 0.5.4 has been released! See the ChangeLog!

News [01.07.11]: ObjFW 0.5.3 has been released! See the ChangeLog!

News [21.04.11]: ObjFW 0.5.2 has been released! See the ChangeLog!

News [21.04.11]: ObjFW 0.5.1 has been released! See the ChangeLog!

News [09.04.11]: ObjFW 0.5 has been released! See the ChangeLog!

News [03.01.11]: ObjFW 0.4-alpha1 has been released! See the ChangeLog!

News [19.06.10]: ObjFW 0.3.1 has been released! See the ChangeLog!

News [09.05.10]: ObjFW 0.3 has been released! See the ChangeLog!

News [14.03.10]: ObjFW 0.2.1 has been released! See the ChangeLog!

News [02.02.10]: Please redownload 0.2 as I made a mistake which leads to objfw-config identifying it as 0.1! Additionally, there are .sha512 files now with SHA-512 sums of the files.

News [01.02.10]: ObjFW 0.2 has been released! See the ChangeLog!

News [15.01.10]: ObjFW 0.1.2 has been released! See the ChangeLog!

News [04.01.10]: ObjFW 0.1.1 has been released! See the ChangeLog!

News [24.12.09]: ObjFW 0.1 has been released! See below!

ObjFW project page… or more precisely an FAQ

What is ObjFW?

ObjFW is a portable, lightweight framework for the Objective-C language.

Why would I need ObjFW?

It enables you to write an application in Objective-C that will run on any platform supported by ObjFW without having to worry about differences between operation systems or various frameworks you would otherwise need if you want to be portable.

This all sounds great! Where can I get it?

You can get ObjFW 0.90.2 here (PGP signature) and get the documentation for 0.90.2 here (PGP signature).

Or you can get it from Git. To clone the source tree, just type:
git clone https://heap.zone/git/objfw.git

Alternatively, you can browse the latest revision here.

What license does ObjFW use?

ObjFW is available under the terms of the QPL, GPLv2 or GPLv3. The license text for all three is included in the tarball and you can choose which one to use.
If none of these licenses is acceptable for you, please contact me so we can find a solution (please don't hesitate to do so, as it does not mean you have to pay something!).

But why a new framework? There's Cocoa and GNUstep!

ObjFW is quite different from Cocoa or GNUstep.

If you want to write an application that is not limited to Mac OS X and its Cocoa, you are usually told to port it to GNUstep. But this is already where it starts: You have to port it. And there are differences between Cocoa and GNUstep which can be quite huge sometimes. Cocoa does not have some stuff anymore that's still in GNUstep and GNUstep often does not have stuff that was introduced in Cocoa. So why not have a framework that runs everywhere - on Mac OS X, on other Unices like Linux and even Windows? This way you don't have to write your code for Cocoa and GNUstep. If a function exists in that portable framework, you can be sure it works on any platform. And that portable framework is exactly what ObjFW is.

But it has more differences than that. If you don't plan to be portable, it still offers advantages. For example, GNUstep is still designed for gcc 3.x and does not make use of any features of newer GCCs. But gcc 3.x had very poor ObjC support. It even has advantages to Cocoa: For example, it makes use of exceptions not just for programmer errors, but for other serious errors as well. This way, either the programmer has to handle the error or the program will abort, which can avoid some really nasty bugs and even security holes sometimes.

Another advantage is that ObjFW only includes the core stuff. If you don't want all that GUI stuff and want to write a server, you might be quite unhappy about all the stuff that GNUstep for example needs. And about how badly it integrates into the Unix FHS. With ObjFW, your application will not look different to a native application to the user. A server can just link ObjFW and does not need some "strange" directory structure etc.

Last but not least, you can also mix ObjFW with Cocoa because ObjFW uses a different prefix (OF instead of NS). For example, you can write your application core using ObjFW, but write your GUI using Cocoa and later add a Gtk+ or Qt GUI for Unices, using the same core.

On which platforms does it work?

I recommend looking at the PLATFORMS.md file which is updated as soon as new platforms are tested. But usually, it should work on any POSIX system to which gcc4 or a recent version of LLVM (either llvm-gcc or clang) has been ported. It also works on non-POSIX systems like Windows.

Where can I find documentation?

The documentation is included in the source code. To generate it, you need doxygen. Once you installed doxygen, you can generate it by typing doxygen in the root directory of ObjFW.

You can also browse the documentation for 0.90.2 online.

But the documentation does not say how to compile my code that uses ObjFW!

The easiest way to compile a program using ObjFW is to use objfw-compile. You can use it like this:
objfw-compile -o myapp source1.m source2.m

You can also use objfw-config to get the CPPFLAGS, OBJCFLAGS, LIBS and LDFLAGS required to compile code that uses ObjFW. For example, you could do it like this:
gcc -Wall `objfw-config --all` -o foobar foobar.m

Or, if you don't want to do compilation and linking in one step:
gcc -Wall `objfw-config --cppflags --objcflags` foo.m
gcc -Wall `objfw-config --cppflags --objcflags` bar.m
gcc `objfw-config --ldflags --libs` -o foobar foo.o bar.o

I'm a Mac User and really like Xcode. I'd like to have ObjFW as a framework!

No problem. There's an .xcodeproj included in the source. You can either open it using Xcode and build it or you can just type xcodebuild in the root directory of ObjFW. The result will be a framework instead of a dylib.

Is there a list of 3rd-party libraries for ObjFW?

Yes! There is a wiki page where 3rd-party libraries for ObjFW are listed. However, this list is not official and everybody may add a 3rd-party library there!

I have further questions / feature requests / found a bug. What should I do?

Feel free to mail me at js-spam@heap.zone (remove the -spam). You can also join the XMPP Multi User Chat.

I really like ObjFW. Can I donate?

Sure! If you want to show your appreciation, you can send Bitcoins to 1LobVDvKotgkL15ByK2epQdUwaXJ1GoQWt.