文档章节

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

Align
 Align
发布于 2016/01/08 16:13
字数 1212
阅读 20
收藏 0

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中即可。

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)。过程如下:


© 著作权归作者所有

Align
粉丝 11
博文 65
码字总数 71695
作品 0
昌平
高级程序员
私信 提问
iOS 9应用开发教程之iOS 9新特性

iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统。该操作系统于2015年6月8号(美国时间)被发布。本章将主要讲解iOS 9的新特...

大学霸
2015/08/05
0
0
苹果iOS的八年:如何一步步爬到了这么高

电脑需要操作系统,手机也需要,2007 年,苹果带着旗下第一款智能手机 iPhone 和第一款操作系统亮相,从而奠定了改变世界的基础。8 年时间以来,iPhone 一直在不停的进化、演变,iOS 操作系统...

oschina
2015/09/08
4K
22
苹果 iOS 6 正式发布 200项升级功能更完善

[天极北京6月12日凌晨消息]北京时间2012年6月12日凌晨1点,2012年苹果全球开发者大会如期而至,苹果公司于本届大会首日召开的发布会无疑颇具看点。在本场发布会中,继新一代苹果Macbook Pro...

oschina
2012/06/12
2.4K
5
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
SegmentFault D-Day 2015 北京:iOS 站

SegmentFault D-Day 介绍 SegmentFault D-Day,是由国内最前沿的开发者社区 SegmentFault 主办的技术沙⻰,于2014年正式启动。2015年上半年D-Day已在北、上、广、深、杭等城市成功举办9场,活...

文洁洁洁
2015/11/26
240
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部