使用CocoaPods时,Xcode 12部署目标警告

46

我在Xcode 12上收到了这个警告:

iOS模拟器的部署目标IPHONEOS_DEPLOYMENT_TARGET设置为8.0,但支持的部署目标版本范围是9.0至14.0.99

如何支持这个版本?


2
如果这是为了分发应用程序,您应该考虑到根据各种统计网站的数据,iOS 8 几乎没有用户。 - Phillip Mills
强调@PhillipMills的观点,iOS 8支持的所有设备也都支持iOS 9。人们很少会有iOS设备不安装操作系统更新但仍积极下载或更新应用程序的情况。 - Tommy
7个回答

62
这里有一个简短的工作解决方案!只需将代码片段复制并粘贴到您的Podfile末尾,然后运行pod install命令即可。
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 12.0
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
      end
    end
  end
end

在这种情况下,12.0是提交到AppStore所需的最低支持iOS版本。您可以根据您的项目要求进行更改。

这解决了那个问题,但如果你使用某些库,它会导致另一个错误。在使用当前路径提供程序时,Flutter/致命错误:找不到“Flutter/Flutter.h”文件。 - Nicholas Muir
@NicholasMuir 这是更新后的代码,也解决了Flutter.h文件的第二个错误。 https://dev59.com/fVIG5IYBdhLWcg3wwkSM#70316588 - bm888

19

这是一个与你的CocoaPods目标相关的问题。 对我来说,答案是将此代码放在您的Pod文件末尾:

这是一个与您的 CocoaPods 目标相关的问题。 对我来说,解决方案是将此代码放到您的 Pod 文件末尾:

 post_install do |installer|
     installer.pods_project.targets.each do |target|
         target.build_configurations.each do |config|
             config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf'
             config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
             config.build_settings['ONLY_ACTIVE_ARCH'] = 'YES'
         end
     end
  end

它解决了我所有的问题,编译和归档项目。

另外一种方法就是像这张图片中描述的那样,只需更改pods项目中的IPHONEOS_DEPLOYMENT_TARGET

enter image description here 最好的问候。


8
我认为只需要这一行代码:config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' - SoftDesigner
1
谢谢 @SoftDesigner,我会尝试不使用它。 - Andres Paladines
我不建议手动更改设置,因为Pods项目是自动生成的,无论您在那里设置什么都会在下次调用pod installpod update时被覆盖。 - Michal Šrůtek
以下是2021年末的更新答案: https://dev59.com/fVIG5IYBdhLWcg3wwkSM#70316588 - bm888

9

从2021年末开始,Flutter需要额外添加一行代码才能正常工作。

将下面的更新后的代码片段粘贴到Podfile文件末尾,并运行"pod install"命令。

  post_install do |installer|
     installer.pods_project.targets.each do |target|
         flutter_additional_ios_build_settings(target)
         target.build_configurations.each do |config|
            if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 10.0
              config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0'
            end
         end
     end
  end

注意: 如果你的podfile中有以下代码,则将其替换为上述代码。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end

9
更新:要解决这个问题,你只需要将部署目标更新到9.0版本。可以通过打开.xcworkspace文件,在Xcode中选择Pods.xcodeproj并将更新到9.0或更高版本,如下图所示。

Pod project deployment target

另一个简单的解决方法是在你的Podfile中添加以下内容,并在终端中运行pod install命令。
post_install do |installer|
 installer.pods_project.targets.each do |target|
   target.build_configurations.each do |config|
     if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 9.0
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
     end
   end
 end
end

之前:如果您不导入支持文件,您不能在 Xcode 12 上为 iOS 8.0 提供支持。如果想要默认提供支持,则需要使用 Xcode 11。最好检查使用您的应用程序的 iOS 8 用户数量,并将最低支持版本更新至 iOS 9 或更高版本。


我正在针对iOS 12进行开发,我的podfile中也是这样设置的,但我仍然收到这些警告。这也被废弃了吗? - Sri Harsha Chilakapati
检查是否低于9.0正是我想要的 - 这为我节省了大量时间!谢谢 - Sandy Garrido
如何在EXPO上实现这个? - nishi

3
这是因为 Xcode 12中已不再支持iOS 8,但被指定库的最低部署目标仍为iOS 8。这在Xcode 12发行说明中有所记录:

Deprecations

  • Xcode现在支持调试运行在iOS 9.0及以上系统版本的设备上的应用程序和测试。
解决方法: 目前可以将以下内容附加到您的Podfile作为解决方法(然后像往常一样运行pod install):
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 9.0
        config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      end
    end
  end
end

这将从所有使用iOS 8或更低版本的Pod中删除部署目标设置,使它们可以简单地继承您在Podfile顶部指定的项目部署目标。例如:
platform :ios, '10.0'

0

我也需要添加

s.platform = :ios, "9.0"

为了使其正常工作,需要将.podspec文件中的post_install脚本添加到上述(或下面)任何答案中。

注意:s.platform是

s.platform = :ios

-2

我正在使用Flutter,所以我的步骤如下:

  1. 删除 Podfile.lock 文件
  2. 更改为 platform :ios, '10.0'
  3. 删除 ios 文件夹中的 Pods 文件夹
  4. 进入终端并运行 Pod install 命令

如果您有新的问题,请通过单击提问按钮来提出。如果它有助于提供上下文,请包含此问题的链接。- 来自审核 - JDOaktown
如果你正在使用Flutter,你不需要手动执行Pod install,它会在构建和运行项目时自动完成,至少在Android Studio中是这样的,不确定VS Code是否也是如此 :) - Martin Berger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接