添加第一方依赖项后,Flutter Xcode构建失败

时间:2018-03-08 00:41:42

标签: flutter flutter-dependencies

在使用带有Flutter SDK的Android Studio构建应用程序时,我决定使用shared_preferences插件并使用它。不久之后,我注意到尽管我的Android设备上的应用程序运行良好,但它不能在Simulator上运行。为了找出解决方案,我尝试直接从Xcode运行它,但同样,它也失败了。

发生错误之后,我打开了GeneratedPluginRegistrant.m文件,编辑只是说"找不到shared_preferences / SharedPreferencesPlugin.h文件"

在终端中运行flutter doctor并未提供任何有用的信息,并且pod install无法提供帮助。

我也试过添加FlutterFire插件,它们都会产生相同的结果。

感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

我认为这是一个已知问题https://github.com/flutter/flutter/issues/15099#issuecomment-372375566

  

要将#15437中的修补程序应用于修复程序到达之前创建的基于Swift的Flutter项目,请将[这些行]添加到ios/Podfile

我认为这意味着https://github.com/mravn-google/flutter/blob/e0c73220a6f69d341ce436244212277d83bc189b/packages/flutter_tools/templates/cocoapods/Podfile-swift#L70-L73

 # workaround for https://github.com/CocoaPods/CocoaPods/issues/7463
 target.headers_build_phase.files.each do |file|
   file.settings = { 'ATTRIBUTES' => ['Public'] }
 end

答案 1 :(得分:1)

我在iOS的Flutter应用程序中也遇到了很多问题,并且几乎完成了此处和github中解释的所有操作。

我的解决方案是(1)在“ flutter升级”后调用“ flutter run”(也必须运行模拟器或连接设备才能正确执行此命令),以及(2)在通过命令成功构建应用程序之后上面提到的代码行,关闭它并通过Product-> Build使用Xcode进行常规构建。

答案 2 :(得分:0)

Shared Preference的概念是特定于Android的,在iOS中不可用。如果您想保存某些内容,建议您使用Method Channel(Platform Channel)中的Flutter将其发送到原生图层并保存。

对于iOS,请使用userDefaults来保存数据。

其他信息:

如何使用共享首选项保存数据?

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.commit(); // Don't forget to commit when your changes are done.

要检索数据

// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

如何使用userDefaults保存数据?

NSString *valueToSave = @"someValue";
[[NSUserDefaults standardUserDefaults] setObject:valueToSave 
forKey:@"preferenceName"];
[[NSUserDefaults standardUserDefaults] synchronize];

检索已保存的数据

NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"preferenceName"];

更新:

有一个颤动plugin为我们做这件事。

将此添加到 pubspec.yaml文件

dependencies:
shared_preferences: "^0.4.0"

在项目根目录中的命令行中运行。

$ flutter packages get

现在您可以使用Dart代码,

import 'package:shared_preferences/shared_preferences.dart';