我想用Swift创建一个简单的应用程序,通过iPhone的麦克风录制声音,然后播放录制的声音。
为此,我想使用Superpowered库,它是一个具有头文件的静态库。
因此,我尝试将.a和.h文件拖放到我的项目中(Xcode会为我创建桥接头文件),将.a添加到“Linked Frameworks and Libraries”中,在Xcode > Target > General中(也在Xcode > Target > Build phases > “Link Binary With Libraries”中),并在Xcode > Target > Build Settings > Search Paths > Library Search Paths中索引.h文件路径。
但是,我遇到了“ld: symbol(s) not found for architecture arm64”的错误,与这里完全相同,并尝试了在网上找到的所有解决方法,仍无法编译。
因此!
Superpowered为我们提供了一个示例应用程序,以显示如何混合Objective-C++并在Swift项目中使用其库(如果您想要链接,请参见这里)。
以下是示例项目的一些截图,其中包含我的理解和不理解的内容:
桥接头文件包含了我想在Swift代码中使用的库方法的原型(虽然我不喜欢这样,但如果这是唯一的方式…)。
这是Swift代码所在的viewController文件,我可以通过Bridging-Header-File创建一个Superpowered对象,并调用其中的方法。
但是我甚至不知道为什么有这个Objective-C++文件以及它包含了什么内容。它好像出现得很突然,甚至没有他们的库文件。
有了这个示例项目的想法,我创建了自己的项目,以下是一些截屏:
与示例项目中相同的Bridging-Header-File,只是我包含了SuperpoweredIOSAudioIO.h
,这样我就可以使用SuperpoweredIOSAudioIODelegate
。
这是我的viewController文件,其中包含Swift代码,我可以通过Bridging-Header-File创建一个Superpowered对象,并调用其中的方法。
到这里为止一切都很好,但是我无法创建SuperpoweredRecorder
对象。如果我尝试在我的Bridging-Header-File中包含SuperpoweredRecorder.h
文件,就会出现这些错误:
我发现原因是因为SuperpoweredRecorder.h
包含一些.cpp文件,我需要创建一个cpp的包装器(有点像我之前用的桥接头文件,对吧?),但是那个包装器还要包括一个.h文件和一个.mm文件,我不知道在那个.mm文件里应该放什么(SuperpoweredRecorder.cpp
的代码?但我无法访问它)。
所以,我对所有这些东西有点困惑,您能帮我理解如何在我的Swift项目中使用所有的Superpowered库吗?