Skip to content

Instantly share code, notes, and snippets.

@langyufei
Forked from springmeyer/mapnik-ios-sdk.md
Created September 23, 2013 13:50
Show Gist options
  • Save langyufei/6670658 to your computer and use it in GitHub Desktop.
Save langyufei/6670658 to your computer and use it in GitHub Desktop.

Setup and Test Mapnik iOS SDK v2.2.0

First set up a project directory to hold your work:

cd ~/projects
mkdir mapnik-ios-test
cd mapnik-ios-test

Next clone the mapbox-ios-example repo to get the MapBox iOS SDK and example code setup

git clone [email protected]:mapbox/mapbox-ios-example.git
cd mapbox-ios-example

Download and unpack the Mapnik iOS SDK

curl -f -O http://mapnik.s3.amazonaws.com/dist/v2.2.0/mapnik-ios-v2.2.0.tar.bz2
tar xf mapnik-ios-v2.2.0.tar.bz2 # will give you a 'mapnik-ios' directory
# put the protoc compiler on your path so you can build mapnik-vector-tile
export PATH=`pwd`/mapnik-ios/bin:$PATH

Get the mapnik-vector-tile code and build it

git clone [email protected]:mapbox/mapnik-vector-tile.git
cd mapnik-vector-tile
make
cd ../

Set up the MapBox SDK

git submodule update --init --recursive
# checkout `mapnik` branch of MapBox SDK
cd MapBox-iOS-SDK
git fetch -v
git checkout mapnik
cd ../

Now create an xcconfig file dynamically based on the Mapnik SDK build settings

# reference on options: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html
echo 'COMPRESS_PNG_FILES = NO' > mapnik-ios.xcconfig
echo 'GCC_VERSION = com.apple.compilers.llvm.clang.1_0' >> mapnik-ios.xcconfig
echo 'CLANG_CXX_LANGUAGE_STANDARD = gnu++98' >> mapnik-ios.xcconfig
echo 'CLANG_CXX_LIBRARY = libstdc++' >> mapnik-ios.xcconfig
echo 'OTHER_CPLUSPLUSFLAGS = $(inherited) -I"$(SRCROOT)/mapnik-ios/include/" -I"$(SRCROOT)/mapnik-vector-tile/src/" '$(./mapnik-ios/bin/mapnik-config --defines) >> mapnik-ios.xcconfig
echo 'OTHER_LDFLAGS = $(inherited) -L"$(SRCROOT)/mapnik-ios/lib" -lmapnik -lprotobuf-lite '$(./mapnik-ios/bin/mapnik-config --dep-libs) >> mapnik-ios.xcconfig

Now open the sample project that came with the mapbox-io-example clone

open "MapBox Example.xcodeproj"

Add the mapnik-ios.xcconfig to your project: a good way to do this is drag/drop in into your MapBox Example> Supporting Files

Then edit the Project > Info > Based on Configuration File and set the Release and Debug configurations at the project level to use 'mapnik-ios.xcconfig'. NOTE: only set it at the project level, not the target. All targets should inherit from the project level xcconfig setting. If you are not seeing this happening try cleaning the project multiple times or closing and re-opening XCode (it tends to frustratingly and mysteriously cache things).

Now we are ready to test building the project. Hit Build and Run.

Next let's test actually including Mapnik C++ headers:

  1. Find some view controller code like MapBox Example/OfflineLayerViewController.m

  2. Either change the extension to .mm or set the Identity and Type > File Type to Objective C++ Source

  3. In your view controller code put #include <mapnik/map.hpp> near the top of the file and the following code inside the viewDidLoad:

     mapnik::Map m(256,256);
     NSLog(@"map dimensions: %d/%d", m.width(), m.height());
  1. Do a test build and make sure compile and linking is working.

  2. If it is working your Mapnik iOS SDK is working. If you hit missing headers or link errors then please create an issue at https://github.com/mapnik/mapnik-support/issues to report the problem

Note: a common problem is for the <mapnik/map.hpp> header to not be found. This is because the mapnik-ios.xcconfig is either not set up correctly or being read by your project correctly. Please repeat the setup steps again to make sure you did not miss anything.

Next steps: COMING SOON

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment