ios - Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a
问题描述
Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a。因此,我无法使用该框架在模拟器 11.x 和 12.x 模拟器上运行。
检查 Swift5 框架头文件显示以下结构:
#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
....
....
....
#elif defined(__ARM_ARCH_7A__) && __ARM_ARCH_7A__
// Generated by Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
....
....
....
#endif
从上面可以明显看出,该框架没有与模拟器架构匹配的头文件。
如何将模拟器头文件打包到框架中?
解决方案
标头是在构建期间生成的。我假设您尝试使用使用 lipo 创建的胖框架。
在构建期间,您会为每个生成 Header、Info.plist、模块和二进制文件。
因此,在合并模拟器文件和设备文件的步骤中,您可以创建一个头文件,为模拟器和设备重新组合头文件。不要忘记if
为模拟器添加一个,否则将无法编译。sh脚本:
# if use only with simulator
echo '#if TARGET_OS_SIMULATOR' > build/arch/universal/Framework.framework/Headers/Framework-Swift.h
# simulator header
cat build/arch/x86/Framework.framework/Headers/Framework-Swift.h >> build/arch/universal/Framework.framework/Headers/Framework-Swift.h
# end of if
echo '#endif' >> build/arch/universal/Framework.framework/Headers/Framework-Swift.h
# device header
cat build/arch/arm/Framework.framework/Headers/Framework-Swift.h >> build/arch/universal/Framework.framework/Headers/Framework-Swift.h
要回答您的问题,您只需连接两者并添加一个 if 来为每种情况选择正确的。
推荐阅读
- react-native - 如何在反应原生 webview 或 exoplayer 中播放 Widevine drm 内容?
- android - 播放控制台 - 使用不同版本的 apk 上传失败,已经有一个版本 1 - 但我有版本 2
- python - 如何在电报机器人中运行时停止工作
- c++ - 重载 C 预处理器宏 - 基于调用语法的区分
- swift - onAppear 中的 SwiftUI 异步数据获取
- algorithm - 如何以编程方式获得公式的派生形式?
- c# - 不能隐式转换类型'System.Collections.Generic.List
' 到 'System.Collections.Generic.IList - python - 为具有定性数据的多元回归模型构建矩阵
- swift - 致命错误:在隐式展开可选 va 时意外发现 nil
- powershell - 尝试下载 EXE 文件后,PowerShell (x64) 停止工作 (Windows 7)