![](/img/trans.png)
[英]Objective-c and Swift mixed project -Swift.h file report errors
[英]Swift classes marked with @objc not being added to “-Swift.h” header in mixed Objective-C/Swift framework
我正在尝试将旧的静态链接库转换为框架。 在静态库中混合使用swift和目标c时,可以正确生成所有标头。 但是,切换到框架目标并添加带有@objc标头的swift文件时,该类不会添加到-Swift.h标头中。 我可以导入标头,但找不到快速类。 这在Xcode 10.2中,并且尝试同时使用Swift 4.2和5。
XCode中是否有任何特定设置会影响混合的Objective C / Swift框架目标中* -Swift.h标头的生成?
我有一个类似的问题。 就我而言,这是Xcode 10.2中的一个已知问题:
https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes
如果您要构建一个包含Swift代码的框架,并使用lipo创建同时支持设备和模拟器平台的二进制文件,则还必须为每个平台组合生成的Framework-Swift.h标头,以创建同时支持设备和模拟器的标头平台。 (48635615)...
就我而言,我要做的就是将Carthage
更新为最新版本0.33.0
问题似乎是苹果新的构建系统,他们在编译时设定的期望以及项目设置中相互依存关系的数量的结合。
新的构建系统并行运行Swift编译。 当具有多个目标库和Swift混合的库/框架依赖项时,编译器似乎未按时生成-Swift.h文件。 在静态库中,-Swift.h文件似乎是在Swift编译过程结束时生成的,这意味着在进行Objective C编译时,生成它们的速度不够快,无法由Objective C文件使用。 生成框架时,似乎编译器会在编译过程开始时生成标头,并且Swift文件未完全编译,并且-Swift.h文件无法使用Objective C类接口和协议正确生成。
这意味着最终的意思是,我们不能依靠“目标依赖项”来正确构建依赖项。
因此,如何在没有大量手动脚本的情况下构建混合了Objective C和-Swift.h的.framework。
这是我发现将起作用的技巧。
以下是用于复制* -Swift.h文件发布版本的示例脚本。
header_file="${TARGET_TEMP_DIR}/../${PRODUCT_MODULE_NAME}.build/DerivedSources/${PRODUCT_MODULE_NAME}-Swift.h"
header_dir="${BUILT_PRODUCTS_DIR}/${PUBLIC_HEADERS_FOLDER_PATH}"
mkdir -p "$DIR"
echo "copying $header_file $header_dir"
cp -f "$FILE" "$DIR"
更新
将所有模块都标记为Swift编译模式为“ Whole Module”似乎对这个问题有积极的影响,但是我还没有对其进行全面的测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.