雖然百度地圖已經用了很多次了,但是每次都浪費很長時間來配置,所以今天把配置百度地圖SDK的過程記錄下來,也方便日后查看。
第一步、導入百度SDK
百度地圖SDK支持手動和使用CocoaPods
自動配置
自動配置.framework形式開發包(使用CocoaPods)
1、進入工程所在根目錄執行:
pod init // 初始化后,會自動創建`Podfile`文件
2、搜索百度地圖SDK在CocoaPods的版本號:
pod search BaiduMapKit
3、編輯Podfile內容如下:
pod 'BaiduMapKit', '3.3.0' // 3.3.0是當前最新的版本號
4.在Podfile所在的文件夾下輸入命令:
pod install
成功以后,會出現如下記錄:
Analyzing dependencies
Downloading dependencies
Installing BaiduMapKit (3.3.0)
Generating Pods project
Integrating client project
[!] Please close any current Xcode sessions and useBaiDuPoiSearch.xcworkspace
for this project from now on
手動配置.framework形式開發包
1、根據需要導入 .framework包,將所需要的BaiduMapAPI_**.framework
拷貝到工程所在文件夾下,BaiduMapAPI_Base.framework為基礎包,使用SDK任何功能都需導入,其他分包可按需導入
2、在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++
第二步、引入所需的系統依賴庫
百度地圖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
,添加這幾個系統庫即可
第三步、引入所需的第三方openssl庫
添加支持HTTPS所需的penssl靜態庫:libssl.a
和libcrypto.a
(SDK打好的包存放于thirdlib目錄下
添加方法: 在 TARGETS
->Build Phases
->Link Binary With Libaries
中點擊“+”按鈕,在彈出的窗口中點擊Add Other
按鈕,選擇libssl.a和libcrypto.a添加到工程中
第四步、環境配置
在TARGETS
->Build Settings
->Other Linker Flags
中添加-ObjC
。
第五步、引入mapapi.bundle資源文件
如果使用了基礎地圖功能,需要添加該資源,否則地圖不能正常顯示mapapi.bundle
中存儲了定位、默認大頭針標注View及路線關鍵點的資源圖片,還存儲了矢量地圖繪制必需的資源文件。如果您不需要使用內置的圖片顯示功能,則可以刪除bundle
文件中的image
文件夾。您也可以根據具體需求任意替換或刪除該bundle
中image
文件夾的圖片文件。
添加方法:選中工程名,在右鍵菜單中選擇Add Files to …
,從BaiduMapAPI_Map.framework
||Resources
文件中選擇mapapi.bundle
文件,并勾選Copy items if needed
復選框,單擊Add
按鈕,將資源文件添加到工程中。
第六步、引入頭文件
在使用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>//只引入所需的單個頭文件
第七步、調用客戶端
如果在iOS9中使用了調起百度地圖客戶端功能,必須在Info.plist
中進行如下配置,否則不能調起百度地圖客戶端。
<key>LSApplicationQueriesSchemes</key>
<array>
<string>baidumap</string>
</array>
第八步、開啟定位提醒
自iOS SDK v2.5.0起,為了對iOS8的定位能力做兼容,做了相應的修改,開發者在使用過程中注意事項如下:
需要在info.plist里添加(以下二選一,兩個都添加默認使用NSLocationWhenInUseUsageDescription
):
NSLocationWhenInUseUsageDescription
// 允許在前臺使用時獲取GPS的描述NSLocationAlwaysUsageDescription
// 允許永久使用GPS的描述
第九步、驗證key和應用名稱是否相符
在使用Xcode6進行SDK開發過程中,需要在info.plist中添加:Bundle display name
,且其值不能為空(Xcode6新建的項目沒有此配置,若沒有會造成manager start failed)
第十步、APPDelegate配置
.h文件
#import <BaiduMapAPI_Base/BMKBaseComponent.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,BMKGeneralDelegate>
@property (nonatomic,strong) BMKMapManager* mapManager;
.m文件
-(void)setUpBaiMap {
//百度地圖
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8) {
//由于IOS8中定位的授權機制改變 需要進行手動授權
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
//獲取授權認證
[locationManager requestAlwaysAuthorization];
[locationManager requestWhenInUseAuthorization];
[locationManager startUpdatingLocation];
}
_mapManager = [[BMKMapManager alloc]init];
// 如果要關注網絡及授權驗證事件,請設定 generalDelegate參數
BOOL ret = [_mapManager start:BaiDu_MapKey generalDelegate:self];
if (!ret) {
DLog(@"manager start failed!");
}
}
#pragma mark - 百度地圖
- (void)onGetNetworkState:(int)iError {
if (0 == iError) {
NSLog(@"聯網成功");
} else{
NSLog(@"onGetNetworkState %d",iError);
}
}
- (void)onGetPermissionState:(int)iError {
if (0 == iError) {
NSLog(@"授權成功");
self.isMapPermission = YES;
} else {
NSLog(@"onGetPermissionState %d",iError);
}
}
第十一步、管理地圖的生命周期
自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
}
總結
本文借鑒百度地圖SDK-配置開發環境,只是對百度地圖的配置進行了一下總結,僅供開發百度地圖參考使用,如有侵權行為,請聯系我并及時刪除。