zoukankan      html  css  js  c++  java
  • 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)。过程如下:

  • 相关阅读:
    《金字塔原理》听书笔记
    凡事有交代
    关于马云不用淘宝不用支付宝的想法
    jenkins如何在一台机器上开启多个slave
    jenkins结合docker
    flask-assets使用介绍
    touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
    JS中event.preventDefault()取消默认事件能否还原?
    flask前端优化:css/js/html压缩
    What's New In DevTools (Chrome 59)来看看最新Chrome 59的开发者工具又有哪些新功能
  • 原文地址:https://www.cnblogs.com/ygm900/p/2783150.html
Copyright © 2011-2022 走看看