一、申请秘钥
要使用百度地图就必须要有秘钥,申请网址:
百度地图秘钥申请网址
- 附:依赖库
CoreLocation.framework
QuartzCore.framework
OpenGLES.framework
SystemConfiguration.framework
CoreGraphics.framework
Security.framework
libsqlite3.0.tbd
CoreTelephony.framework
libstdc++.6.0.9.tbd
1.打开API控制台,如下图所示:
2.点击创建应用,开始申请开发密钥,如下图:
3.获取安全码Bundle Identifier
在申请开发密钥的时候,需要填写对应工程的安全码Bundle Identifier
就是项目的包名!
4.填写应用名称、应用类型注意选择“iOS SDK”、正确填写安全码(Bundle Identifier),点击确认,系统将会自动帮您生成相应的开发密钥:
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
b.编辑Podfile内容
iOS SDK 的 Pod 库的名称 BaiduMapKit,编辑Podfile内容如下:
platform :ios, '7.0' #手机的系统
target 'YourProjectTarget' do #工程名字
pod “BaiduMapKit” #百度地图SDK
end
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文件),如下图所示。
注意:此种方式只支持导入全量包的SDK,包含百度地图iOS SDK所有功能。
e.升级新版SDK
若已经安装了百度iOS地图SDK,想要更新到最新版本,在Podfile文件的目录下使用以下命令
pod repo update #用于保证本地地图相关SDK为最新版 pod update
-
直接下载百度地图
本人倾向这种方式,哪种方式看项目需求及个人爱好
百度地图下载地址
现在是2018年3月29号。目前最新版本是3.4.4
使用说明
1. 使用iOS SDK,需先下载iOS平台的库文件。
2. 支持iPhone/iPad的7.0以上的版本。
3. 自v2.0.0起,百度地图SDK iOS版全面升级为矢量版。
- 注意:自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拷贝或者拖拽到工程所在文件夹下,功能包内容如下:
添加方法如下:
左侧目录选中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI_**.framework添加到工程中。
-
注意: 静态库中采用Objective-C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
-
坑:在LLVM9.0下,项目可以正常编译通过。改成如上所述后,就会有6个爆红。
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
添加方法: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。
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做了优化,不需要改了。
5.引入mapapi.bundle资源文件
如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。
添加方法: 选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
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
}
编译,运行,效果如下图所示:
作者ps:在已经创建好项目有包名且申请好秘钥且已经下载好库的情况下。集成点亮过程熟练的话可以在三分钟内完成哦!!