OC项目创建iOS 14 Widget 时编译报错

起因

最近产品要做一个Widget小组件,产品的要求必须安排。于是我新创建了一个OC项目,然后创建了一个Widget Extension。直接运行编译,发编译器报以下错误:
ld: Assertion failed: (reconstituted == (accumulator - _options.machHeaderVmAddr())), function setFixup64, file OutputFile.cpp, line 2864.

ld: Assertion failed: (reconstituted == (accumulator - _options.machHeaderVmAddr())), function setFixup64, file OutputFile.cpp, line 2864.

解决过程

查找资料在官方论坛发现了同样错误,但是没有给出解决方案。
后面通过修改了项目的Projet 支持的最低版本由iOS 15 改为iOS14可以编译通过。
在这里插入图片描述
解决了这个错误之后,发现编译还是有其他错误。
编译报错提示:
1、Type ‘Provider’ does not conform to protocol ‘IntentTimelineProvider’
2、Cannot find ‘ConfigurationIntent’ in scope

Type 'Provider' does not conform to protocol 'IntentTimelineProvider'
Cannot find 'ConfigurationIntent' in scope

在这里插入图片描述
查找资料才知道原因是:
我们在工程中设置了Class Prefix,我的项目设置的是CN
在这里插入图片描述

导致Xcode自动生成的是CNConfigurationIntent.swift,该文件路径是:

/Users/用户名/Library/Developer/Xcode/DerivedData/项目名称/Build/Intermediates.noindex/项目名称.build/Debug-iphonesimulator/widget的名称Extension.build/DerivedSources/IntentDefinitionGenerated/widget的名称/CNConfigurationIntent.swift

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
但是自动生成的代码又是ConfigurationIntent,只需要把代码中的ConfigurationIntent都改为工程前缀+ConfigurationIntent(CNConfigurationIntent)就可以正常运行了。
在这里插入图片描述

因为项目主工程是OC,我们在Widget中创建了两个OC文件与桥接文件CNHotWidget-Bridging-Header后,编译发现又开始报错。

Type 'Provider' does not conform to protocol 'IntentTimelineProvider'
Cannot find 'CNConfigurationIntent' in scope

在这里插入图片描述
解决这个问题,需要我们在桥接文件CNHotWidget-Bridging-Header中引入#import "CNConfigurationIntent.h"
在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假装自己很用心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值