添加第一方依赖项后 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
.
# 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 以常规方式构建。
在使用 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
.
# 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 以常规方式构建。