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:
-
Find some view controller code like
MapBox Example/OfflineLayerViewController.m
-
Either change the extension to
.mm
or set theIdentity and Type > File Type
toObjective C++ Source
-
In your view controller code put
#include <mapnik/map.hpp>
near the top of the file and the following code inside theviewDidLoad
:
mapnik::Map m(256,256);
NSLog(@"map dimensions: %d/%d", m.width(), m.height());
-
Do a test build and make sure compile and linking is working.
-
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
I am waiting ...