检查有没有成功导入静态库,以及静态库的search path 是否配置正确
公司主营业务:网站设计、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出三沙免费做网站回馈大家。
App内根据手机上装载的地图App将其显示在弹出的选择框,选择对应地图跳转进入地图导航。需要用到-
(BOOL)canOpenURL:(NSURL
*)url
NS_AVAILABLE_IOS(3_0);方法判断手机是否已安装相应地图App。
要进行跳转需要先在xcode的plist文件内将目标App的url
Scheme加入白名单(LSApplicationQueriesSchemes)。
1,官网下载最新的SDK开发包_iOS静态库文件
2,打开xcode,新建一个demo工程(或是在你现有的工程下),创建好后把下载的的inc,libs,mapapi.bundle三个文件夹导入到工程内,注意需要copy+destination,看我如下截图:
一定要勾选copy和create group 同时要添加到target。
3,几乎所有的第三方地图sdk都是依赖于apple自有的几个framework,所以这一步需要我们导入:CoreLocation.framework和QuartzCore.framework。导入方法如下:
--------------------------------------------------------------------------------------------------------
此时如果.h导入BMapKit.h头文件,实例化BMKMapManager或是BMapView,一定会有如下的错误:
貌似提示:libbaidumapapi.a找不到,那么是路径的问题么? 这就是大家常遇到的BMKMapManager错误。 其实原理是系统无法链接到我们的地图静态库,解决办法如下文:
--------------------------------------------------------------------------------------------------------
4,上边是个小尝试和插曲,我们继续下一步,选中工程,target,切换到buildsetting标签,定位到other link flag,
输入: -all_load
5,,现在需要设置一下链接库的环境变量,好让项目能顺利找到目录下的.a文件,选中工程,target,切换到buildsetting标签,定位到Library search Path ,如下图所示:
删除已有的三个,添加一个足矣(模拟器+真机): $(SRCROOT)/libs/Release$(EFFECTIVE_PLATFORM_NAME)
简单解释一下:
$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator,这个涉及环境变量的相关知识,我也不太懂,全是自己尝试出来的,大家直接copy我这行就行了。如下:
6,这个时候,静态库文件已经设置完毕,剩下的就只有代码工作了,由于需要key的验证,所以我们先需要使用 BMKMapManager类,配置申请到的key,以得到授权。 选中AppDelegate.h
#import "BMapKit.h" //导入BMapKit.h
@interface AppDelegate : UIResponder UIApplicationDelegate{
BMKMapManager* _mapManager; //实例化
}
选中AppDelegate.m,修改成.mm,(注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm))
【注意:如果没有mm,运行会大量报错的】
在 AppDelegate.mm中的 didFinishLaunchingWithOptions,加入如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 要使用百度地图,请先启动BaiduMapManager
_mapManager = [[BMKMapManager alloc]init];
// 如果要关注网络及授权验证事件,请设定generalDelegate参数
BOOL ret = [_mapManager start:@"这里填你输入的key" generalDelegate:nil];
if (!ret) {
NSLog(@"manager start failed!");
}
return YES;
}
7,在需要显示地图的viewcontroller.m中加入如下代码:
#import "ViewController.h"
#import "BMKMapView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
self.view = mapView;
}
导入 BMKMapView.h后,实例化 BMKMapView类。
8,在 AppDelegate中授权过后 ,可以随意在任意的Viewcontroller中使用Mapview了。
(当然, BMKMapManager授权也可以写到任意的ViewController中,但是这样的话,只能在这个ViewController中使用MapView,换其它类使用地图的话,还需再来授权,否则地图view会是黑屏)。
上次我们说到在苹果开发者官网查看MapKit文档,下面直接讲解如何加载MapKit的视图及相关的属性。
导入系统文件,创建MKMapView对象即可,地图就可以加载了。