1、在Xcode中新建一个Project.选择如下图:
2、然后点next,下一步至于填写的东西随意。
创建完成后结构如下图:
3、未生成的静态库在Products下为红色,
然后随便在.h文件中写一个简单的方法sayHello
#import <Foundation/Foundation.h>
@interface TestStaticeLibrary : NSObject
-(void)sayHello
@end
.m文件内容:
#import "TestStaticeLibrary.h"
@implementation TestStaticeLibrary
-(void)sayHello{
NSLog(@"Hello OSChina")
}
@end
由于模拟器是采用i386模式进行开发的如果要在模拟器中使用静态库的话需要把iOS Device改成iphone 6.0 Simulator.然后点击run,就会生成.a文件。
引用方法:
创建任意IOS project,把刚才生成的静态库直接拖到新的项目中,结构如下:
如果只是单单加入静态库是不够的,之前生成的还有一个文件夹include,里面还带了一个.h文件,把.h文件引入项目中,最终目录结构如下:
如果不是直接拖入项目中的话可以,鼠标右键在项目中,选择ADD Files to "XXXX"
在ViewController 敲入如下代码:
#import "ViewController.h"
#import "TestStaticeLibrary.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad]
TestStaticeLibrary *t = [[TestStaticeLibrary alloc] init]
[t sayHello]
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning]
// Dispose of any resources that can be recreated.
}
@end
然后运行项目 在控制台看到以下内容
1、将下载下来的sdk中的inc文件夹、mapapi.bundle、libbaidumapapi.a添加到工程中,其中libbaiduapi.a有两个,一个对应模拟器一个对应真机,导入方法如下:第一种方式:直接将对应平台的.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中添加-ObjC
3.设置静态库的链接路径,在XCode的Project ->Edit Active Target ->Build ->Search Path ->Library Search Paths中添加您的静态库目录,比 如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator
我是用第二种方法,在真机和模拟器下都可以调试。
2、因为静态库采用Object C++实现,所以在工程中至少要有一个.mm的文件存在(可以把appdelegate.m改为.mm)
3、导入工程所需的框架:CoreLocation.framework,QuartzCore.framework,OpenGLES.framework,SystemConfiguration.framework
4、在AppDelegate中添加BMKMapManager对象,这里要在百度地图api网站上申请一个应用key
AppDelegate.h文件如下:
[cpp] view plain copy
#import <UIKit/UIKit.h>
#import "TestViewController.h"
#import "BMapKit.h"
#define BaiduMapKey @"A56A733C30B159166B74AD41530CB013685035F9"
@interface AppDelegate : UIResponder <UIApplicationDelegate>{
BMKMapManager* _mapManager
}
@property (strong, nonatomic) UIWindow *window
@end
AppDelegate.m文件如下:
[cpp] view plain copy
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
_mapManager = [[BMKMapManageralloc] init]
BOOL ret = [_mapManagerstart:BaiduMapKey generalDelegate:nil]
if (!ret) {
NSLog(@"BMKMapManager start failed!")
}
self.window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]
// Override point for customization after application launch.
self.window.backgroundColor = [UIColorwhiteColor]
TestViewController *root = [[TestViewControlleralloc] init]
self.window.rootViewController = root
[self.windowmakeKeyAndVisible]
returnYES
}
到这里,如果工程可以正常编译,则说明相关设置已经成功了。。下面就可以用百度地图api了。。。
新建一个iOS的空项目:这个非常的简单就不说了,然后建立一个要使用的库文件:然后添加一个静态库的工程,这个工程就是你静态库函数,你可以在里面写任何你需要的函数:
现在如果你要编译原来的TestUseLib工程的时候是编译不过去的,你需要添加的地方有几个:图片文件上传不了描述一下:
选择工程文件(不是库文件)在targets下选择工程的一个target
然后在Build Phases列中设置:Target Dependencies加上那个库工程,以及在
Link Binary with Libraries加上那个库工程的库文件(.lib)
同时设置.h文件路径:
在build Setting列中的Search Paths下的header Search Paths加上头文件的查找路径:
你可以写绝对路径,但是这样不好,只能在自己的机器上运行,到别人的机器上去了就会有问题:
$(SRCROOT)这个东西表示工程的根路径,其实也就是你在建立工程的时候选择的那个路径。
这就是静态库的使用。
如果你现在需要引用别人的一个.a库,那就更加简单了,你只需要将.a文件和.h文件放到你的工程目录下,然后将.a文件与.h文件拖动到xcode的工程中就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)