【问题标题】:How to make universal framework in iOS?如何在 iOS 中制作通用框架?
【发布时间】:2017-02-01 03:12:51
【问题描述】:

我创建了一个项目 (Project 1),我正在创建一个框架,我想在不同的项目 (project 2) 中使用它,就像任何其他框架一样(拖放到项目中)。

我的问题

但是当我创建框架(在项目 1 中)时,当我在项目 2 中使用此框架时,在 xcode 中选择设备时,它仅适用于设备而不适用于模拟器。 反之亦然,如果我在项目 1 中创建框架并在 xcode 中选择模拟器并在项目 2 中使用此框架,则它仅适用于模拟器。

错误是

我正在努力实现的目标

我从项目 1 创建的框架应该在项目 2 的设备和模拟器上运行。

以下是我在两个项目中的设置

【问题讨论】:

    标签: ios xcode frameworks swift3 build-settings


    【解决方案1】:

    Xcode 将根据选择的目标构建框架。如果为模拟器构建框架,架构将是 X86_64,i386,另一方面,对于设备,它将是 armv7,arm64。 可以使用 lipo 命令检查框架的架构,如下所示。

    lipo -info sample.frameowrk/sample
    

    现在,在您的情况下,您希望您的框架应该同时支持模拟器和设备。因此,您需要结合两个框架(为设备和模拟器构建)并使用 lipo 命令创建一个 FAT 框架,如下所示:

    lipo <path to framework build for simulator>/simulator.framework <path to framework build for device>/device.framework -create -output universal.framework
    

    生成的通用框架将支持这两个平台。您可以查看通用框架支持的架构如下:

    lipo -info universal.framework/universal 
    
    output : arm64,armv7,x86_64,i386
    

    【讨论】:

    • 嗨,Harish,这里的文件 1 和文件 2 是什么意思?如果是这个框架名称,为什么一个框架有两个不同的名称?我应该从产品文件夹中运行这个命令吗?
    • 这听起来像是正确的方法,我以前也这样做过,但忘记了。我认为他的意思是为模拟器和设备编译项目并从中获取输出框架,然后运行上面的命令,其中 file1 = 模拟器框架,file2 = 设备框架等。您可以在两个框架文件的任何地方运行命令存在,只需重命名它们,这样在编译第二个时就不会被覆盖。
    • 我收到类似 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo 的错误:无法创建临时输出文件:OcrSdk.framework/OcrSdk。 lipo(没有这样的文件或目录)。为什么我无法创建输出?
    • @sss 我已经修改了答案以便更好地理解。想法是为两者(模拟器和设备)构建框架并将它们结合起来创建一个通用框架,该框架将同时支持模拟器和设备。您可以发布您尝试执行的完整命令吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多