【问题标题】:My app does not find sirikit intentdefinition classes in xcode 11.4我的应用在 xcode 11.4 中找不到 sirikit intentdefinition 类
【发布时间】:2020-03-26 07:16:37
【问题描述】:

我的应用自问世以来已经支持了几个 siri 快捷方式,很久没碰过它了。我的项目在 11.3.2 中编译和构建,但在 11.4 中没有。

我得到的错误是应该从我的 intentdefinition 文件生成的类,并且我在我的 intenthandlers 中引用的类不再被发现。

例如,在我的意图定义文件中,我有一个名为“MyStatus”的自定义意图。

然后我有一个 MyStatusIntentHandler:

#import "MyStatusIntent.h"
@interface MyStatusIntentHandler<MyStatusIntentHandling> : NSObject

在 11.4 中,我找不到“MyStatusIntent.h”文件。在 11.3.1 及更早版本中,它可以正常构建。

我在项目配置和结构方面不是很擅长,所以我不知道从哪里开始挖掘。如果有人有任何指示,以及 11.4 中的哪些内容可能是新的并给我带来问题,我会全力以赴。

【问题讨论】:

    标签: ios objective-c swift xcode sirikit


    【解决方案1】:

    我在混合 swift+objc 项目中遇到过类似的问题。

    我的项目中有一个文件 'Intents.intentdefinition' 用于单独的 Siri 扩展目标。 此外,该文件包含在应用程序目标的编译中(用于使用生成的类在 UI 中添加意图)。

    Siri 扩展目标构建成功。

    但应用程序构建失败并出现错误:“'AnyIntent.h' not found”,尽管这些文件已生成(我已检查过)。

    我仅通过更改 Siri 扩展目标的构建设置解决了这个问题

    Intent Class Generation Language (INTENTS_CODEGEN_LANGUAGE)
    from Automatic to Swift
    

    之前生成的intents头文件的所有导入我改成

    #import <SiriIntents-Swift.h>
    

    【讨论】:

    • 公平竞争.. 干得好.. 我知道代码生成存在一些问题。花了一天的时间试图找出发生了什么。当我将类添加到扩展编译列表时发生这种情况。我也有一个混合的 swift+objc 项目,看起来意图和意图处理协议是在 Swift 或 Objective C 中随机生成的。不知道为什么。 . 再次感谢
    【解决方案2】:

    我也有这个问题。 更新 XCode 后,对于 *.intentdefinition 文件中的类,构建失败并显示“错误:使用未解析的标识符”。 使用终端构建时,我收到了以下消息:

    2020-03-26 17:11:21.874 xcodebuild[28391:166707]  DVTAssertions: Warning in /Library/Caches/com.apple.xbs/Sources/IDEIntentBuilder/IDEIntentBuilder-16029/IntentsBuildSystem/XCCompilerSpecificationIntents.m:46
    Details:  Code generator extension identifier unexpectedly nil for <DVTDeclaredPrimitiveFileDataType:0x7f888398b950:49:'com.apple.sirikit.intentdefinition':'Intent Definition':-*-*-------**-----*--*----*----------------------*-------------->
    Object:   <XCCompilerSpecificationIntents: 0x7f88838a4540>
    Method:   -createCommandsforInputs:withMacroExpansionScope:
    Thread:   <NSThread: 0x7f8892390940>{number = 13, name = (null)}
    Please file a bug at https://feedbackassistant.apple.com with this warning message and any useful information you can provide.
    ** BUILD FAILED **
    

    现在我降级 Xcode 并将反馈添加到 https://feedbackassistant.apple.com/feedback/7640678

    【讨论】:

    • 在阅读完这篇文章并意识到发生了什么之后,我将再次下载 Xcode 11.3.1,直到他们发布新版本。像这样的破坏性错误被发布真是太疯狂了。
    • 是的,但是我无法构建到任何 IOS 13.4 设备...这不好。:(
    【解决方案3】:

    我已经四处寻找,并且还与 Apple 支持进行了交谈。事实证明,它与“遗留构建系统”有关。

    一旦我在 xcode 项目设置中切换到新的构建系统,我就可以再次构建项目。我会争辩说,如果他们仍然支持旧系统(他们确实支持),它应该可以工作,但是很好。

    在此处阅读如何切换: https://help.apple.com/xcode/mac/current/#/dev396bc94c7

    【讨论】:

    • 我尝试了我的项目。我切换到新的构建系统但无法正常工作
    【解决方案4】:

    在尝试为 iOS 14 小部件添加 ConfigurationIntent 时在 XCode 12.4 上偶然发现了这个问题,在我的情况下,问题不在于代码生成器出错。事实证明它实际上工作得很好,但是它创建的类的名称以“Objective-C 类前缀”为前缀(因为某些 Obj-C 遗留项目设置或其他原因)和由 XCode 生成的样板代码提到它并没有注意到那一步,并一直在寻找一个无处可寻的ConfigurationIntent 类。更改 INTENTS_CODEGEN_LANGUAGE 也无济于事。

    不管怎样,最后我不得不深入研究:

    DerivedData/&lt;ProjectName&gt;/Build/Intermediates.noindex/&lt;ProjectName&gt;.build/Debug-iphoneos/&lt;TargetName&gt;/DerivedSources/IntentDefinitionGenerated/Intents

    这是我找到我的意图类文件的地方,它的实际名称为&lt;ObjCPrefix&gt;ConfigurationIntent。我用这个替换了对ConfigurationIntent的引用,错误终于消失了。

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 2020-07-20
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多