Xcode 升级到10.x 之后 ionic cordova build ios 失败的解决
问题描述
Xcode 升级到10.0 或10.1 之后再次通过命令行cordova build ios 失败,没有错误提示,运行到‘SWIFT_OBJC_BRIDGING_HEADER’后直接退出build命令。
错误提示
Build settings from configuration file '/***/****/*****/platforms/ios/cordova/build-debug.xcconfig':
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES
CODE_SIGN_ENTITLEMENTS = $(PROJECT_DIR)/$(PROJECT_NAME)/Entitlements-$(CONFIGURATION).plist
CODE_SIGN_IDENTITY = iPhone Developer
ENABLE_BITCODE = NO
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1
HEADER_SEARCH_PATHS = "$(TARGET_BUILD_DIR)/usr/local/lib/include" "$(OBJROOT)/UninstalledProducts/include" "$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include" "$(BUILT_PRODUCTS_DIR)"
OTHER_LDFLAGS = -ObjC
SWIFT_OBJC_BRIDGING_HEADER = $(PROJECT_DIR)/$(PROJECT_NAME)/Bridging-Header.h
问题截图
原因
Xcode 10默认使用新的构建系统(以前在Xcode 9中选择加入)。cordova-ios项目结构与这个新的构建系统不兼容并导致失败。
Cordva官方并不声称支持Xcode 10。
目前最好的解决方法是选择退出新的构建系统:
- 命令行构建项目的方式:指定 --buildFlag="-UseModernBuildSystem=0":
ionic cordova run ios -- --buildFlag="-UseModernBuildSystem=0"
ionic cordova build ios -- --buildFlag="-UseModernBuildSystem=0"
- 如果使用build.json配置文件构建:
"ios": {
"release": {
"buildFlag": [
"-UseModernBuildSystem=0"
]
}
}
- 如果要在Xcode中打开项目,则需要将Workspace Settings中的构建系统更改为“Legacy Build System”:
(解决办法来自github)[https://github.com/apache/cordova-ios/issues/407]