Swift Framework构建对于设备而言是失败的,但对于模拟器则不然

问题描述 投票:4回答:2

任何想法为什么构建将成功模拟器而不是设备?

我创建了一个Cocoa框架,并能够将其添加到新的单页面应用程序项目中,并调用框架中定义的方法。只要我选择了模拟器作为构建目标而不是设备,项目就会构建。我没有尝试过运行它,只是建设。我正在使用Swift 3和XCode 8.1。

我得到Use of unresolved identifier错误。

swift3 xcode8 ios-frameworks
2个回答
3
投票

听起来你为模拟器而不是设备构建了框架。当链接器尝试链接设备的应用程序时,它找不到为该设备构建的框架。

其中两种方法如下。

1)构建框架时,设置适合设备的活动方案(Xcode中的左上区域)。然后,在为设备构建应用程序之前,请转到应用程序的“构建设置”,并将框架的位置添加到“框架搜索路径”。确保选择正确的二进制文件!例如,在为iOS模拟器构建时,框架的调试二进制文件将位于名为Build / Products / Debug-iphonesimulator的目录中。

使用此方法,您还需要将框架添加到应用程序的“复制文件”构建阶段,并将“目标”指定为“框架”。

2)将框架嵌入到应用程序中,使其成为应用程序的依赖项,并将应用程序设置为与应用程序的构建阶段中的框架链接。看到

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

关于嵌入框架和其他有用的框架相关信息。实现此目的的一种便捷方法是转到应用程序目标的“常规”选项卡,并在“嵌入式​​二进制文件”部分中添加框架。

或者,如果您在创建应用程序后创建框架,则可以要求Xcode将框架嵌入到应用程序中。


0
投票

你应该制作一个胖库:为了制作一个胖库,一步一步做:

1 - 为iOS模拟器构建yourFreamework目标,并从桌面上的products文件夹中提取框架。

2 - 将框架重命名为yourFrameworkName-sim.framework,以便以后可以区分。

3 - 对iOS设备重复步骤1和2。您可以选择“通用iOS设备”。不要忘记将框架重命名为yourFrameworkName-dev.framework。

4 - 使用以下命令将两个二进制文件合并为一个胖二进制文件(确保在运行此命令时在桌面上)。

$lipo -create ./yourFrameworkName-sim.framework/yourFrameworkName ./yourFrameworkName-dev.framework/yourFrameworkName -output ./yourFrameworkName

5 - 复制在上面步骤中创建的框架二进制文件,并将其替换为您在FrameworkName-dev.framework文件夹中的二进制文件。

6 - 打开同一文件夹中包含的“Info.plist”文件。

7 - 在'CFBundleSupportedPlatforms'数组中添加'iPhoneSimulator'字符串。

8 - 最终的plist文件如下所示:

enter image description here

9 - 来自文件夹:

yourFrameworkName-sim.framework/Modules/yourFrameworkName.swiftmodule/

复制'x86_64.swiftdoc'和'x86_64.swiftmodule'并粘贴它们

yourFrameworkName-dev.framework/Modules/yourFrameworkName.swiftmodule/

10 - 通过以上步骤,您已将yourFrameworkName-dev.framework从仅设备转换为通用fat框架。将其重命名为yourFrameworkName.framework。

11 - 通过Xcode中的“Embeded Binaries”选项包含此框架。在您的文件中导入模块,您就可以成功编译它。

© www.soinside.com 2019 - 2024. All rights reserved.