Ionic/Cordova iOS应用程序构建错误,带有扩展的应用程序-**归档失败**

3

我在使用Cordova/Ionic CLI运行和构建iOS应用程序时遇到了问题,这些问题与App扩展有关。为了使我的应用程序正常工作,我不得不添加一些App扩展(CallKit Directory和Intents),我使用XCode添加了一个新目标并编写了一些Swift代码。当我从Xcode进行构建时,似乎一切都正常,但是Cordova CLI似乎无法区分主应用程序和App扩展。

/<Path_To_The_App>/Bridging-Header.h:28:9: note: in file included from /<Path_To_The_App>/Bridging-Header.h:28:
#import "CallKit-Bridging-Header.h"
        ^
/<Path_To_The_App>/Plugins/my.custom.callkit_plugin_written_in_swift/CallKit-Bridging-Header.h:1:9: error: 'Cordova/CDV.h' file not found
#import <Cordova/CDV.h>
        ^
<unknown>:0: error: failed to import bridging header '/<Path_To_The_App>/Bridging-Header.h'


** ARCHIVE FAILED **

The following build commands failed:
        CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
        CompileSwift normal arm64 /My Call Directory Extension/CallDirectoryHandler.swift
        CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
        CompileSwift normal arm64 /My Intent Extension/IntentHandler.swift
(4 failures)

看起来脚本在构建扩展时试图使用主应用程序的桥接头文件,而显然是用Swift编写的。在Xcode中,我为这两个目标设置了“不安装Objective-C兼容头文件”,但Cordova CLI并不关心。可能,使用Objective-C重新编写扩展可以解决问题,但是我没有更多时间尝试我不擅长的语言。
以前我遇到了与扩展相关的其他构建问题,通过向Cordova lib文件添加一些“ifs”进行了修复,但是黑客永远不是一个好的解决方案。谷歌这个话题没有结果,似乎没有人尝试将App Extension添加到Cordova应用程序中。
现在可以通过以下两个步骤进行构建: 1)将文件从/ www移动到/平台/ ios / www 2)手动运行Xcode。 那很烦人。
有人知道一种不必黑客Cordova脚本就能避免这种情况的好方法吗?
谢谢。
2个回答

0

我花了一些时间学习运行命令输出,并发现构建过程是通过Xcode命令行工具启动的:

xcodebuild -xcconfig <Path To My app>/platforms/ios/cordova/build-debug.xcconfig -workspace "<My App Name>.xcworkspace" -scheme "<My App Name>" -configuration "Debug" -destination generic/platform=iOS -archivePath "<My App Name>.xcarchive" archive CONFIGURATION_BUILD_DIR=<Path To My app>/platforms/ios/build/device SHARED_PRECOMPS_DIR=<Path To My app>/platforms/ios/build/sharedpch

该命令的文档说明如下:

-xcconfig 文件名

在构建所有目标时加载 filename 中定义的构建设置。这些设置将覆盖所有其他设置,包括在命令行上单独传递的设置。

build-debug.xcconfig 导入了 build.xcconfig,其中某些原因导致 "SWIFT_OBJC_BRIDGING_HEADER = $(PROJECT_DIR)/$(PROJECT_NAME)/Bridging-Header.h"。因此,它似乎覆盖了所有目标的桥接头文件,尽管对于 .xcodeproj 设置并非如此。

在 platforms/ios/cordova/build.xcconfig 中注释掉此行后,构建过程将按预期运行。


0

事实证明,在我的情况下,Cordova构建命令使用了错误的Xcode版本。

我正在使用Swift 3,并在计算机上安装了两个Xcode:Xcode 7.3.1和Xcode 8.3.3。我可以使用Xcode 8.3.3应用程序构建我的cordova应用程序,没有任何问题,但是当执行cordova build ios命令时,我遇到了与您相同的错误。以下是我所做的步骤:

  1. $ xcodebuild -version。此步骤会向您提供构建时Cordova使用的Xcode版本。在我的情况下,它返回了Xcode 7.3.1

  2. $ sudo xcode-select -switch [PathToYourXcodeFolder]。切换到您想要使用的Xcode版本。

您可能需要检查当前的Xcode路径:$ xcode-select -print-path

切换到Xcode 8.3.3后,我可以无错误地运行cordova build ios。希望这能帮助那些与我有相同问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接