1. 导入下载的百度地图Api的静态库
如:

注意:mapapi.bundle在BaiduMapAPI_Map.framework中,必须单独拿出来拖出项目(里边有所有用到的图片,否则无法显示)
2. 引入所需的系统库
百度地图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)
(注:蓝色标识的系统库为v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加导入这3个系统库。)
添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。
3. 在项目目录下确保有一个.mm文件(名字随便,如:Baidu.mm)
1> 没有64位架构的支持(这个是2.5版本以前才会出现这个问题)
libbaidumapapi.a, missing required architecture x86_64
.a文件缺少64位的架构
解决办法:将Architectures修改位:$(ARCHS_STANDARD_32_BIT)
2> 如果在导入第三方框架时,发现提示"std::"提示错误,说明框架使用了C++
解决办法,随便把项目中的一个文件,扩展名.mm
.m c语言&OC混编
.mm c++语言&OC混编
.c 纯C语言
.cpp 纯C++
4. info.plist参数配置
- xcode7改用更安全的https网络请求,所以要如下属性
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
- IOS8开始要使用定位功能必须主动请求用户授权
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
- IOS9中对应用设置了白名单访问机制,如果要跳转到
百度地图APP
就需要手动设置白名单,否则无法跳转:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>baidumap</string>
</array>
- 在使用Xcode6进行SDK开发过程中,需要添加:
Bundle display name
,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed
)
<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string> // 值是代表App的名字,可以随便写,也可以使用项目名
-
完整配置图如下:
5. 环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC
6. 在桥接文件引入头文件
#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>//只引入所需的单个头文件
7. 开始使用
在AppDelegate.swift中
var window: UIWindow?
// 添加属性
lazy var navigationController: UINavigationController = {
return UINavigationController()
}()
lazy var mapManager: BMKMapManager? = {
// 初始化 BMKMapManager
return BMKMapManager()
}()
// App启动的单例方法
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// 如果要关注网络及授权验证事件,请设定generalDelegate参数
let ret = mapManager?.start("在此处输入您的授权Key", generalDelegate: nil)
if !ret! { // 如果 ret 为 false,先在后面!强制拆包,再在前面!取反
print("manager start failed!")
}
window?.addSubview(navigationController.view)
window?.makeKeyAndVisible()
return true
}
在ViewController.swift中
lazy var mapView: BMKMapView = {
return BMKMapView(frame: UIScreen.mainScreen().bounds)
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view = mapView;
}
override func viewWillAppear(animated: Bool) {
mapView.viewWillAppear()
mapView.delegate = self // 不用的时候需要重置nil,否则影响内存释放
}
override func viewWillDisappear(animated: Bool) {
mapView.viewWillDisappear()
mapView.delegate = nil // 重置nil
}
网友评论