- 您的carthage依赖项是否已检入?是的
- carthage安装方法:[].pkg, [x] homebrew, [] source
which carthage
:/usr/local/bin/carthagecarthage version
: 0.38.0xcodebuild -version
: Xcode 12.5,构建版本12E262- 您是否使用
--no-build
?没有 - 您是否使用
--no-use-binaries
?是的 - 您是否使用
--use-submodules
?没有 - 您是否使用
--cache-builds
?没有 - 您是否使用
--new-resolver
?是的 - 您是否使用
--use-xcframeworks
?是的
Cartfile
binary "https://raw.githubusercontent.com/Snapchat/snap-kit-carthage/repo/SCSDKCreativeKit.json" == 1.6.5
binary "https://raw.githubusercontent.com/Appboy/appboy-ios-sdk/master/appboy_ios_sdk.json" == 4.3.2
github "SDWebImage/SDWebImage" "5.8.2"
github "https://github.com/SourcePointUSA/ios-cmp-app.git" "5.2.3"
github "facebook/facebook-ios-sdk" "v9.2.0"
github "google/promises" "1.2.12"
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseABTestingBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseRemoteConfigBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebasePerformanceBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseDynamicLinksBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashlyticsBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseGoogleSignInBinary.json" == 7.4.0
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseProtobufBinary.json" == 7.4.0
迦太基输出
Builds fine
实际结果控制台的po
不工作。错误提示:
error: virtual filesystem overlay file '/Users/<username>/Library/Caches/org.carthage.CarthageKit/DerivedData/12.5.1_12E507/facebook-ios-sdk/v9.2.0/Build/Intermediates.noindex/FBSDKCoreKit.build/Release-iphonesimulator/FBSDKCoreKit-Dynamic.build/all-product-headers.yaml' not found
error: couldn't IRGen expression. Please check the above error messages for possible root causes.
预期结果po
应该可以工作。
我遇到过过去的问题,看起来和我的相似,但他们似乎是很久以前的事了。根据我的理解,这可能是由于我们将Carthage依赖签入了repo。从上面的错误日志中可以看出,Carthage二进制文件包含到运行carthage bootstrap / update
的最后一台开发人员机器的绝对路径。从阅读几篇文章,比如这篇文章来看,检入依赖项似乎不是一个好主意,因为我们通过了--no-use-binaries
。有人能证实这是不好的做法吗?关于是否检查依赖项,我看到了不同的建议。
由于不检入依赖项意味着在CI上缓存它们,如果有合适的变通方法,这将是一个相当破坏性的更改,我希望避免。我试过git忽略(和git rm
ing).bcsymbolmap
和.dSYM
文件的依赖,因为搜索显示这是绝对路径可以找到的地方,但这并不能解决这个问题。
唯一可行的方法是使用carthage在本地重新构建依赖项。
ps:这个问题最初是迦太基仓库的一个问题,但看起来更像是一个SO问题
我多次遇到同样的错误。很长一段时间,我也没有找到解决办法。但是经过一些新的搜索,我用下一个命令解决了这个问题:
carthage update --platform iOS --no-use-binaries
它适用于我在每一个项目中使用迦太基。要了解更多细节,您可以查看这个问题