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

Flutter Xcode build failure after adding 1st-party dependency

在使用 Android Studio 和 Flutter SDK 构建应用程序时,我决定获取 shared_preferences 插件并试用它。不久之后,我注意到尽管该应用程序在我的 Android 设备上 运行 运行良好,但它无法在模拟器上构建到 运行。为了找出解决方案,我尝试直接从 Xcode 中 运行ning 它,但同样,它也失败了。

根据错误,我打开了 GeneratedPluginRegistrant.m 文件,其中编辑器只是说 "shared_preferences/SharedPreferencesPlugin.h file not found"

终端中的

运行 flutter doctor 没有提供任何有用的信息并且 运行ning pod install 没有帮助。

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

感谢任何帮助!

概念Shared Preference is android specific and not available in iOS. If you want to save something, I recommend you use Method Channel(Platform Channel) in Flutter发送到native层保存​​

对于 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"];

更新:

有一个 flutter plugin 可以帮我们做到这一点。

将此添加到您的 pubspec.yaml 文件

dependencies:
shared_preferences: "^0.4.0"

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

$ flutter packages get

现在您可以在 Dart 代码中使用,

import 'package:shared_preferences/shared_preferences.dart';

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

To apply the fix in #15437 to a Swift-based Flutter project created before the fix landed, add [these lines] to 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

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

我的解决方案是 (1) 在 "flutter upgrade" 调用 "flutter run" 之后(您还必须 运行 模拟器或附加设备才能正确执行此命令)和 (2) 在之后如上所述,通过命令行成功构建应用程序,关闭它并通过 Product -> Build.

使用 Xcode 以常规方式构建。