O 需求ios
将百度地图加入到IOS应用程序中api
一 准备iphone
1)到百度官网下载 iOS SDKv1.2.2 静态库。地址以下 http://openapi.baidu.com/map/sdkiosdev-download.htm测试
2)将静态库引入你的工程,具体步骤以下:ui
引入静态库文件编码
百度MapAPI提供了模拟器和真机两中环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下。有两种方式能够引入静态库文件:spa
第一种方式:直接将对应平台的.a文件拖拽至XCode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都须要从新添加.a文件;.net
第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即 可,具体命令以下: lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a调试
第三种方式:code
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中便可。
3)引入CoreLocation.framework和QuartzCore.framework
4)为Other Linker Flags 设置-all_load属性
步骤:选中你的工程。选择右边的TARGETS->Build Settings找到Other Linker Flags
二 编码
一、在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 }
执行后,效果以下:
四 调试
当编译不成功时,可检查以下问题
一、 是否已在项目中引入 CoreLocation.framework Quartz.framework MapKit.framework
二、 是否已将任意一个.m文件改成.mm(仅该后缀便可,不涉及其它地方)
三、 是否已为Other Linker Flags 添加-all_load属性以下图所示:
或许也多是这样:
四、 检查引入的静态库类型是模拟器的仍是IOS设备的,是否与当前的编译模式相同。
五、须要将下载下来的整个百度地图库文件引入到开发工程中,而不只仅只是一个 libbaidumapapi.a 文件。须要引入到工程中的文件清单包括:BaiduMapApi_Lib_iOS_1.2.2 文件夹下的 1 inc 文件夹(所有) 2 libs 文件 (仅真机部分,由于我用的真机测试、开发) 3 mapapi.bundle 文件
六、上述问题和方法都用遍,但在真机调试时仍爆出链接错误,经过百度api 将api包把原来的1.2.2版本换位1.2.3版本后,真机调试终于经过!
五 思路
六 分析
百度地图目前还在改进和更新中,你们没必要太迷信它。若是在使用过程当中遇到各类怪异的问题,建议先到百度地图api吧中确认如下是否是百度地图自身的Bug.
七 疑问
增长:
用lipo命令合成模拟器和真机静态库
步骤:一、先 将两个文件放到同一个文件夹下 二、经过终端terminal 进入目标文件夹 3 使用lipo命令进行合成(如 :lipo -create libbaidumapapis.a libbaidumapapir.a -output libbaidumapapi.a)。过程以下: