021-地圖系列01-iOS百度地圖集成

上一篇:020-React Native百度地圖集成

一、申請秘鑰

要使用百度地圖就必須要有秘鑰,申請網址:

百度地圖秘鑰申請網址

  • 附:依賴庫
CoreLocation.framework  
QuartzCore.framework    
OpenGLES.framework  
SystemConfiguration.framework
CoreGraphics.framework  
Security.framework  
libsqlite3.0.tbd
CoreTelephony.framework 
libstdc++.6.0.9.tbd

1.打開API控制臺,如下圖所示:

image

2.點擊創建應用,開始申請開發密鑰,如下圖:

image

3.獲取安全碼Bundle Identifier

在申請開發密鑰的時候,需要填寫對應工程的安全碼Bundle Identifier

就是項目的包名!

image

4.填寫應用名稱、應用類型注意選擇“iOS SDK”、正確填寫安全碼(Bundle Identifier),點擊確認,系統將會自動幫您生成相應的開發密鑰:

image

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
image.png

b.編輯Podfile內容
iOS SDK 的 Pod 庫的名稱 BaiduMapKit,編輯Podfile內容如下:

platform :ios, '7.0' #手機的系統
target 'YourProjectTarget' do #工程名字
  pod “BaiduMapKit” #百度地圖SDK
end 
image.png

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文件),如下圖所示。

image.png

注意:此種方式只支持導入全量包的SDK,包含百度地圖iOS SDK所有功能。

e.升級新版SDK

若已經安裝了百度iOS地圖SDK,想要更新到最新版本,在Podfile文件的目錄下使用以下命令

pod repo update #用于保證本地地圖相關SDK為最新版 pod update 
  • 直接下載百度地圖

本人傾向這種方式,哪種方式看項目需求及個人愛好

百度地圖下載地址

現在是2018年3月29號。目前最新版本是3.4.4

image.png

使用說明

1. 使用iOS SDK,需先下載iOS平臺的庫文件。

2. 支持iPhone/iPad的7.0以上的版本。

3. 自v2.0.0起,百度地圖SDK iOS版全面升級為矢量版。

  1. 注意:自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拷貝或者拖拽到工程所在文件夾下,功能包內容如下:

image.png

添加方法如下:

左側目錄選中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries中點擊“+”按鈕,在彈出的窗口中點擊“Add Other”按鈕,選擇BaiduMapAPI_**.framework添加到工程中。

image.png
image.png
  • 注意: 靜態庫中采用Objective-C++實現,因此需要您保證您工程中至少有一個.mm后綴的源文件(您可以將任意一個.m后綴的文件改名為.mm),或者在工程屬性中指定編譯方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并將其設置為"Objective-C++"

  • 坑:在LLVM9.0下,項目可以正常編譯通過。改成如上所述后,就會有6個爆紅。

image.png
image.png

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
image.png

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

image.png

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做了優化,不需要改了。

image.png

5.引入mapapi.bundle資源文件

如果使用了基礎地圖功能,需要添加該資源,否則地圖不能正常顯示mapapi.bundle中存儲了定位、默認大頭針標注View及路線關鍵點的資源圖片,還存儲了矢量地圖繪制必需的資源文件。如果您不需要使用內置的圖片顯示功能,則可以刪除bundle文件中的image文件夾。您也可以根據具體需求任意替換或刪除該bundle中image文件夾的圖片文件。

添加方法: 選中工程名,在右鍵菜單中選擇Add Files to “工程名”…,從BaiduMapAPI_Map.framework||Resources文件中選擇mapapi.bundle文件,并勾選“Copy items if needed”復選框,單擊“Add”按鈕,將資源文件添加到工程中。

image.png

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    
}

編譯,運行,效果如下圖所示:

image.png

作者ps:在已經創建好項目有包名且申請好秘鑰且已經下載好庫的情況下。集成點亮過程熟練的話可以在三分鐘內完成哦!!

版權說明:iOS百度地圖集成網絡資料很多,本文大部分資料來自網絡及百度文檔。本文如有侵權請告知作者,會在第一時間刪除所有與侵權相關內容。本文存在不少作者觀點,轉載請注明出處,謝謝。

這會是一個系列文章!

本文鏈接:021-地圖系列01-iOS百度地圖集成

下一篇:022-地圖系列02-iOS百度地圖版本及分類

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容