一、申請秘鑰
要使用百度地圖就必須要有秘鑰,申請網址:
百度地圖秘鑰申請網址
- 附:依賴庫
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:在已經創建好項目有包名且申請好秘鑰且已經下載好庫的情況下。集成點亮過程熟練的話可以在三分鐘內完成哦!!