创建通用(胖)Swift框架

作为Wireless Registry的移动开发人员,我一直在调整,升级和个性化我们的iOS和Android SDK,以供开发人员集成到他们的应用程序中。 当然,在任何人使用板载SDK将应用程序投入生产之前,他们需要在一系列设备和操作系统版本上对其进行测试。

多年来,尽管拒绝具有冗余架构片段的二进制文件一直是App Store审核过程中不受欢迎的怪癖,但绝大多数iOS开发人员至少部分地依赖模拟器来进行方便的版本和设备测试。 因此,我通常为开发人员提供准备好发布的框架,其中包括对真实设备体系结构(ARMv7,ARMv7s,ARM64)的唯一支持,以及带有“胖”二进制文件的框架,除实际设备外,还可以在模拟器上进行测试。 在本文中,我将描述将Swift框架转换为胖二进制文件的最快方法(不过,如果您有几分钟的时间,则应在Build Phases中设置运行时脚本,而不要使用命令像我这样的线)。

首先,创建Swift框架

在XCode中创建一个新的框架项目,选择“框架和库”,突出显示“ Cocoa Touch Framework”图标,然后命名您的项目。

将所有Swift文件添加到项目中,并确保将要从外部访问的所有类/方法都声明为public。

最后,确保已将调试版本的“仅构建活动体系结构”设置为“ ”:

现在,使框架通用

打开命令行,导航到可以保存临时文件的目录,然后输入(但不执行):

$ lipo -create -output YOUR-FRAMEWORK-PROJECT-NAME

现在,回到您的框架项目并运行两次:一次以连接到计算机的真实设备为目标,一次以模拟器为目标。 然后,在“产品”文件夹下,右键单击YOUR-FRAMEWORK-PROJECT-NAME.framework,然后选择“在Finder中显示”。

您应该看到一个类似于以下内容的目录结构:

右键单击Debug-iphoneos框架内的可执行文件 目录,按住Option键,复制其路径,然后将其粘贴到命令行中。 添加一个空格,然后对Debug-iphonesimulator框架目录中的可执行文件执行相同的操作。

您的命令行现在应如下所示:

$ lipo -create -output您的框架项目名称实设备可执行路径名仿真器可执行路径名

现在执行它! 结果应该是您指定目录中的新可执行文件。 删除Debug-iphoneos框架目录中的可执行文件,并将其替换为刚创建的可执行文件。

最后,将Debug-iphonesimulator版本中的i386和x86_64切片从Debug-iphoneos目录拖到.swiftmodule文件夹中。 现在,您在Debug-iphoneos中的框架目录是通用的!

最后,将框架导入Swift项目

要亲自查看,请启动一个新的Swift项目,导航到项目窗口内的“常规”选项卡,然后将.framework目录拖动到Embedded Binaries(选择“如果需要,复制项目”)。

现在,只需导入框架,在代码中的任何位置调用其方法和类,然后在真实的设备或模拟器上运行它即可!