前言
在开发跨平台软件时候,有部分库使用了C++进行编写,该库最终编译成*.dylib
形式,如果在iOS或者macOS中使用Swift进行使用,需要使用Objective-C进行桥接。
Swift连接Objective-C
- 新建Swift项目,Console即可,方便用于测试。
- 在项目中新建
*.m
文件,新建该文件XCode会弹出新建Bridge的窗口,点击是即可,会自动生成Bridge的相关文件。 编写Objective-C代码
// Bridge.h #import <Foundation/Foundation.h> @interface MyObject : NSObject @property (strong, nonatomic) id someProperty; - (void) someMethod; @end
编写实现文件
@implementation MyObject - (void) someMethod { NSLog(@"someMethod invoke"); } @end
Swift中引用
// main.swift import Foundation var myObj = MyObject() myObj.someMethod() //<== print "someMethod invoke"
加载
*.dylib
Swift中使用dylib可以通过Objective-C进行衔接,假设此处编译出libTest.dylib
,在Objective-C中加载该库:#import <Foundation/Foundation.h> #import <dlfcn.h> #import "myObject.h" typedef void (*PFN_someMethod)(); int main(){ void* handle = dlopen("/path/to/file.dylib",RTLD_LAZY); if(handle == NULL){ printf("Load dylib failed: %s", dlerror()); return 0; } PFN_someMethod someMethod = dlsym(handle,"someMethod"); // invoke someMethod(); return 0; }
- 在iOS中加载dylib
以上演示了Swift如何通过Objective-C链接dylib的方式,那么如何嵌入dylib到iOS程序呢,可以按照以下路径进行的导入:Project -> Build Phases -> Embed Libraries
点击+即可进行选取导入。
iOS上架
iOS上架不允许直接使用dylib的库,需要使用framework的模版生成相关库文件。
结语
本次演示了如何在iOS程序中加载编译的dylib,该方式可以方便的引用已有的代码。
引用
https://developer.apple.com/documentation/swift/importing-objective-c-into-swift