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

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.frameworkQuartzCore.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)。过程以下:

相关文章
相关标签/搜索