【问题标题】:MyClass is unavailable: cannot find Swift declaration for this class - Release Build OnlyMyClass 不可用:找不到此类的 Swift 声明 - 仅发布构建
【发布时间】:2015-07-03 07:08:33
【问题描述】:

我收到以下错误:

MyClass 不可用:找不到此类的 Swift 声明

但我只有在 Xcode 中进行发布构建时才能得到它...调试工作正常。

有人知道怎么回事吗?我正在运行 6.3

【问题讨论】:

  • 您是否将类添加到构建阶段? (构建阶段-> 编译源)。 xCode 应该自动执行此操作,但如果它在调试中起作用,这似乎是一件好事。
  • 嗨,是的,该类已添加到构建阶段
  • 该类是您自己的类之一还是来自您正在使用的框架?

标签: xcode swift


【解决方案1】:

如果 MyClass 位于动态框架(Cocoa Touch 框架)中,则很可能您正在使用具有错误架构的构建。要检查,请在 finder 中浏览您的 MyClass.framework,然后检查 Modules/AirServiceKit.swiftmodule。应该有 x86_64.swiftmodulearm64.swiftmodule 之类的东西,如果您使用的是模拟器,则应该有 x86,或者如果您正在为设备构建,则应该有 arm。

【讨论】:

  • 我有 x86_64.swiftmodule 但没有 arm64.swiftmodule。如何添加 arm64.swiftmodule?在有效架构下的框架构建设置中,我有 arm64 armv7 armv7s
  • 我发现了我的问题。我需要将框架的部署目标从模拟器预选选项更改为“通用 iOS 设备”,然后重新构建框架。
  • 有两个模块,但仍然不适用于 iPhone 5 和 iPhone 4
  • @ShauketSheikh 我认为 iPhone 5 是 armv7s,而 iPhone 4 是 armv6
  • 非常感谢!就我而言,我有 arm 模块,所以我尝试在设备上运行它,它运行良好。
【解决方案2】:

万一其他人遇到这个问题:

我遇到了完全相同的错误,结果证明我已经为特定的模拟器构建了我的框架。我将device(在左上角)更改为Generic iOS device,并做了cleanbuild,然后我使用了生成的.framework 文件。 使用这个生成的.framework 文件后一切正常。

【讨论】:

  • @iArezki 将其拖到项目的General 选项卡下的Embedded Binaries 部分。在出现的向导窗口中单击检查Copy item if needed 选项。
【解决方案3】:

就我而言,这是因为我正在开发的框架缺少应用目标中列出的有效架构之一。我所要做的就是:

  1. 转到项目文件。
  2. 转到您要构建的应用目标的构建设置。请注意有效架构下列出的架构。
  3. 转到失败的框架目标。
  4. 确保所有架构都匹配。

就我而言,我的框架缺少arm64

【讨论】:

    【解决方案4】:

    检查您在 Build Settings for Debug and Release 中为 Build Active Architectures 设置的标志值

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,我通过以下步骤解决了它

      1. 删除 swift 框架,即将 swift 框架移至垃圾箱

      2. 然后清理当前项目

      3. 再次构建 swift 框架

      4. 将swift框架拖入应用主目录

      5. 将框架添加到嵌入式框架中

      6. )然后运行项目

      它就像一个魅力。你的 swift 框架类得到 应用中得到认可。

      【讨论】:

        【解决方案6】:

        我有一个不同的答案,我相信它会帮助很多人。

        您的应用项目链接到早期的 iO​​S 版本(如 iOS 9.0)和 您的框架链接到更新版本(如 iOS 11.3

        只需将您的框架版本更改为 iOS 9.0, 干净的, (如果您的框架使用 pod 依赖项,可以选择运行 pod install), 建造, 并将框架文件添加到您的应用项目中, 添加到链接的二进制文件,你就完成了 =]

        造成这种情况的原因之一是 iOS 11 支持 64 位 仅 (arm64),因此框架仅获得该架构,但 您的应用也需要 32 种架构,而这些架构都缺少。

        【讨论】:

          【解决方案7】:

          我猜你说的是框架类

          让我们跳过后台发生的技术问题... (几乎所有关于此的内容都已解释:-))

          此错误只是由于框架与您尝试运行它的构建不兼容..

          修复:-

          1) 从项目中删除框架

          2) 那么:-

          • 如果您正在运行模拟器,请转到您的框架项目并构建框架项目,从 iOS 模拟器列表(模拟器列表中的任何设备)中选择一个模拟器,然后将框架导入宿主项目

          • 如果您正在运行物理设备,请转到您的框架项目并选择“通用 iOS 设备”/物理设备(已连接)构建框架项目,然后将框架导入宿主项目

          现在应该可以正常工作了。希望这会有所帮助!

          【讨论】:

            【解决方案8】:

            您是否尝试过查看框架上的方案并查看它是否指向 Product->Scheme->Run->Build 配置下的“发布”?

            【讨论】:

              【解决方案9】:

              这些答案都没有解决我的特定问题。我的问题是,在某些时候(不记得为什么)我添加了一个自定义模块映射文件,其中包含以下代码:

              framework module Foo {
                  umbrella header "Foo.h"
                  module * { export * }
                  export *
              }
              

              由于某种原因,这与 Swift 类发生冲突。从框架目标中删除模块映射文件修复了错误

              【讨论】:

                【解决方案10】:

                对于使用 objc + swift 的自定义 pod 框架:

                创建一个新的头文件,如:{FrameworkName}.h 并添加:

                #import "{FrameworkName}-umbrella.h"

                然后进行 pod install... 或将此文件添加到 {FrameworkName}-umbrella.h 中,如下所示: #import {FrameworkName}.h

                【讨论】:

                  猜你喜欢
                  • 2016-05-03
                  • 1970-01-01
                  • 2015-11-25
                  • 1970-01-01
                  • 2015-12-18
                  • 2016-07-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多