(ps:仅供参考,以官方最新教程为准)

快速集成百度地图

只考虑cocoapods集成的情况

0). 登录百度地图开放平台,创建应用http://lbsyun.baidu.com/apiconsole/key

1). 使用cocoapods集成

pod 'BaiduMapKit'

2). 配置须知:

  1. (不可缺少)info.plist 中必须添加 Bundle display name
  2. (如果用pods集成,不用管它)静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm), 或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为”Objective-C++”

  3. 如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,编译器在链接时不会链接对应符号,需要在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC

  4. (如果用pods集成,不用管它)自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)

3). 使用:

#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
@interface AppDelegate ()
{
    BMKMapManager* _mapManager;
}
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //配置百度
    _mapManager = [[BMKMapManager alloc]init];
    BOOL ret = [_mapManager start:@"百度地图BundelId对应的AK"  generalDelegate:nil];
    if (!ret) {
        NSLog(@"manager start failed!");
    }
    return YES;
}

同时引入百度地图(v3.2)和百度导航(v3.2)的问题:

http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=130878&extra=page%3D1&page=1

需要注意点:

  1. 地图SDK的导入不要使用pod,而改成手动安装
  2. 需要确保导航的库(libbaiduNaviSDK.a)链接顺序在地图相关库的下方,如下所示:

2017092079631.jpeg

错误分析:

2017092094190error1.png

应该是目录变更所致,找到Library Search Paths,删除掉错误的路径。


2017092052668error2.png

原因是忘记导入libbaiduNaviSDK,a


2017092097118errror3.png

这个就比较坑了,原因是‘需要确保导航的库(libbaiduNaviSDK.a)链接顺序在地图相关库的下方‘。见注意点2.

百度导航(3.2版本)使用上的一些问题

  1. baiduNaviSDK.xcassets 图片素材不显示。copy Bundle Resources里手动加上
  2. ‘免责声明’错位: 可能的原因导航条的navBar.translucent = NO. 设为YES正常了点。

    UINavigationBar *navBar = [UINavigationBar   appearance];
    navBar.translucent = YES;
    

    —修正 2017-10-27 (高德导航也有类似问题)— 真正的原因是FDFullscreenPopGesture导致,在每个显示的viewcontroller都默认加了一个bar。巴拉巴拉源码,修改:

        可以搜索以下方法fd_setupViewControllerBasedNavigationBarAppearanceIfNeeded:,先判断一下vc的类型,如果是导航的,直接return即可。
        - (void)fd_setupViewControllerBasedNavigationBarAppearanceIfNeeded:(UIViewController *)appearingViewController
        {
            if (![NSStringFromClass([appearingViewController class]) hasPrefix:@"BN"]) {
                return;
            }
            ......
        }
    
  3. 图片显示空白:原因是baiduNaviSDK.bundle(xcode9)没有自动导入,需要手动添加到copy Bundle Resources

  4. TTS授权失败: 模拟器不行,尝试了下真机没有问题。

  5. iOS11调试出现Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState] PID: 3554, TID: 1418656, Thread name: (none), Queue name: com.apple.root.default-qos.overcommit, QoS: 21 Backtrace: 原因是需要在主线程执行的代码放到了子线程。解决:等百度导航更新。 或者暂时在scheme里关闭检查(Diagnostics->Runtime API Checking-> Main thread checking取消勾选择)