021-地图系列01-iOS百度地图集成

上一篇:020-React Native百度地图集成

一、申请秘钥

要使用百度地图就必须要有秘钥,申请网址:

百度地图秘钥申请网址

  • 附:依赖库
CoreLocation.framework  
QuartzCore.framework    
OpenGLES.framework  
SystemConfiguration.framework
CoreGraphics.framework  
Security.framework  
libsqlite3.0.tbd
CoreTelephony.framework 
libstdc++.6.0.9.tbd

1.打开API控制台,如下图所示:

image

2.点击创建应用,开始申请开发密钥,如下图:

image

3.获取安全码Bundle Identifier

在申请开发密钥的时候,需要填写对应工程的安全码Bundle Identifier

就是项目的包名!

image

4.填写应用名称、应用类型注意选择“iOS SDK”、正确填写安全码(Bundle Identifier),点击确认,系统将会自动帮您生成相应的开发密钥:

image

5.控制台列表中的“访问应用(ak)”就是您在开发过程中需要用到的开发密钥!

二、下载百度地图

有两种方式,使用CocoaPods和手动直接下载

  • 使用CocoaPods下载百度地图

1.安装CocoaPods

在终端输入

sudo gem install cocoapods

如果安装成功,会有一个提示

Successfully installed cocoaPods

如果有安装CocoaPods的疑问,参考资料:

002-CocoaPods简析

2.使用CocoaPods 安装 SDK

a.在您项目工程(.xcodeproj)文件同目录下创建一个名为 Podfile 文件。如果您尚未创建 Xcode 项目,请立即创建一个并将其保存到您的本地计算机。

在当前工程文件(.xcodeproj)所在文件夹下,打开terminal

touch Podfile
image.png

b.编辑Podfile内容
iOS SDK 的 Pod 库的名称 BaiduMapKit,编辑Podfile内容如下:

platform :ios, '7.0' #手机的系统
target 'YourProjectTarget' do #工程名字
  pod “BaiduMapKit” #百度地图SDK
end 
image.png

c.在Podfile所在的文件夹下输入命令:

pod install 
//这个可能比较慢,请耐心等待……
end

成功以后,会出现如下记录:

Analyzing dependencies
 Downloading dependencies
 Installing BaiduMapKit (3.3.1)
 Generating Pods project
 Integrating client project
 [!] Please close any current Xcode sessions and use `***.xcworkspace` for this project from now on.
Sending stats

d.导入成功,启动工程
命令执行成功后,会生成 .xcworkspace 文件,恭喜你已成功导入百度地图iOS SDK。打开.xcworkspace 文件以启动工程(注意:此时不能同时开启.xcodeproj文件),如下图所示。

image.png

注意:此种方式只支持导入全量包的SDK,包含百度地图iOS SDK所有功能。

e.升级新版SDK

若已经安装了百度iOS地图SDK,想要更新到最新版本,在Podfile文件的目录下使用以下命令

pod repo update #用于保证本地地图相关SDK为最新版 pod update 
  • 直接下载百度地图

本人倾向这种方式,哪种方式看项目需求及个人爱好

百度地图下载地址

现在是2018年3月29号。目前最新版本是3.4.4

image.png

使用说明

1. 使用iOS SDK,需先下载iOS平台的库文件。

2. 支持iPhone/iPad的7.0以上的版本。

3. 自v2.0.0起,百度地图SDK iOS版全面升级为矢量版。

  1. 注意:自v2.0.2版本起,SDK采用了全新的Key验证体系,如果您选择使用v2.0.2及以后的版本,需申请全新的Key。(参考本文一、申请秘钥)

5. 自v2.3.0起,iOS SDK的开发包以用户可定制的形式提供给开发者,即用户可根据自己的实际需求下载对应的开发包使用。

6. 自v2.9.0 起,百度地图iOS SDK 将不再提供 .a 形式的开发包。

7. 自v2.9.0 起,采用分包的形式提供 .framework 包,请广大开发者使用时,务必确保各分包的版本保持一致。将之前所有旧包(包含bundle 资源)并全部替换为新包。其中BaiduMapAPI_Base.framework 为基础包,使用SDK 任何功能都 需导入,其他分包可按需导入。

作者说明:v2.3.0版本以前,百度地图包就只有一个包,随着版本叠加以及功能增多,这个包的体积也就是包的大小越来越大。许多使用者其实只是想简单的显示地图,根本用不着那么多功能,但包只有一个还特别大。许多人反馈后。百度方重新设计了架构。也就是目前最流行的方式:核心加插件的方式。所以现在我们可以根据自己的需要下载对应的包。CocoaPods方式是下载所有包的,如果不清楚自己需要什么又怕缺失且不在乎包大小,那就下载所有包。自v2.9.0 起,百度地图iOS SDK 将不再提供 .a 形式的开发包。现在都是 .framework 包了。如没有特殊情况,推荐使用最新的SDK,功能多,已知BUG也被修复,还有不少优化。

示例代码和参考类,推荐也下了瞧瞧。

三、手动配置.framework形式开发包

1.根据需要导入 .framework包

确保各分包的版本保持一致。将所需的BaiduMapAPI_**.framework拷贝或者拖拽到工程所在文件夹下,功能包内容如下:

image.png

添加方法如下:

左侧目录选中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI_**.framework添加到工程中。

image.png
image.png
  • 注意: 静态库中采用Objective-C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"

  • 坑:在LLVM9.0下,项目可以正常编译通过。改成如上所述后,就会有6个爆红。

image.png
image.png

2.需要引入的系统库文件,依赖库

百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程需引入的系统库如下表所示:

CoreLocation.framework  
QuartzCore.framework    
OpenGLES.framework  
SystemConfiguration.framework
CoreGraphics.framework  
Security.framework  
libsqlite3.0.tbd
CoreTelephony.framework 
libstdc++.6.0.9.tbd
image.png

添加方法: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。

image.png

3.引入所需的第三方openssl库:

添加支持HTTPS所需的openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)

添加方法: 在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中

4.环境配置

在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC,字母O和C大写。

  • 坑:在XCode9.2下,项目可以正常编译通过。改成如上所述后,就会有56个爆红。也就是说新版本XCode做了优化,不需要改了。

image.png

5.引入mapapi.bundle资源文件

如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。

添加方法: 选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

image.png

6.引入头文件

在使用SDK的类 按需 引入下边的头文件:

 #import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
 #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件
 #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件
 #import <BaiduMapAPI_Cloud/BMKCloudSearchComponent.h>//引入云检索功能所有的头文件
 #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件
 #import <BaiduMapAPI_Utils/BMKUtilsComponent.h>//引入计算工具所有的头文件
 #import <BaiduMapAPI_Radar/BMKRadarComponent.h>//引入周边雷达功能所有的头文件
 #import <BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件

四、点亮地图,完成地图集成工作

1.初始化BMKMapManager

在您的AppDelegate.h文件中添加BMKMapManager的定义

@interface AppDelegate : UIResponder<UIApplicationDelegate> {   
       UINavigationController *navigationController;     
       BMKMapManager* _mapManager;    
}

在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权Key,示例如下:

- (BOOL)application:(UIApplication *)application   
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 要使用百度地图,请先启动BaiduMapManager  
    _mapManager = [[BMKMapManager alloc]init];   
// 如果要关注网络及授权验证事件,请设定     generalDelegate参数  
    BOOL ret = [_mapManager start:@"在此处输入您的授权Key"  generalDelegate:nil];  
    if (!ret) {  
        NSLog(@"manager start failed!");  
    }  
// Add the navigation controller's view to the window and display.  
    [self.window addSubview:navigationController.view];  
    [self.window makeKeyAndVisible];  
   return YES;  
}

2.创建BMKMapView

在您的ViewController.m文件中添加BMKMapView的创建代码,示例如下

- (void)viewDidLoad {  
    [super viewDidLoad];  
    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds]; 
    self.view = mapView;      
}

自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:

-(void)viewWillAppear:(BOOL)animated    
{    
    [_mapView viewWillAppear];    
    _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放    
}    
-(void)viewWillDisappear:(BOOL)animated    
{    
    [_mapView viewWillDisappear];    
     _mapView.delegate = nil; // 不用时,置nil    
}

编译,运行,效果如下图所示:

image.png

作者ps:在已经创建好项目有包名且申请好秘钥且已经下载好库的情况下。集成点亮过程熟练的话可以在三分钟内完成哦!!

版权说明:iOS百度地图集成网络资料很多,本文大部分资料来自网络及百度文档。本文如有侵权请告知作者,会在第一时间删除所有与侵权相关内容。本文存在不少作者观点,转载请注明出处,谢谢。

这会是一个系列文章!

本文链接:021-地图系列01-iOS百度地图集成

下一篇:022-地图系列02-iOS百度地图版本及分类

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容