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 项目