最近集成百度地图,遇到了不少坑,耽误了一个下午,官方的说明和一些博主的说明相互冲突,找不到一篇合适的解决问题的文档,所以就在这里自己写一个,帮助别人也提醒自己下次不要犯错.
集成步骤
1.申请密钥
2.下载SDK,导入SDK
3.配置开发环境
申请密钥
这块简单,按照官方的链接来就可以了.
飞机票
下载SDK,导入SDK
官方有三种下载模式,如果是自己学习,建议全部下载.如果是项目运用,建议自定义下载,这样可以减少包体积,也提升下载速度.具体看下图.
配置开发环境
重点来了
1 根据需要导入 .framework包
百度地图 iOS SDK 采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。
2 混合编译麻烦
官方说明的是:
静态库中采用Objective-C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
但是
有的文档会告诉我们,这两个操作都要操作,不然有问题,当你两个都操作的时候,你会发现 这么做会有30个错误或者41个错误,具体有找不到包错误或者编译错误.
建议
Compile Sources As不需要设置成"Objective-C++",不变就可以了,只操作官方说明的前一部分,即因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm).
3 引入所需的系统库
百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework、libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib)、CoreTelephony.framework 、libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib)。
4 引入所需的第三方openssl库
这里注意了!!!!!!!!!
不要直接把libssl.a和libcrypto.a添加到工程,它会报路径错误的,正确的做法是,把这两个文件拖到自己工程文件中,然后再添加就好了.
添加方法: 在 >Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中
5 环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
6 引入mapapi.bundle资源文件
如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。
方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
特别注意:如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>baidumap</string>
</array>
这个时候你在编译程序,就不会有报错了!!!!!