# Working on MacOS Copied from here: # Building raylib without Xcode (statically) Building statically means you can run this application on other machines with ease - users won't have to have any of the frameworks installed that are required. Also, this will work on mac's 10.9 and up. ## Here's the quick instructions: 1. From the command line ``` export MACOSX_DEPLOYMENT_TARGET=10.9 ``` 2. Install XCode tools (don't forget to then update the tools in the Mac App Store after!) ```` xcode-select --install ```` 3. Build Vinora and raylib (Again, this is so the export line takes effect) ``` make ``` You may do the otool check with the file in external/raylib/libraylib.a here if you like. (LC_VERSION_MIN_MACOSX should be version 10.4), and we're good! 4. Build your project! (TODO: THIS NEED TO BE INCLUDED IN MAKEFILE) ``` clang -framework CoreVideo -framework IOKit -framework Cocoa -framework\ GLUT -framework OpenGL libraylib.a my_app.c -o my_app ``` Note: If you are compiling a C++ project, you will need to make sure your compiler supports C++11 standards. With clang you can enable this by passing `-std=c++11`, see https://clang.llvm.org/cxx_status.html for more details. Check for warnings! This can tell you if a library you're linking to was not built for OSX 10.9, in which case you'll need to rebuild that too. Check otool one last time for the LC_VERSION_MIN_MACOSX version: ``` otool -l my_app ``` Last thing, let me show you something cool: ```` otool -L my_app ```` This shows you everything your application links to. Basically, if anything is pointing to anything but /usr/lib/* or /System/Library/*, your application will throw an error if you run it on any other Mac. It's not portable. For example if it's linking to something in /usr/local/lib, or a relative folder, that would be bad. But after the above, you should be clear of dynamic dependencies! # Bundle your app in an Application ```` mkdir standard.app/Contents mkdir standard.app/Contents/MacOS mkdir standard.app/Contents/Resources touch standard.app/Contents/Info.plist ```` The app you just created, "my_app" should go in the MacOS folder. ```` mv my_app standard.app/Contents/MacOS ```` Info.plist should read like this: ```` CFBundleExecutable my_app ```` See more fields you can add here: Now you can double click on standard.app and it will run your application! Note that some things will be cached by the OS. If you want to refresh your application bundle run this: ```` /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -f standard.app ```` This has a whole lot of potentially useful info on all the apps on your system, you can use this to determine if the version is correct I suppose: ```` /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump > dump.txt ```` Just search for your app in dump.txt. # Creating a DMG image for sharing your app You could just as easily do a zip I suppose, but DMGs are fashionable aren't they? Here's a 32 megabyte dmg: 1. Create the writeable dmg. ``` hdiutil create -size 32m -fs HFS+ -volname "My App" my_app_writeable.dmg ``` 2. Attach `my_app_writeable.dmg`. This should tell you something like `/dev/disk3` or something. Make a note of that, you'll need it for the next step. ``` hdiutil attach my_app_writeable.dmg ``` 3. Drag your app into the dmg. Then run this, replacing `disk999` with whatever `/dev/disk` was specified in the previous step. ``` hdiutil detach /dev/disk999 ``` 4. Convert to `my_app.dmg`. ``` hdiutil convert my_app_writeable.dmg -format UDZO -o my_app.dmg ``` 5. Share it. Congratulations, `my_app.dmg` is ready to be sent to all your most trusted game critics.