构建消息错误时的 ARC 弱引用

Posted

技术标签:

【中文标题】构建消息错误时的 ARC 弱引用【英文标题】:ARC Weak References when building message error 【发布时间】:2020-03-18 15:04:34 【问题描述】:

当我在 ios 中使用 Capacitor 构建 Ionic 应用程序时,我收到此错误:

ARC 弱引用 - 无法使用手动引用计数在文件中创建弱引用

Xcode message erro ARC Weak References

错误似乎来自 Cordova 插件,但我使用的是电容器。 我尝试重新安装环境和项目几次,但一周后仍然被阻止。 非常感谢

【问题讨论】:

【参考方案1】:

我遇到了完全相同的错误,我这样修复了它:

    在您的项目导航器 (Xcode) 中,单击 Pods 在第二个选项卡中,单击 Targets -> CordovaPlugins 执行与主项目(应用程序)相同的操作,将“手动保留发布中的弱引用”更改为是。 构建

这取决于您的构建结果,但在那之后,我不得不在 CordavaPlugins 文件中替换值的类型。它是“__weak ....”,我用“__strong ....”替换。

【讨论】:

【参考方案2】:

第一次,我从这里走:https://***.com/a/62679942/1979190

但是这种方式会导致很多问题,如EXC_BAD_ACCESS,因为一些 Cordova 插件不支持这种方式。

我的队友找到了解决此问题的方法。 根本原因来自电容器,我不知道他们为什么将Compiler flags 设置为-fno-objc-arc 用于来自CordovaPlugins 的所有文件。

我们只需要将Compiler flags 恢复为empty,如下图所示,以避免所有与ARC Weak References 相关的错误消息。

但每次运行npx cap updatenpx cap sync 时,所有内容都会重置为-fno-objc-arc ^^。

所以我们需要编写一个脚本,在我们运行这些命令后,将CordovaPlugins 中的所有文件的Compiler flags 设置为empty

我们将在 Podfile (ios/App/Podfile) 下面添加这个脚本来完成这项工作。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if ['CordovaPlugins'].include? target.name
      target.build_phases.each do |build_phase|
        if (build_phase.display_name.eql? "Sources")
          build_phase.files.each do |file|
              if (file.settings)
                settings = file.settings
                settings["COMPILER_FLAGS"] = ""
                file.settings = settings
              end
          end
        end
      end
    end
  end
end

希望对您有所帮助!

【讨论】:

以上是关于构建消息错误时的 ARC 弱引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ARC 下的 Objective-C 上零弱引用为零时得到通知?

使用 ARC 并针对 iOS 4.0 时如何替换弱引用?

对 ARC 下对象的弱引用 (__unsafe_unretained) 的 NSArray

Swift学习笔记-自动引用计数弱引用和无主引用

Swift学习笔记-自动引用计数弱引用和无主引用

Objective-C——强引用弱引用(StrongWeak)