Skip to content

Instantly share code, notes, and snippets.

@springmeyer
Last active December 22, 2015 14:26
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save springmeyer/5710531 to your computer and use it in GitHub Desktop.
Save springmeyer/5710531 to your computer and use it in GitHub Desktop.
Setup Mapnik iOS SDK v2.2.0

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 git@github.com: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 git@github.com: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

@mohpor
Copy link

mohpor commented Feb 20, 2014

Is it possible to have OSM / GDAL / OGR libraries into the fat binary of mapnik for iOS?
better yet, is it possible to share the makefile or bash file to compile manik for iOS on mac osx? (I can see that you use scone for building Mapnik, is it possible to change the script for arch. armv7x?)
or is it possible to have other libs included in the project on demand.
I don't see libshape (ESRi Shape files) in the lib directory.

@svelmuruganrvs
Copy link

When i tried to execute make for mapnik-vector-tile by following comment's

cd mapnik-vector-tile

make

i am getting the Error as follow in OSX 10.10.5, Xcode 7.1.1
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:434:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__config:23:10: fatal error:
'unistd.h' file not found

include <unistd.h>

     ^

1 error generated.
make[1]: *** [Release/obj.target/vector_tile/gen/vector_tile.pb.o] Error 1
make: *** [libvtile] Error 2

does anyone know about it ??

regards

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