我正在使用Swift 4.2和Xcode 10.1。我试图在Swift中构建一个依赖于目标C编写的Alamofire的框架。我按照README中Alamofire的说明手动添加了Alamofire.xcodeproj。个体目标很好。我的框架目标建立良好。
当我尝试使用使用以下命令的脚本创建胖框架时,就会出现问题
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失败。
我尝试过的事情:
我认为xcodebuild命令需要更多输入。我想念什么?
更新:
我进一步挖掘。标头文件夹 Debug-iphoneos / Alamofire.framework /内部为空,预计将包含伞头Alamofire.h。
答案 0 :(得分:2)
您尝试过以下任何一种方法吗?
1。在构建设置->链接->其他链接器标记中添加-ObjC。
2。将Objective C框架所依赖的所有框架都导入到您的项目中,即在构建阶段->将二进制文件与库链接。
3。将这些代码的#import添加到前缀头文件中,该文件必须在“前缀头”字段的构建设置中添加到您的项目中。
更新: 阐述点3:
要在Swift项目中使用Objective C Framework,必须在该项目中创建一个Swift Bridging Header文件。最好的方法是手动创建.h文件。
首先,将名称为MyProjectName-Bridging-Header.h的头文件添加到项目中。这将是单个头文件,您可以在其中导入需要您的Swift代码才能访问的所有Objective C代码。
在项目构建设置中查找“ Swift编译器-代码生成”部分。将路径添加到项目根文件夹中“ Objective C桥接头”旁边的桥接头文件中。它应该是MyProject / MyProject-Bridging-Header.h
它只需要一个桥接头。在此文件中输入#import语句,您的类将在您的Swift项目代码中可用,而无需任何其他#import语句。
您也可以看一下本教程: Integrating objective c in swift
答案 1 :(得分:1)
结果证明,嵌套依赖关系是一个问题。
MyFramework依赖于Moya,而Moya依赖于Alamofire。在将Alamofire.xcodeproj作为子模块添加到Moya.xcodeproj之后,xcodebuild神奇地正确地找到了所有伞头。