如何创建一个纯 Swift 模块
1个回答
展开全部
苹果提供了一种机制通过框架来分发代码,所以使用ObjC和Swift代码来自定义一个框架库是非常简单的(对于iOS也一样)。接下来创建一个纯的Swift模块,就像苹果创建的Swift标准库和Cocoa/Cocoa Touch桥接库。
现在我们来创建一个简单的叫Logger的Swift模块,它只有一个方法:log。这个Swift模块至少要包含三个文件,文件列表如下:
Logger.swiftmodule - 公共接口的定义文件
Logger.swiftdoc - 文档文件
libLogger.a - 编译后的库文件(可能是一个动态库,这取决于你的工程任务)
我们现在开始创建一个Logger的库:
下面将使用"> "前缀来实例化这个Logger对象,并记录一些日志:
现在来创建libLooger.a文件,命令如下:
xcrun swift -emit-library -emit-object Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name Logger
ar rcs libLogger.a Logger.o
-emit-library表示生成动态链接共享库,而使用-emit-object不仅会生成文件还会生成包含main方法,所以你会得到一个”Duplicate Symbol“的链接错误。
解决方法很简单:执行时,同时加入-emit-object和-emit-library两个参数,就像上面描述的命名一样。
接下来创建Logger.swiftdoc和Logger.swiftmoudle:
xcrun swift -emit-module Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name Logger
至此我们有了一个完整的模块,可以添加到一个真实地工程里面了。创建一个简单地Swift的工程,添加下面的这些文件:
然后设置Swift的"Import paths"配置:
为了使你工程正常运行,你还需要导入刚创建的Logger模块:
程序成功运行
现在我们来创建一个简单的叫Logger的Swift模块,它只有一个方法:log。这个Swift模块至少要包含三个文件,文件列表如下:
Logger.swiftmodule - 公共接口的定义文件
Logger.swiftdoc - 文档文件
libLogger.a - 编译后的库文件(可能是一个动态库,这取决于你的工程任务)
我们现在开始创建一个Logger的库:
下面将使用"> "前缀来实例化这个Logger对象,并记录一些日志:
现在来创建libLooger.a文件,命令如下:
xcrun swift -emit-library -emit-object Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name Logger
ar rcs libLogger.a Logger.o
-emit-library表示生成动态链接共享库,而使用-emit-object不仅会生成文件还会生成包含main方法,所以你会得到一个”Duplicate Symbol“的链接错误。
解决方法很简单:执行时,同时加入-emit-object和-emit-library两个参数,就像上面描述的命名一样。
接下来创建Logger.swiftdoc和Logger.swiftmoudle:
xcrun swift -emit-module Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name Logger
至此我们有了一个完整的模块,可以添加到一个真实地工程里面了。创建一个简单地Swift的工程,添加下面的这些文件:
然后设置Swift的"Import paths"配置:
为了使你工程正常运行,你还需要导入刚创建的Logger模块:
程序成功运行
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询