(ps:仅供参考,以官方最新教程为准)
快速集成百度地图
只考虑cocoapods集成的情况
0). 登录百度地图开放平台,创建应用http://lbsyun.baidu.com/apiconsole/key
1). 使用cocoapods集成
2). 配置须知:
-
(不可缺少)info.plist 中必须添加 Bundle display name
-
(如果用pods集成,不用管它)静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),
或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
-
如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,编译器在链接时不会链接对应符号,需要在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC
-
(如果用pods集成,不用管它)自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)
3). 使用:
#import <BaiduMapAPI_Base/BMKBaseComponent.h>
@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
需要注意点:
- 地图SDK的导入不要使用pod,而改成手动安装
- 需要确保导航的库(libbaiduNaviSDK.a)链接顺序在地图相关库的下方,如下所示:
错误分析:
应该是目录变更所致,找到Library Search Paths
,删除掉错误的路径。
原因是忘记导入libbaiduNaviSDK,a
这个就比较坑了,原因是‘需要确保导航的库(libbaiduNaviSDK.a)链接顺序在地图相关库的下方‘。见注意点2.
百度导航(3.2版本)使用上的一些问题
-
baiduNaviSDK.xcassets 图片素材不显示。copy Bundle Resources
里手动加上
-
'免责声明'错位: 可能的原因导航条的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;
}
......
}
-
图片显示空白:原因是baiduNaviSDK.bundle(xcode9)没有自动导入,需要手动添加到copy Bundle Resources
-
TTS授权失败: 模拟器不行,尝试了下真机没有问题。
-
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取消勾选择)