代码之家  ›  专栏  ›  技术社区  ›  sandpat

创建具有目标C框架依赖性的FAT框架

  •  1
  • sandpat  · 技术社区  · 6 年前

    我正在使用Swift 4.2和Xcode 10.1。我正试图用Swift构建一个依赖于目标C中编写的AlamoFire的框架。我手工添加了AlamoFire.xCodeProj,如AlamoFire在自述文件中给出的那样。个人目标建立良好。我的框架目标构建良好。

    当我尝试使用使用以下命令的脚本创建一个FAT框架时,问题就出现了

    xcodebuild -project "${FRAMEWORK_NAME}.xcodeproj" -scheme "${FRAMEWORK_NAME}" -configuration "${CONFIGURATION}" -arch arm64 -arch armv7 -arch armv7s only_active_arch=no BITCODE_GENERATION_MODE=bitcode defines_module=yes -sdk "iphoneos" -derivedDataPath "${OUTPUT_DIR}"
    

    我得到以下错误:

    未找到伞头“alamofire.h”

    无法生成Objective-C模块“Alamoire”

    错误的第二行来自另一个依赖于Alamoire的依赖项“moya”(见图)。
    enter image description here

    令人费解的是,对于通常的目标来说,普通的Cmd+B工作得很好,但是xcodebuild失败了。

    我尝试的事情:

    1. 删除派生文件夹,清除生成。
    2. 首先构建单个依赖项,然后构建通用聚合目标。
    3. Creating a custom module map
    4. 将所有依赖项的配置更改为相同,例如调试
    5. 将alamofire.xcodeproj的swift语言版本更改为swift 4.2

    我认为xcodebuild命令需要更多的输入。我错过了什么?

    更新:

    我更深入地挖掘。邮件头文件夹 debug iphoneos/alamofire.framework/内部为空,应包含伞头alamofire.h。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Pooja Kamath    6 年前

    您是否尝试过这些方法:

    1.在生成设置中添加-objc->链接->其他链接器标志。

    2.将目标C框架所依赖的所有框架导入到您的项目中,即在构建阶段——>将二进制文件与库链接。

    3.为前缀头文件添加“导入”,必须在“前缀头”字段的“生成设置”中将其添加到项目中。

    更新: 阐述要点3:

    要在Swift项目中使用目标C框架,必须在该项目中创建一个Swift桥接头文件。最好的方法是手动创建.h文件。

    首先,在项目中添加一个名为myprojectname bridging header.h的头文件。这将是一个头文件,您可以在其中导入任何需要您的swift代码才能访问的目标C代码。

    在项目生成设置中查找swift编译器-代码生成部分。将路径添加到项目根文件夹中目标C桥接头旁边的桥接头文件。它应该是myproject/myproject桥接头.h

    它只需要一个桥接头。在此文件中输入import语句,您的类将在Swift项目代码中可用,无需任何其他import语句。

    build settings

    您还可以查看本教程: Integrating objective c in swift

        2
  •  1
  •   sandpat    6 年前

    事实证明,嵌套的依赖关系是一个问题。

    MyFramework依赖于Moya,Moya依赖于Alamoire。在我将alamofire.xcodeproj作为子模块添加到moya.xcodeproj之后,xcodebuild神奇地找到了所有伞头。

    推荐文章