01 如何將百度地圖加入IOS應用程序?

O 需求ios

將百度地圖加入到IOS應用程序中api

一 準備iphone

1)到百度官網下載   iOS SDKv1.2.2 靜態庫。地址以下 http://openapi.baidu.com/map/sdkiosdev-download.htm測試

2)將靜態庫引入你的工程,具體步驟以下:ui

引入靜態庫文件編碼

百度MapAPI提供了模擬器和真機兩中環境所使用的靜態庫文件,分別存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夾下。有兩種方式能夠引入靜態庫文件:spa

第一種方式:直接將對應平臺的.a文件拖拽至XCode工程左側的Groups&Files中,缺點是每次在真機和模擬器編譯時都須要從新添加.a文件;.net

第二種方式:使用lipo命令將設備和模擬器的.a合併成一個通用的.a文件,將合併後的通用.a文件拖拽至工程中即 可,具體命令以下:
lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a調試

第三種方式:code

1.將API的libs文件夾拷貝到您的Application工程跟目錄下

2.在XCode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-lbaidumapapi

3.設置靜態庫的連接路徑,在XCode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的靜態庫目錄,好比"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏表明您的工程文件目錄,$(EFFECTIVE_PLATFORM_NAME)宏表明當前配置是OS仍是simulator

注:靜態庫中採用ObjectC++實現,所以須要您保證您工程中至少有一個.mm後綴的源文件(您能夠將任意一個.m後綴的文件更名爲.mm 注意 在修改過程當中,必定要區分中文下的m和英文下的m,若是你爲文件後綴添加了一箇中文下的m,那麼你的文件將會報缺失,變紅。), 或者在工程屬性中指定編譯方式,即將XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As設置爲"Objective-C++"

引入mapapi.bundle資源文件

該步驟爲可選,mapapi.bundle中存儲了定位、默認大頭針標註View及路線關鍵點的資源圖片。若是您不須要使用內置的圖片顯示功能,則 能夠不添加此bundle文件。您也能夠根據具體需求任意替換或刪除該bundle中的圖片文件。
添加方式:將mapapi.bundle拷貝到您的工 程目錄,直接將該bundle文件託拽至XCode工程左側的Groups&Files中便可。

3)引入CoreLocation.frameworkQuartzCore.framework

4)爲Other Linker Flags 設置-all_load屬性

   步驟:選中你的工程。選擇右邊的TARGETS->Build Settings找到Other Linker Flags

二 編碼

一、在ViewController.h中添加以下代碼

複製代碼

1 #import <UIKit/UIKit.h>2 #import "BMapKit.h"3 @interface ViewController : UIViewController<BMKGeneralDelegate>4 {5         BMKMapManager *_mapManager;     
6 }7 @end

複製代碼

在ViewController.mm中添加以下代碼     (注:個人工程是將ViewController.m的後綴改成了.mm)

複製代碼

 1 - (void)viewDidLoad 2 { 3     [superviewDidLoad]; 4      // Do any additional setup after loadingthe view, typically from a nib. 5     6     //啓動BMKMapManager  (加載百度地圖前,必須先啓動BMKMapManager) 7     _mapManager = [[BMKMapManageralloc]init]; 8     BOOL ret = [_mapManagerstart:@"2772BD5CAFF652491F65707D6D5E9ABEBF3639CC"generalDelegate:self]; 9     if (!ret) {10         NSLog(@"manager start failed!");11     }12    13     //建立一張百度地圖14     BMKMapView* mapView = [[BMKMapViewalloc]initWithFrame:CGRectMake(0,0, 320,480)];15     [self.viewaddSubview:mapView];16 }

複製代碼

執行後,效果以下:


三 下載      ........去下載源代碼咯........

四 調試

當編譯不成功時,可檢查以下問題

一、        是否已在項目中引入 CoreLocation.framework Quartz.framework  MapKit.framework

二、        是否已將任意一個.m文件改成.mm(僅該後綴便可,不涉及其它地方)

三、        是否已爲Other Linker Flags 添加-all_load屬性以下圖所示:


 

或許也多是這樣:

四、   檢查引入的靜態庫類型是模擬器的仍是IOS設備的,是否與當前的編譯模式相同。

五、須要將下載下來的整個百度地圖庫文件引入到開發工程中,而不只僅只是一個 libbaidumapapi.a 文件。須要引入到工程中的文件清單包括:BaiduMapApi_Lib_iOS_1.2.2 文件夾下的 1 inc 文件夾(所有) 2  libs 文件 (僅真機部分,由於我用的真機測試、開發) 3 mapapi.bundle  文件

六、上述問題和方法都用遍,但在真機調試時仍爆出鏈接錯誤,經過百度api 將api包把原來的1.2.2版本換位1.2.3版本後,真機調試終於經過!

五 思路

六 分析

     百度地圖目前還在改進和更新中,你們沒必要太迷信它。若是在使用過程當中遇到各類怪異的問題,建議先到百度地圖api吧中確認如下是否是百度地圖自身的Bug.

七 疑問 

 

增長:

用lipo命令合成模擬器和真機靜態庫

步驟:一、先 將兩個文件放到同一個文件夾下 二、經過終端terminal 進入目標文件夾 3 使用lipo命令進行合成(如 :lipo -create libbaidumapapis.a libbaidumapapir.a -output libbaidumapapi.a)。過程以下:

相關文章
相關標籤/搜索