1

我正在使用 Swift 4.2 和 Xcode 10.1。我正在尝试在 Swift 中构建一个框架,该框架依赖于用 Objective C 编写的 Alamofire。我手动添加了 Alamofire.xcodeproj,如 Alamofire 的自述文件中给出的那样。单个目标构建良好。我的框架目标构建良好。

当我尝试使用使用以下命令的脚本创建胖框架时出现问题

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 模块“Alamofire”

错误的第二行来自另一个依赖于 Alamofire 的依赖项“Moya”(见图)
在此处输入图像描述

令人费解的是,普通的 Cmd+B 对通常的目标工作正常,但 xcodebuild 失败。

我尝试过的事情:

  1. 删除派生文件夹,清理构建。
  2. 首先构建单个依赖项,然后构建通用聚合目标。
  3. 创建自定义模块映射
  4. 将所有依赖项的配置更改为相同,例如调试
  5. 将 Alamofire.xcodeproj 的 Swift 语言版本更改为 Swift 4.2

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

更新:

我进一步挖掘。 Debug-iphoneos/Alamofire.framework/ 中的 Headers 文件夹是空的,它应该包含伞头 Alamofire.h。

4

2 回答 2

2

您是否尝试过以下任何一种:

1.在Build Settings -> Linking -> Other Linker Flags中添加-ObjC。

2.将Objective C框架依赖的所有框架导入您的项目,即;在Build Phases --> Link Binary With Libraries 中。

3. 将#import 添加到前缀头文件中,必须在Prefix Header 字段的构建设置中将其添加到您的项目中。

更新: 详细说明第 3 点:

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

首先,向您的项目添加一个名为:MyProjectName-Bridging-Header.h 的头文件。这将是您导入任何需要 Swift 代码访问的 Objective C 代码的单个头文件。

在您的项目构建设置中找到 Swift Compiler - Code Generation 部分。将路径添加到项目根文件夹中的 Objective C Bridging Header 旁边的桥接头文件。它应该是 MyProject/MyProject-Bridging-Header.h

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

构建设置

你也可以看看这个教程: Integrating objective c in swift

于 2019-01-28T03:07:31.100 回答
1

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

MyFramework 依赖于 Moya,而 Moya 依赖于 Alamofire。在我将 Alamofire.xcodeproj 作为子模块添加到 Moya.xcodeproj 之后,xcodebuild 神奇地正确找到了所有伞头文件。

于 2019-01-29T14:05:21.343 回答