Cordova 无法从 CLI 构建,但从 XCode xcworkspace 构建可以完美运行

Posted

技术标签:

【中文标题】Cordova 无法从 CLI 构建,但从 XCode xcworkspace 构建可以完美运行【英文标题】:Cordova Can't build from CLI but build from XCode xcworkspace works perfectly 【发布时间】:2018-08-09 16:59:37 【问题描述】:

我最近将https://github.com/chemerisuk/cordova-plugin-firebase-messaging 添加到我的cordova 项目中,该项目依赖于

    <framework src="Firebase/Core" type="podspec" spec="~> 5.0"/>
    <framework src="Firebase/Messaging" type="podspec" spec="~> 5.2"/>

我最初是在 android 上测试代码和所有东西,它就像一个魅力。

然而,在我切换到在 ios 上测试我的更改时,我在运行 cordova run android 或任何其他构建命令时很快遇到了一些问题。它们往往会因暗示 CocoaPods 链接问题的错误而失败。如:

platforms/ios/Pods/FirebaseCore/Firebase/Core/FIRNetwork.m:23:9: 
    fatal error: 'GoogleToolboxForMac/GTMNSData+zlib.h' file not found
#import <GoogleToolboxForMac/GTMNSData+zlib.h>

我发现了各种 SO 帖子,其中提到修复搜索路径或修改 .m 文件以引用相对路径(这是一个糟糕的想法,而且工作量太大)。

但问题是,我知道这个项目是正确的。如果我打开我的 .xcworkspace 并从 XCode 运行它,它会完美运行!只有从命令行运行时才会出现问题。

Installed platforms:
android 7.1.0
ios 4.5.5

$ cordova -version
8.0.0

Xcode 9.4.1
Build version 9F2000

$ pod --version
1.5.3

我完全不知所措。任何帮助将不胜感激!

我的 Podfile 以防万一

# DO NOT MODIFY -- auto-generated by Apache Cordova
platform :ios, '8.0'
target 'VeociSTAGE' do
        project 'VeociSTAGE.xcodeproj'
        pod 'Firebase/Core', '~> 5.0'
        pod 'Firebase/Messaging', '~> 5.2'
        pod 'GoogleToolboxForMac', '~> 2.1.4'
end

编辑:

Podfile.lock

PODS:
  - Firebase/Core (5.2.0):
    - Firebase/CoreOnly
    - FirebaseAnalytics (= 5.0.1)
  - Firebase/CoreOnly (5.2.0):
    - FirebaseCore (= 5.0.3)
  - Firebase/Messaging (5.2.0):
    - Firebase/CoreOnly
    - FirebaseMessaging (= 3.0.2)
  - FirebaseAnalytics (5.0.1):
    - FirebaseCore (~> 5.0)
    - FirebaseInstanceID (~> 3.0)
    - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
    - nanopb (~> 0.3)
  - FirebaseCore (5.0.3):
    - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
  - FirebaseInstanceID (3.1.0):
    - FirebaseCore (~> 5.0)
  - FirebaseMessaging (3.0.2):
    - FirebaseCore (~> 5.0)
    - FirebaseInstanceID (~> 3.0)
    - GoogleToolboxForMac/Logger (~> 2.1)
    - Protobuf (~> 3.1)
  - GoogleToolboxForMac (2.1.4):
    - GoogleToolboxForMac/Core (= 2.1.4)
    - GoogleToolboxForMac/Defines (= 2.1.4)
    - GoogleToolboxForMac/GeometryUtils (= 2.1.4)
    - GoogleToolboxForMac/KVO (= 2.1.4)
    - GoogleToolboxForMac/Logger (= 2.1.4)
    - "GoogleToolboxForMac/NSData+zlib (= 2.1.4)"
    - "GoogleToolboxForMac/NSDictionary+URLArguments (= 2.1.4)"
    - "GoogleToolboxForMac/NSFileHandle+UniqueName (= 2.1.4)"
    - "GoogleToolboxForMac/NSScanner+JSON (= 2.1.4)"
    - "GoogleToolboxForMac/NSString+html (= 2.1.4)"
    - "GoogleToolboxForMac/NSString+URLArguments (= 2.1.4)"
    - "GoogleToolboxForMac/NSString+XML (= 2.1.4)"
    - "GoogleToolboxForMac/NSThread+Blocks (= 2.1.4)"
    - GoogleToolboxForMac/Regex (= 2.1.4)
    - GoogleToolboxForMac/StringEncoding (= 2.1.4)
    - GoogleToolboxForMac/SystemVersion (= 2.1.4)
    - GoogleToolboxForMac/URLBuilder (= 2.1.4)
  - GoogleToolboxForMac/Core (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/DebugUtils (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/Defines (2.1.4)
  - GoogleToolboxForMac/GeometryUtils (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/KVO (2.1.4):
    - GoogleToolboxForMac/Core (= 2.1.4)
    - GoogleToolboxForMac/DebugUtils (= 2.1.4)
  - GoogleToolboxForMac/Logger (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - "GoogleToolboxForMac/NSData+zlib (2.1.4)":
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - "GoogleToolboxForMac/NSDictionary+URLArguments (2.1.4)":
    - GoogleToolboxForMac/DebugUtils (= 2.1.4)
    - GoogleToolboxForMac/Defines (= 2.1.4)
    - "GoogleToolboxForMac/NSString+URLArguments (= 2.1.4)"
  - "GoogleToolboxForMac/NSFileHandle+UniqueName (2.1.4)":
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - "GoogleToolboxForMac/NSScanner+JSON (2.1.4)":
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - "GoogleToolboxForMac/NSString+HTML (2.1.4)":
    - GoogleToolboxForMac/Core (= 2.1.4)
  - "GoogleToolboxForMac/NSString+URLArguments (2.1.4)"
  - "GoogleToolboxForMac/NSString+XML (2.1.4)":
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - "GoogleToolboxForMac/NSThread+Blocks (2.1.4)":
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/Regex (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/StringEncoding (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/SystemVersion (2.1.4):
    - GoogleToolboxForMac/Defines (= 2.1.4)
  - GoogleToolboxForMac/URLBuilder (2.1.4):
    - GoogleToolboxForMac/Core (= 2.1.4)
    - GoogleToolboxForMac/Defines (= 2.1.4)
    - "GoogleToolboxForMac/NSDictionary+URLArguments (= 2.1.4)"
    - "GoogleToolboxForMac/NSString+URLArguments (= 2.1.4)"
  - nanopb (0.3.8):
    - nanopb/decode (= 0.3.8)
    - nanopb/encode (= 0.3.8)
  - nanopb/decode (0.3.8)
  - nanopb/encode (0.3.8)
  - Protobuf (3.6.0)

DEPENDENCIES:
  - Firebase/Core (~> 5.0)
  - Firebase/Messaging (~> 5.2)
  - GoogleToolboxForMac (~> 2.1.4)

SPEC REPOS:
  https://github.com/cocoapods/specs.git:
    - Firebase
    - FirebaseAnalytics
    - FirebaseCore
    - FirebaseInstanceID
    - FirebaseMessaging
    - GoogleToolboxForMac
    - nanopb
    - Protobuf

SPEC CHECKSUMS:
  Firebase: 25ed0412036d7d008568d1fb4d2e9d81ea8a0a2c
  FirebaseAnalytics: b3628aea54c50464c32c393fb2ea032566e7ecc2
  FirebaseCore: a3c87242451633fff8490183898075ce77d168d2
  FirebaseInstanceID: 05d779cbb97bd5bd5c51a38a903fc9cfe1b2454a
  FirebaseMessaging: 6894b8fe0a0cf26c3b13dad729f1131654ae0bdb
  GoogleToolboxForMac: 91c824d21e85b31c2aae9bb011c5027c9b4e738f
  nanopb: 5601e6bca2dbf1ed831b519092ec110f66982ca3
  Protobuf: 0fc0ad8bec688b2a3017a139953e01374fedbd5f

PODFILE CHECKSUM: 6a610b85e4adb104d20d7784dc2566b45be5418c

COCOAPODS: 1.5.3

编辑

这是我刚刚运行xcodebuild -workspace Project.xcworkspace -scheme Project 并成功构建的有趣的东西。我有一种感觉,cordova 的目标是 .xcodeproj 而不是 .xcworkspace。更多调查即将到来...

编辑 它不是针对 xcodeproj,而是针对 xcworkspace,但platforms/ios/cordova/lib/build.js 中指定的 .xcconfig 似乎存在问题

【问题讨论】:

Firebase 5.5.0 中的一些依赖项更改可能会导致 cordova 打包出现问题。您的 Podfile.lock 中有什么? @PaulBeusterien 刚刚添加了它......看起来很奇怪,好像有多个参考文献......虽然我对 Cocoapods 知之甚少......所以我不确定它是对还是错。跨度> 嗯,好像所有版本都在5.5.0之前,所以是别的。确保清除 DerivedData 和其他 Xcode 状态。 Framework not found GoogleToolboxForMac的可能重复 @MartinZeitler 我已经试过了......没有运气...... 【参考方案1】:

这是known issue。

问题似乎与使用-xcconfig 标志的cordova build 命令有关,并且该标志由于某种未知原因导致了问题。目前正在调查中。

【讨论】:

是的,这就是我发现的...我有一个 GitHub 问题打开,但从未找到您共享的链接/票证。【参考方案2】:

如果我是你,我会尝试以下方法 -

    您认为 Pod 是否按预期安装?我会根据平台创建一个带有pod install --project-directory=platforms/ios/pod install --project-directory=platforms/android/after_prepare 钩子。

    我观察到,尽管 pod 已安装且一切就绪,但 Xcode 还是失败了。所以,我会尝试一个干净的状态。

    删除节点模块 删除插件文件夹 删除平台文件夹:ios 和 android 安装节点模块/ bower 依赖项 重新添加平台文件夹。

【讨论】:

【参考方案3】:

我发现lib/build.js会在sense后面运行这个命令:

xcodebuild -workspace <app_name>.xcworkspace -scheme <app_name> -configuration Debug -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 12 Pro Max" build CONFIGURATION_BUILD_DIR=/path/to/project/platforms/ios/build/emulator SHARED_PRECOMPS_DIR=/path/to/project/platforms/ios/build/sharedpch

如果我删除粗体代码行 build CONFIGURATION_BUILD_DIR=/path/to/project/platforms/ios/build/emulator SHARED_PRECOMPS_DIR=/path/to/project/platforms/ios/build/sharedpch ,它构建成功。不知道为什么?

【讨论】:

以上是关于Cordova 无法从 CLI 构建,但从 XCode xcworkspace 构建可以完美运行的主要内容,如果未能解决你的问题,请参考以下文章

无法从cordova CLI 将android 平台添加到cordova 项目

无法使用 Ionic CLI 构建 Android Apk

cordova+vue-cli4构建app

如何使用移动优先 cli 和 cordova 在发布模式下构建 .apk

无法添加 vue-cli-plugin-cordova

MobileFirst Platform CLI 无法使用 JSON 存储构建 xcode 7.2 项目