集成百度地圖
概述
百度地圖iOS SDK自v2.7.0版本起浅役,向廣大開發(fā)者提供了 .framework形式的SDK開發(fā)包蛆挫,這種形式的開發(fā)包配置簡單你稚,使用方便灸异,推薦大家使用。
配置.framework形式開發(fā)包
第一步族铆、引入BaiduMapAPI.framework
百度地圖SDK提供了模擬器和真機(jī)兩種環(huán)境所使用的framework叶堆,分別存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夾下包斑,開發(fā)者可根據(jù)需要使用真機(jī)或模擬器的包干旧,如果需同時(shí)使用真機(jī)和模擬器的包渠欺,可以使用lipo命令將設(shè)備和模擬器framwork包中的BaiduMapAPI文件合并成一個(gè)通用的文件,命令如下:lipo -create Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI Release-iphonesimulator/BaiduMapAPI.framework/BaiduMapAPI -output Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI
此時(shí)Release-iphoneos文件夾下的BaiduMapAPI.framework即可同時(shí)用于真機(jī)和模擬器(可以使用lipo–info 命令檢查framework所支持的架構(gòu))莱革。
將所需的BaiduMapAPI.framework拷貝到工程所在文件夾下峻堰。在 TARGETS->Build Phases-> Link Binary With Libaries中點(diǎn)擊“+”按鈕,在彈出的窗口中點(diǎn)擊“Add Other”按鈕盅视,選擇BaiduMapAPI.framework文件添加到工程中捐名。
注:靜態(tài)庫中采用ObjectC++實(shí)現(xiàn),因此需要您保證您工程中至少有一個(gè).mm后綴的源文件(您可以將任意一個(gè).m后綴的文件改名為.mm)闹击,或者在工程屬性中指定編譯方式镶蹋,即將Xcode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As設(shè)置為"Objective-C++"
第二步、引入所需的系統(tǒng)庫
百度地圖SDK中提供了定位功能和動(dòng)畫效果赏半,v2.0.0版本開始使用OpenGL渲染贺归,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework断箫、SystemConfiguration.framework拂酣、CoreGraphics.framework、Security.framework仲义。添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries婶熬,添加這幾個(gè)framework即可。
第三步埃撵、環(huán)境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC赵颅。
第四步、引入mapapi.bundle資源文件
如果使用了基礎(chǔ)地圖功能暂刘,需要添加該資源饺谬,否則地圖不能正常顯示
mapapi.bundle中存儲了定位、默認(rèn)大頭針標(biāo)注View及路線關(guān)鍵點(diǎn)的資源圖片谣拣,還存儲了矢量地圖繪制必需的資源文件募寨。如果您不需要使用內(nèi)置的圖片顯示功能,則可以刪除bundle文件中的image文件夾森缠。您也可以根據(jù)具體需求任意替換或刪除該bundle中image文件夾的圖片文件绪商。
方法:選中工程名,在右鍵菜單中選擇Add Files to “工程名”…辅鲸,從BaiduMapAPI.framework||Resources文件中選擇mapapi.bundle文件格郁,并勾選“Copy items if needed”復(fù)選框,單擊“Add”按鈕独悴,將資源文件添加到工程中例书。
第五步、引入頭文件
在使用SDK的類引入頭文件:
#import <BaiduMapAPI/BMapKit.h>//引入所有的頭文件
#import <BaiduMapAPI/BMKMapView.h>//只引入所需的單個(gè)頭文件
申請AK
選擇創(chuàng)建應(yīng)用刻炒,應(yīng)用類型選擇iOS,應(yīng)用名稱填你需要的决采,安全碼為自己項(xiàng)目的BundleID
選擇提交后,就可以得到AK坟奥,然后在工程中配置树瞭,代碼如下:
#import <UIKit/UIKit.h>
#import <BaiduMapAPI/BMapKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,BMKGeneralDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) BMKMapManager *mapManager;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"%@",[[NSBundle mainBundle] bundleIdentifier]);
// 要使用百度地圖拇厢,請先啟動(dòng)BaiduMapManager
_mapManager = [[BMKMapManager alloc] init];
BOOL ret = [_mapManager start:@"此處填寫申請的AK" generalDelegate:self];
if (!ret) {
NSLog(@"manager start failed!");
}
return YES;
}
在AppDelegate.m文件中實(shí)現(xiàn)BMKGeneralDelegate代理方法
- (void)onGetNetworkState:(int)iError
{
if (0 == iError) {
NSLog(@"聯(lián)網(wǎng)成功");
}
else{
NSLog(@"onGetNetworkState %d",iError);
}
}
- (void)onGetPermissionState:(int)iError
{
if (0 == iError) {
NSLog(@"授權(quán)成功");
}
else {
NSLog(@"onGetPermissionState %d",iError);
}
}
至此,百度地圖集成完成晒喷,參考其API實(shí)現(xiàn)相應(yīng)功能
遇到的問題
百度地圖 啟動(dòng)就報(bào) manager start failed!
之所以出現(xiàn)這樣的問題孝偎,是因?yàn)樵赬code6中 plist文件中默認(rèn)是沒有BundleDisplayName的 所以你需要找到你工程下對應(yīng)的info.plist文件 添加 BundleDispayName 并設(shè)置相應(yīng)的value就可以了
Tip
自iOS8起,系統(tǒng)定位功能進(jìn)行了升級凉敲,SDK為了實(shí)現(xiàn)最新的適配衣盾,自v2.5.0起也做了相應(yīng)的修改,開發(fā)者在使用定位功能之前爷抓,需要在info.plist里添加(以下二選一势决,兩個(gè)都添加默認(rèn)使用NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允許在前臺使用時(shí)獲取GPS的描述
NSLocationAlwaysUsageDescription 蓝撇,允許永久使用GPS的描述將AppDelegate.m文件后綴改為AppDelegate.mm文件果复,否則編譯不通過
記錄點(diǎn)滴,與君共勉渤昌。