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


O 需求

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

一 准備

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


 

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

引入靜態庫文件

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

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

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

第三種方式:

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中即可。

引自:http://openapi.baidu.com/map/sdkiosdev-2.htm

3)引入CoreLocation.frameworkQuartzCore.framework

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

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

二 編碼

1、在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 }

執行后,效果如下:


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

四 調試

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

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

2、        是否已將任意一個.m文件改為.mm(僅該后綴即可,不涉及其它地方)

3、        是否已為Other Linker Flags 添加-all_load屬性如下圖所示:


 

或許也可能是這樣:

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

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

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

五 思路

六 分析

     百度地圖目前還在改進和更新中,大家不必太迷信它。如果在使用過程中遇到各種怪異的問題,建議先到百度地圖api中確認以下是不是百度地圖自身的Bug.

七 疑問 

 

增加:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM