为颤振添加 image_picker 依赖项时出错(iOS)

Posted

技术标签:

【中文标题】为颤振添加 image_picker 依赖项时出错(iOS)【英文标题】:Errors when added image_picker dependency for flutter (iOS) 【发布时间】:2020-05-03 08:01:06 【问题描述】:

我需要为我的应用程序使用 image_picker。我在 pubspec.yaml 文件中添加了 image_picker 依赖项,对于 ios,我添加了 NSCameraUsageDescription NSPhotoLibraryUsageDescription NSMicrophoneUsageDescription 到 info.plist 文件中,但尝试在 iOS 模拟器上运行应用程序时出现此错误。

这是我在尝试运行应用程序时遇到的错误。 `在调试模式下在 iPhone 11 Pro Max 上启动 lib/main.dart... /Users/sirapol/Desktop/FirstCareFrontEnd/care_now_frontend_v1/ios/Runner/Info.plist:属性列表错误:在里面找到非键 在第 27 行/JSON 错误:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。 运行 Xcode 构建...

Xcode 构建完成。 2.4s 无法构建 iOS 应用 Xcode 构建的错误输出: ↳ ** 构建失败 **

Xcode 的输出: ↳ /Users/sirapol/Desktop/FirstCareFrontEnd/care_now_frontend_v1/build/ios/Debug-iphonesimulator/flutter_plugin_android_lifecycl e/flutter_plugin_android_lifecycle.framework:不允许资源分叉、Finder 信息或类似的碎屑 命令 CodeSign 失败,退出代码为非零 注意:使用新的构建系统 注:规划建设 注意:构建构建描述 警告:将架构 armv7 映射到 i386。确保此目标的 Architectures 和 Valid Architectures 构建设置 为 iOS 模拟器平台正确配置。 (在项目“Pods”的目标“image_picker”中) 警告:将架构 arm64 映射到 x86_64。确保此目标的 Architectures 和 Valid Architectures 构建设置 为 iOS 模拟器平台正确配置。 (在项目“Pods”的目标“image_picker”中) 警告:签名和功能的功能可能无法正常运行,因为其权利使用占位符团队 ID。要解决此问题,请在 Runner 编辑器中选择一个开发团队。 (在项目“Runner”的目标“Runner”中)`

这是我的 pubspec.yaml 文件的一部分

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2
  provider: ^3.0.0
  http: ^0.12.0+4
  image_picker: ^0.6.3+1
  path_provider: ^1.1.0


dev_dependencies:
  flutter_test:
    sdk: flutter



这是我的 info.plist 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>care_now_frontend_v1</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>$(FLUTTER_BUILD_NAME)</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>$(FLUTTER_BUILD_NUMBER)</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
  <key>NSLocationWhenInUseUsageDescription</key>
    <key>NSCameraUsageDescription</key>
    <key>NSPhotoLibraryUsageDescription</key>
    <key>NSMicrophoneUsageDescription</key>
  <false/>
</dict>
</plist>

我不知道为什么会发生错误。因为我已经这样做了一次并且没有错误。谢谢你的帮助

【问题讨论】:

您是否尝试过使用最新版本的图像选择器? : image_picker: ^0.6.1+4 你需要在&lt;key&gt;后面加上&lt;string&gt; 是的,我已经尝试了新版本的 image_picker,仍然得到同样的错误 问题似乎来自info.plist,我尝试在之后添加并没有解决问题 【参考方案1】:

您需要确保在 plist 文件中的键值之后添加了一个值。在这些键下添加字符串值,它应该可以解决问题。

例子:

<key>NSLocationWhenInUseUsageDescription</key>
<string>Allow access to your phone's location</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Allow access your photo library</string>
<key>NSCameraUsageDescription</key>
<string>Allow access your phone's camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>Allow the app to record using your phone's microphone</string>

至于架构映射错误,请尝试在 xcode 项目中将您的 iOS 部署目标设置为 9.0 或更高版本。

另外,我注意到您的代码示例中有一个尾随值,看起来应该移到下面

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

【讨论】:

【参考方案2】:

如果其他人遇到此问题,如果您在文件末尾添加密钥,它将失败并发送 Xcode 无法读取 Info.plist 文件错误,请在 Xcode 版本 12 上进行测试。

例如,这个文件可以正常工作:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> 
<dict>  
<key>CFBundleDevelopmentRegion</key>    
<string>$(DEVELOPMENT_LANGUAGE)</string>    
<key>CFBundleExecutable</key>   
<string>$(EXECUTABLE_NAME)</string>     
<key>CFBundleIdentifier</key>   
....
    <key>NSPhotoLibraryUsageDescription</key>   
    <string>Share pictures</string>     
    <key>NSCameraUsageDescription</key>     
    <string>Share pictures</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/> 
</dict> 
</plist>

但是,如果您像这样将键移到末尾,它将失败:

....
    <key>UIViewControllerBasedStatusBarAppearance</key>
        <key>NSPhotoLibraryUsageDescription</key>   
        <string>Share pictures</string>     
        <key>NSCameraUsageDescription</key>     
        <string>Share pictures</string>
    <false/> 
    </dict> 
    </plist>

【讨论】:

以上是关于为颤振添加 image_picker 依赖项时出错(iOS)的主要内容,如果未能解决你的问题,请参考以下文章

在颤振应用程序中添加 image_picker 插件后,Gradle Build 失败

添加spring boot jpa依赖项时创建名称为“entityManagerFactory”的bean时出错

在 gradle 项目中添加 graphql 依赖项时出错

运行 image_picker 时我的新 android 应用程序崩溃(基于颤振飞镖)

为 amazon-kinesis-video-streams-producer-sdk-cpp 构建依赖项时出错 [重复]

在颤振插件 image_picker 示例中从图库中选择图像时内存增加