Authored by Hal Mueller

added draft library-build instructions, modified Yahoo descriptions

This group contains the mapview -specific files and logic.
The Route-Me project is receiving frequent updates from its developer community. For
this reason, you'll probably want to have your hands on the source of Route-Me while
you're developing your own project. If you want to link the Route-Me .xcodeproj to your
own program, please follow the Embedding Guide, found at
http://code.google.com/p/route-me/wiki/EmbedingGuide
Use the "MapView" target.
If you just want to produce a library framework to drop into your app, without project
dependencies or source-level debugging, follow the instructions in README-library-build.rtf
and use the "MapView-framework" target.
It replaces the older 'Classes' directory + files.
For a guide on how to incorporate this map into your own project, please read this:
http://code.google.com/p/route-me/wiki/EmbedingGuide
... ...
... ... @@ -60,15 +60,15 @@
}
-(NSString *)longDescription
{
return @"Yahoo Map, There may be a legal way to access this, someone should investigate.";
return @"Yahoo Maps are severely restricted by Terms of Service for typical Route-Me applications. This sample code is for demonstration purposes only.";
}
-(NSString *)shortAttribution
{
return @"© Yahoo";
return @"© Yahoo Maps";
}
-(NSString *)longAttribution
{
return @"Map data © Yahoo, though the way we are acessing these tiles is against TOS.";
return @"© Map data © Yahoo, though the way we are accessing these tiles is against the Yahoo Terms of Service.";
}
@end
... ...
... ... @@ -149,6 +149,7 @@
288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
2B5682700F68E36000E8DF40 /* RMOpenAerialMapSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMOpenAerialMapSource.h; sourceTree = "<group>"; };
2B5682710F68E36000E8DF40 /* RMOpenAerialMapSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMOpenAerialMapSource.m; sourceTree = "<group>"; };
2BF0E4570F7312B10095A926 /* README-library-build.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = "README-library-build.rtf"; sourceTree = "<group>"; };
32CA4F630368D1EE00C91783 /* MapView_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapView_Prefix.pch; sourceTree = "<group>"; };
3866784C0F6B9B9200C56B17 /* MapView.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapView.framework; path = build/MapView.framework; sourceTree = "<group>"; };
38D9428D0F6C6D0D00454287 /* Canonical.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Canonical.framework; sourceTree = "<group>"; };
... ... @@ -219,7 +220,7 @@
B86F26E10E877802007A3773 /* DesktopMapView-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DesktopMapView-Info.plist"; sourceTree = "<group>"; };
B885ABB00EBB1332002206AB /* RMCloudMadeMapSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMCloudMadeMapSource.h; sourceTree = "<group>"; };
B885ABB10EBB1332002206AB /* RMCloudMadeMapSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMCloudMadeMapSource.m; sourceTree = "<group>"; };
B8C9740E0E8A198F007D16AD /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; };
B8C9740E0E8A198F007D16AD /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README.txt; path = Map/README.txt; sourceTree = "<group>"; };
B8C974590E8A19B2007D16AD /* libMapView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMapView.a; sourceTree = BUILT_PRODUCTS_DIR; };
B8C974690E8A1A50007D16AD /* RMMapView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMMapView.h; sourceTree = "<group>"; };
B8C9746A0E8A1A50007D16AD /* RMMapView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMMapView.m; sourceTree = "<group>"; };
... ... @@ -280,6 +281,7 @@
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
2BF0E4540F73119C0095A926 /* Documentation */,
B8C9740D0E8A196E007D16AD /* Map */,
B83E67570E80F3FB001663B6 /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
... ... @@ -304,6 +306,15 @@
name = Frameworks;
sourceTree = "<group>";
};
2BF0E4540F73119C0095A926 /* Documentation */ = {
isa = PBXGroup;
children = (
B8C9740E0E8A198F007D16AD /* README.txt */,
2BF0E4570F7312B10095A926 /* README-library-build.rtf */,
);
name = Documentation;
sourceTree = "<group>";
};
38D8184C0F6F67B90034598B /* Products */ = {
isa = PBXGroup;
children = (
... ... @@ -483,7 +494,6 @@
isa = PBXGroup;
children = (
090FE3130ECD71A500035FBC /* RMTilesUpdateDelegate.h */,
B8C9740E0E8A198F007D16AD /* README.txt */,
B8C974690E8A1A50007D16AD /* RMMapView.h */,
B8C9746A0E8A1A50007D16AD /* RMMapView.m */,
B8C974B60E8A280A007D16AD /* RMMapContents.h */,
... ...
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf430
{\fonttbl\f0\fswiss\fcharset0 ArialMT;}
{\colortbl;\red255\green255\blue255;}
\deftab720
\pard\pardeftab720\ql\qnatural
\f0\fs26 \cf0 (preliminary instructions from Henri Asseily, March 18, 2009)\
\
Maybe I should explain what I did :)\
\
My goal was to build a completely universal, drag-and-drop framework\
for distribution. Build it in one-click, zip it, post it on the site,\
and let people download and drop in their project irrespective of what\
target or build they're doing.\
\
That said, it is known that the iPhone does not support standard\
dynamic frameworks, nor does XCode allow for creating framework\
targets for an iPhone project. So this had to be a "hack" in some\
respects. Given that, my strategy was not to achieve the above using\
XCode best practices, since I was already breaking them before even\
starting. So I elected to go the exact opposite route: the simplest,\
most independent technique to achieve the goal above. No referencing\
multiple other targets, no nothing. One target, one click, done.\
\
So it was clear that the only way to do it would be a good old shell\
script target that would do everything through CLI commands. But\
first, I had to put inside the project an empty skeletion of a\
framework, which is called the "Canonical.framework". All it has is\
the directory structure within a framework bundle. That would take\
care of simulating a framework target for the iPhone.\
\
On to the script:\
- it first cleans old output files\
- then it copies the canonical framework into the build directory.\
This will be the final resting place of the build, by default "build/\
MapView.framework"\
- then it calls xcodebuild to build the MapView.a static lib for every\
single standard permutation of target and build: simulator+iphone, for\
debug+release. That's 4 builds.\
- after that, it merges the 4 libs into 2 fat libs using lipo. The\
debug lib is named with a "_debug" postfix.\
- and finally, it finishes "building" the framework:\
\'a0 \'a0 \'a0 \'a0\'95 it copies the lib over into the framework directory\
\'a0 \'a0 \'a0 \'a0\'95 it creates the correct symlinks inside the framework directory\
\'a0 \'a0 \'a0 \'a0\'95 it updates the default Info.plist with the values that are in the\
user-created Info.plist\
\
That's it. You now have a complete, as minimalistic as possible,\
static framework that works in debug or release mode for simulator or\
device, that can be simply dropped in a project and referenced with\
#include <MapView/...h>\
\
Pretty straightforward stuff, except for the Info.plist thing. The\
things to note are:\
\
- this target does not care what active build you've got, it builds\
all 4 builds irrespectively.\
- this target is independent from any other target you create, and as\
such all output products from your other targets will stay red on\
XCode if you haven't built them.\
- this target will not use your Info.plist except for the Bundle\
Version.\
\
Hope this helps,\
}
\ No newline at end of file
... ...