因为工作的需要,要在Xcode6.2下将百度地图SDK导入到工程中,但是导入中发现了很多的问题,百度了网上前人得帖子,都不是很详细,或者因为很比较早的原因,都有这样那样的问题,百度的官网上的说明也不是很详细,于是花了半天时间终于搞定,这就把步骤与大家分享。
ios百度地图sdk下载页面:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download
ios百度地图开发者key申请:http://developer.baidu.com/map/ios-mobile-apply-key.htm
这些我就不详细说了,网上很多帖子,一一参照即可。
1:将下载的sdk包解压,里面有如下内容:
我们只需要将第二个lib文件解压,第一个是帮助文档,第三个是例子,可以自己看。
2:将lib解压,得到如下内容
a:inc文件夹内都是头文件
b:mapapi.bundle是百度自带的资源图标
c:readme.txt是帮助文档
d:剩下的两个一个是模拟器的.a文件,一个是真机的.a文件
这里我使用的方法是把模拟器的.a和真机的.a合并到一起去,使用lipo命令,这个是基本的操作,不会的话可以百度IOS模拟器.a与真机.a合并
在此目录下新建一个文件夹,把合并之后的.a文件放进去等待使用,如下图:
自此,准备工作已经完毕。
1:打开xcode6.2,新建一个工程,将mapapi.bundle和Relesae-iphone通过右键工程选择“Add Files to …”,导入到工程中
编译通过,没问题
2:然后设置头文件的链接路径,在 Xcode 的 Project -> Edit Active Target -> Build Settings-> Search Path -> Header Search Paths 中添加头文件目录:
"$(SRCROOT)/inc"
其中$(SRCROOT)宏代表您的工程文件所在目录。
直接复制粘贴即可,/inc的路径可能和实际的有所不同,根据自己的情况做相应的修改
3:设置静态库的链接路径,在 Xcode 的 Project -> Edit Active Target -> Build Settings
-> Search Path -> Library Search Paths 中添加您的静态库目录,
添加内容如下:
"$(SRCROOT)/Release-iphone$(EFFECTIVE_PLATFORM_NAME)"
其中,$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)
宏代表当前配置是 OS 还是 simulator,在编译时编译器会根据您当前的编译环境
自动匹配合适的.a 文件。
4:导入 framework
百度地图 API 中提供了定位功能和动画效果,V2.0.0 版本开始使用 OpenGL
渲染,因此 必 须 引 入 CoreLocation.framework 、 QuartzCore.framework 、
SystemConfiguration.framework、CoreGraphics.framework、OpenGLES.framework;
V2.0.2 版本新增短串分享功能,如果您使用了通过信息来进行短串分享的功
能,需要额外引入 MessageUI.framework,如果您没有用到该功能则不需要引入;
V2.1.0 版本开始对 iOS7 系统下的 IMEI(设备唯一标识)进行了适配,因此
使用 V2.1.0 及以上版本必须要额外引入 Security.framework;
5. 其他配置
a、 静态库中采用 ObjectC++实现,因此需要您保证您工程中至少有一个.mm 后
缀的源文件,您可以采取以下两种方法的任意一种来修改您的工程文件:
(1) 将任意一个.m 后缀的文件改名为.mm;
(2) 在工程属性中指定编译方式,即将 Xcode 的 Project -> Edit Active Target
-> Build -> GCC4.2 - Language -> Compile Sources As 设置为
"Objective-C++";
b、 如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,
编译器在链接时不会链接对应符合,需要在工程属性中显式设定:在 Xcode
的 Project -> Edit Active Target -> Build Settings -> Linking -> Other Linker Flags 中
添加"-ObjC";
c、 如果使用 Xcode5 开发基于 iOS7 的百度地图应用时,请将 Xcode5 的 Project ->
Edit Active Target -> Build Settings -> Linking -> Other Linker Flags 中的"-ObjC"修
改为"-all_load";
然后就可以运行了。