目标具有包含静态框架的传递依赖项:

时间:2019-05-27 16:14:22

标签: firebase flutter dart

我们构建了一个使用Firebase的flutter模块。在模拟器中工作正常

现在,我们正在尝试将此flutter模块集成到也使用firebase的现有本机iOS应用中。我们在安装pod时遇到了问题

 The 'Pods-App' target has transitive dependencies that include static frameworks: (cloud_firestore, firebase_core, FirebaseDatabase, FirebaseAuth, FirebaseFirestore, FirebaseCore, FirebaseInstanceID, FirebaseFunctions, FirebaseMessaging, and FirebaseStorage)

我们在本地应用程序podfile中添加了此行以进行集成     flutter_application_path ='/用户/用户名/文档/ MyApp-Flutter'   eval(File.read(File.join(flutter_application_path,'.ios','Flutter','podhelper.rb')),绑定)

我们按照以下步骤集成了项目 https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

我们在podfile中添加了此标签,已解决了pod安装问题。但是ios的构建由于flutterpluginrestraint而失败

pre_install做|安装程序|   #https://github.com/CocoaPods/CocoaPods/issues/3289的#解决方法     Pod :: Installer :: Xcode :: TargetValidator.send(:define_method,:verify_no_static_framework_transitive_dependencies){}   结束

即使包括flutter项目,预期吊舱安装也必须成功。我不明白如何解决这些依赖性,特别是在flutter和本机应用程序都使用相同模块的情况下。

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,现在刚刚设法在我的环境中成功构建。您可能现在已经解决了这个问题,但有问题的我将留给其他任何人使用。

类似于您,当包含具有静态框架的依赖项时,我从主机应用程序中的pod install中得到了此错误:

The 'Pods-App' target has transitive dependencies that include static frameworks: (flutter_crashlytics)

我本来是想用您在帖子中提到的解决方法来解决此问题。但是,这导致了以下原因:https://i.stack.imgur.com/c4Zik.png

在尝试了互联网上的所有解决方案之后,我通过以下步骤找到了成功

  1. 删除/注释Podfile中的传递依赖项变通方法
  2. 删除/评论use_frameworks!为Podfile中的目标
  3. 这时,我的其中一项活动来自相应的import语句,出现错误“没有此类模块'FlutterPluginRegistrant'”。如有错误,请删除这些导入,并保留所有依赖于此的代码。
  4. 添加一个Objective-C桥接头,并为Flutter.h和GeneratedPluginRegistrant.h添加导入。添加后者应更正来自最后一步的所有错误。
  5. 运行pod install
  6. 构建成功

一些其他观察结果:

  • 对我来说,此问题仅在基于Swift的主机应用程序中出现。我无法将Add2App与基于Objective-C的项目一起使用。
  • 在FlutterPluginRegistrant.podspec中添加s.static_framework = true可以使应用程序编译而不会出现任何错误,但这是生成的文件,而不是永久性的解决方案。据我所知,这是有效的,因为只有静态框架才能链接静态框架依赖项。
  • 我还事先升级到了CocoaPods 1.7.5,但不确定是否对解决问题有影响。升级之前,我使用的是1.6.2。
  • Flutter频道/版本:dev v1.8.1

Bridging-Header.h:

#import <CommonCrypto/CommonCrypto.h>
#import <KochavaTracker.h>
#import <Flutter/Flutter.h>
#import <FlutterPluginRegistrant/GeneratedPluginRegistrant.h>

Podfile:

# Uncomment the next line to define a global platform for your project
platform :ios, '10.0'

flutter_application_path = '../ios/flutter_module/'

def shared_pods
    pod 'BiometricAuthentication'
    pod 'SwiftKeychainWrapper'
    pod 'AppDynamicsAgent'
    pod 'ReachabilitySwift'
    pod 'KochavaTrackeriOS'
end

target 'Target1' do
    eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)
    inherit! :search_paths
    shared_pods
end

希望这对您和其他处于相同情况的人有所帮助。我对CocoaPods和iOS开发的经验不是很丰富,所以我会把更多的猜测留给可以理解根本原因的人。