为什么构建会为模拟器而不是设备成功的任何想法?
我创建了一个Cocoa框架,并能够将其添加到新的单页面应用程序项目中,并调用框架中定义的方法。只要我选择了模拟器作为构建目标而不是设备,项目就会构建。我没有尝试过运行它,只是建设。我正在使用Swift 3和XCode 8.1。
我收到Use of unresolved identifier
次错误。
答案 0 :(得分:3)
听起来你为模拟器而不是设备构建了框架。当链接器尝试链接设备的应用程序时,它没有找到为该设备构建的框架。
其中两种方法如下:
1)构建框架时,设置适合设备的活动方案(Xcode中的左上区域)。然后,在构建设备的应用程序之前,请转到应用程序的“构建设置”,并将框架的位置添加到“框架搜索路径”。确保选择正确的二进制文件!例如,在为iOS模拟器构建时,框架的调试二进制文件将位于名为Build / Products / Debug-iphonesimulator的目录中。
使用此方法,您还需要将框架添加到应用程序的“复制文件”构建阶段,并将“目标”指定为“框架”。
2)将框架嵌入到应用程序中,使其成为应用程序的依赖项,并将应用程序设置为与应用程序的构建阶段中的框架链接。见
关于嵌入框架和其他有用的框架相关信息。实现此目的的一种便捷方法是转到应用程序目标的“常规”选项卡,并在“嵌入式二进制文件”部分中添加框架。
或者,如果您在创建应用程序后创建框架,则可以让Xcode将框架嵌入到应用程序中。
答案 1 :(得分:0)
您应该制作一个胖图书馆: 要制作脂肪库,请按以下步骤操作:
1-为iOS模拟器构建您的Freamework目标,并从桌面上的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-复制在上述步骤中创建的yourFramework二进制文件,并将其替换为yourFrameworkName-dev.framework文件夹中的二进制文件。
6-打开同一文件夹中包含的“ Info.plist”文件。
7-在“ CFBundleSupportedPlatforms”数组中添加“ iPhoneSimulator”字符串。
8-最终的plist文件如下所示:
9-从文件夹:
yourFrameworkName-sim.framework/Modules/yourFrameworkName.swiftmodule/
复制“ x86_64.swiftdoc”和“ x86_64.swiftmodule”并将其粘贴到
yourFrameworkName-dev.framework/Modules/yourFrameworkName.swiftmodule/
10-通过执行上述步骤,您已经将yourFrameworkName-dev.framework从仅设备转换为通用的胖框架。将其重命名为yourFrameworkName.framework。
11-通过Xcode中的“嵌入式二进制文件”选项包含此框架。将模块导入文件中,便可以成功编译它。