Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a
Posted
技术标签:
【中文标题】Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a【英文标题】:Xcode11 Swift5 framework does not contain header for simulators, only for arm64 and armv7a 【发布时间】:2019-10-09 04:59:04 【问题描述】:。 因此,我无法使用该框架在模拟器 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
从上面可以看出,该框架没有与模拟器架构匹配的头文件。
如何将模拟器头文件打包到框架中?
【问题讨论】:
XCode 构建您的框架取决于您选择的设备,您必须将模拟器和设备切片组合成一个胖框架才能使其适用于两者 【参考方案1】:标头是在构建过程中生成的。我假设您尝试使用使用 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 来为每种情况选择正确的。
【讨论】:
你能用旁白和截图解释一下步骤吗以上是关于Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a的主要内容,如果未能解决你的问题,请参考以下文章
Swift 5 (Xcode 11 Betas 5 & 6) - 如何写入 JSON 文件?
当我在 Xcode 11 中将 swift 4.2 转换为 swift 5 时继续加载