Ionic iOS构建失败,错误信息为“未找到档案”。

51

我有一个Ionic项目。通过ionic serve运行可以得到我期望的结果,没有问题。

然而,当运行像ionic cordova run ios -lc这样的命令时,我会收到一个错误,导致构建过程中断。我收到的错误如下:

[cordova]  error: archive not found at path '/Users/path-to-app/platforms/ios/demoapp.xcarchive
[cordova]  ** EXPORT FAILED **
[cordova]
[cordova]  (node:5866) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error code 65 for command: xcodebuild with args: -exportArchive,-archivePath,demoapp.xcarchive,-exportOptionsPlist,/Users/path-to-app/platforms/ios/exportOptions.plist,-exportPath,/Users/path-to-app/platforms/ios/build/device
[cordova]  (node:5866) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.`

我看到这里有两个不同的错误:存档未找到和一个弃用问题。

我不知道哪个是破坏构建的原因,但似乎我都找不到解决方案。

Ionic 信息:

Ionic:

   ionic (Ionic CLI)  : 4.1.2
   Ionic Framework    : ionic-angular 3.9.2
   @ionic/app-scripts : 3.2.0

Cordova:

   cordova (Cordova CLI) : 8.0.0
   Cordova Platforms     : android 7.0.0, browser 5.0.4, ios 4.5.5
   Cordova Plugins       : no whitelisted plugins (0 plugins total)

System:

   Android SDK Tools : 25.1.7 (/Users/Vincent/Library/Android/sdk)
   ios-deploy        : 1.9.2
   NodeJS            : v9.1.0 (/usr/local/bin/node)
   npm               : 6.4.1
   OS                : macOS High Sierra
   Xcode             : Xcode 10.0 Build version 10A255
7个回答

102

目前cordova-ios不兼容Xcode 10

您可以尝试禁用Xcode 10使用的新构建系统,并通过将此内容添加到您的build.json文件中来使用旧构建系统。

"buildFlag": [
  "-UseModernBuildSystem=0"
]

或者在构建命令中添加 --buildFlag="-UseModernBuildSystem=0"

完整命令应为cordova build ios --buildFlag="-UseModernBuildSystem=0"

或对于Ionic,使用ionic cordova build ios -- --buildFlag="-UseModernBuildSystem=0"


3
我没有build.json文件,它在哪里? - Lenny D
在开发过程中不需要 build.json 文件,因此您可以使用 --buildFlag 参数代替。build.json 文件用于配置应用程序的构建配置,特别是发布模式。请参阅 https://cordova.apache.org/docs/en/8.x/guide/platforms/ios/index.html#using-buildjson 上的文档。您只需在项目根目录下创建它即可。 - jcesarmobile
1
奇怪,它对我不起作用。我尝试了ionic cordova build ios --buildFlag="- UseModernBuildSystem=0",但是仍然出现相同的错误。这个命令在ionic命令中能用吗? - Lenny D
先生,对我来说它不起作用,出现了错误:Error: Error code 65 for command: xcodebuild with args: -xcconfig,/ in CLI? - Kapil Soni
@jcesarmobile:好的先生,但您是否有任何想法如何修复上述错误?我已经卡在这个问题上两天了。另外一个错误是“代码签名错误:在SDK 'iOS 12.1'中,产品类型'应用程序'需要代码签名”? - Kapil Soni
显示剩余2条评论

31

除了由jcesarmobile提供的答案之外,另一个解决方案是通过执行以下命令使用Ionic CLI构建应用程序:

ionic cordova build ios -- --buildFlag="-UseModernBuildSystem=0"
根据ionic build 命令的说明文档,为了向 Cordova CLI 传递额外选项,您应该在 Ionic CLI 参数后使用 -- 分隔符。通过 Ionic CLI 执行 build 命令而不是 Cordova CLI 还将构建 Web 资源并在 Cordova 仅构建应用程序之前提供友好检查。

20

一个可用的 build.json 文件示例(放置在 Cordova / Ionic 项目根目录中)如下所示:

 {
  "ios": {
    "debug": {
      "buildFlag": [
        "-UseModernBuildSystem=0"
      ]
    },
    "release": {
      "buildFlag": [
        "-UseModernBuildSystem=0"
      ]
    }
  }
}

有关文件build.json的更多参数,请参阅Cordova文档:iOS平台指南


1
jcesarmobile 提供的命令对我无效,但执行以下命令成功完成构建:cordova build ios --buildFlag="-UseModernBuildSystem=0"(没有使用ionic)。之后,我能够顺利执行ionic cordova build ios(即使没有buildFlag参数)。我不是专家,事实上,没有包含ionic是一个错误。因此,虽然一切似乎正常,但我不确定只使用cordova进行首次构建是否存在任何缺点。也许有人可以在评论中提供一些帮助。

1

一些陷阱:准备Xcode文件。

现在是时候准备项目以在Xcode中打开了。 然而,Ionic-Cordova不支持Xcode的构建系统。因此,该项目必须为旧版构建系统做好准备。陷阱#2。

重要!请断开连接Mac上连接的iPhone或iPad设备,否则以下命令将无法工作!!!陷阱#3。

ionic cordova build ios --prod --buildFlag='-UseModernBuildSystem=0'

恭喜您!您的 MyApp.xcodeproj(等等)文件已准备就绪。您距离上传IPA文件还差一半路程。 只需双击MyApp.xcodeproj文件或通过Xcode打开即可。

Picture showing Xcode

你会发现还有几个其他的陷阱:

  • 常见的陷阱#4是没有正确设置权限。特别是角色“开发人员”(陷阱#4.1)没有权限将应用程序推送到商店
  • 请务必仔细检查“Bundle Identifier”是否与config.xml文件中设置的完全一致!
  • Xcode暴露了一个签名错误,陷阱#5,因此取消选中“自动管理签名”,然后再次选中。您肯定会遇到此错误。

Xcode的错误和Cordova不正确地支持新的构建系统导致出现所有这些问题。我制作了一个完整指南,展示如何在潜伏数小时后修复它们。


1
在我的情况下,我需要在 XCODE 10.2.1 中指定 Swift 编译器版本和工作区设置。 注意: 我的项目中安装了 Onesignal 插件。
首先,我指定了 Swift 编译器版本。
  1. 打开 myproject-name.workspace 文件,因为已安装 cocoapods。
  2. 在 Xcode 的 Build Settings 选项卡中找到 Swift Compiler - Language,并滚动到构建设置选项卡的底部。
  3. Swift Language Version 下拉菜单中选择 Swift 版本(例如:Swift 4)。
然后更改工作区设置。
  1. 进入 Xcode 的 File 菜单。
  2. 选择 Workspace Settings
  3. 从 Build System 下拉菜单中选择 Legacy Build System
  4. 点击 Done。
最后,在终端中尝试使用以下命令重新构建。
ionic cordova build ios

0

尝试下面的命令:

ionic cordova build ios -- --buildFlag="-UseModernBuildSystem=0"

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