01 如何将百度地图加入IOS应用程序?

O 需求

将百度地图加入到IOS应用程序中

一 准备

1)到百度官网下载   iOS SDKv1.2.2 静态库。地址如下 http://openapi.baidu.com/map/sdkiosdev-download.htm


 

2)将静态库引入你的工程,具体步骤如下:

引入静态库文件

百度MapAPI提供了模拟器和真机两中环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下。有两种方式可以引入静态库文件:

第一种方式:直接将对应平台的.a文件拖拽至XCode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都需要重新添加.a文件;

第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可,具体命令如下:
lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a

第三种方式:

1.将API的libs文件夹拷贝到您的Application工程跟目录下

2.在XCode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-lbaidumapapi

3.设置静态库的链接路径,在XCode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的静态库目录,比如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator

注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm 注意 在修改过程中,一定要区分中文下的m和英文下的m,如果你为文件后缀添加了一个中文下的m,那么你的文件将会报缺失,变红。),或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

引入mapapi.bundle资源文件

该步骤为可选,mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片。如果您不需要使用内置的图片显示功能,则可以不添加此bundle文件。您也可以根据具体需求任意替换或删除该bundle中的图片文件。
添加方式:将mapapi.bundle拷贝到您的工程目录,直接将该bundle文件托拽至XCode工程左侧的Groups&Files中即可。

引自:http://openapi.baidu.com/map/sdkiosdev-2.htm

3)引入CoreLocation.frameworkQuartzCore.framework

4)为Other Linker Flags 设置-all_load属性

   步骤:选中你的工程。选择右边的TARGETS->Build Settings找到Other Linker Flags

二 编码

1、在ViewController.h中添加如下代码

1 #import <UIKit/UIKit.h>
2 #import "BMapKit.h"
3 @interface ViewController : UIViewController<BMKGeneralDelegate>
4 {
5         BMKMapManager *_mapManager;     
6 }
7 @end

在ViewController.mm中添加如下代码     (注:我的工程是将ViewController.m的后缀改为了.mm)

 1 - (void)viewDidLoad
 2 {
 3     [superviewDidLoad];
 4      // Do any additional setup after loadingthe view, typically from a nib.
 5    
 6     //启动BMKMapManager  (加载百度地图前,必须先启动BMKMapManager)
 7     _mapManager = [[BMKMapManageralloc]init];
 8     BOOL ret = [_mapManagerstart:@"2772BD5CAFF652491F65707D6D5E9ABEBF3639CC"generalDelegate:self];
 9     if (!ret) {
10         NSLog(@"manager start failed!");
11     }
12    
13     //创建一张百度地图
14     BMKMapView* mapView = [[BMKMapViewalloc]initWithFrame:CGRectMake(0,0, 320,480)];
15     [self.viewaddSubview:mapView];
16 }

执行后,效果如下:


三 下载      ........去下载源代码咯........

四 调试

当编译不成功时,可检查如下问题

1、        是否已在项目中引入 CoreLocation.framework Quartz.framework  MapKit.framework

2、        是否已将任意一个.m文件改为.mm(仅该后缀即可,不涉及其它地方)

3、        是否已为Other Linker Flags 添加-all_load属性如下图所示:


 

或许也可能是这样:

4、   检查引入的静态库类型是模拟器的还是IOS设备的,是否与当前的编译模式相同。

5、需要将下载下来的整个百度地图库文件引入到开发工程中,而不仅仅只是一个 libbaidumapapi.a 文件。需要引入到工程中的文件清单包括:BaiduMapApi_Lib_iOS_1.2.2 文件夹下的 1 inc 文件夹(全部) 2  libs 文件 (仅真机部分,因为我用的真机测试、开发) 3 mapapi.bundle  文件

6、上述问题和方法都用遍,但在真机调试时仍爆出连接错误,通过百度api 将api包把原来的1.2.2版本换位1.2.3版本后,真机调试终于通过!

五 思路

六 分析

     百度地图目前还在改进和更新中,大家不必太迷信它。如果在使用过程中遇到各种怪异的问题,建议先到百度地图api中确认以下是不是百度地图自身的Bug.

七 疑问 

 

增加:

用lipo命令合成模拟器和真机静态库

步骤:1、先 将两个文件放到同一个文件夹下 2、通过终端terminal 进入目标文件夹 3 使用lipo命令进行合成(如 :lipo -create libbaidumapapis.a libbaidumapapir.a -output libbaidumapapi.a)。过程如下:

posted @ 2012-11-20 22:53  ygm900  阅读(4572)  评论(1编辑  收藏  举报