iOS 百度地圖SDK-配置開發環境

雖然百度地圖已經用了很多次了,但是每次都浪費很長時間來配置,所以今天把配置百度地圖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 use BaiDuPoiSearch.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.frameworkQuartzCore.frameworkOpenGLES.frameworkSystemConfiguration.frameworkCoreGraphics.frameworkSecurity.frameworklibsqlite3.0.tbdCoreTelephony.frameworklibstdc++.6.0.9.tbd

添加方法:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加這幾個系統庫即可

第三步、引入所需的第三方openssl庫

添加支持HTTPS所需的penssl靜態庫:libssl.alibcrypto.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文件夾。您也可以根據具體需求任意替換或刪除該bundleimage文件夾的圖片文件。

添加方法:選中工程名,在右鍵菜單中選擇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-配置開發環境,只是對百度地圖的配置進行了一下總結,僅供開發百度地圖參考使用,如有侵權行為,請聯系我并及時刪除。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容