【问题标题】:Can't access class from custom dynamic framework (Swift)无法从自定义动态框架(Swift)访问类
【发布时间】:2014-11-07 12:47:52
【问题描述】:

我的测试动态 iOS 框架 XYZFramework 由单个类 XYZ 组成。

但是,即使在声明之后:

import XYZFramework

我无法访问此类,任何尝试都会产生以下错误:

Use of unresolved identifier 'XYZ'

我该如何解决这个问题?

【问题讨论】:

    标签: ios swift frameworks xcode6


    【解决方案1】:

    找到答案。我必须在我的类声明前加上 public 修饰符。所以这个:

    class XYZ {
    
    }
    

    成为:

    public class XYZ {
    
    }
    

    而且,与往常一样,删除 ~/Library/Developer/Xcode/DerivedData 文件夹可以解决任何小问题。

    【讨论】:

    • 在我为所有内容添加“public”之后,退出 Xcode,删除 ~/Library/Developer/Xcode/DerivedData,重新启动 Xcode,错误就消失了。
    • 我每次都忘记这部分...grrrrr
    • 旧线程,但有一个注意事项:我没有删除该文件夹,而是发现将我的方案切换到框架并运行构建,然后将方案切换回我的应用程序并运行构建,完成相同的操作刷新。
    • “破坏 ~/Library/Developer/Xcode/DerivedData”对我有用,谢谢!
    • 您介意在 github 上发布您的测试项目吗?我正在尝试制作框架。我遇到了同样的问题。在我正在创建的单独测试项目中无法访问 classes 和 func。
    【解决方案2】:

    如果您的框架类还包含静态和实例成员函数,您还需要添加更多public 关键字。

    // set the Framework class to Public
    public class FrameworkHello{  
    
       // set the initializer to public, otherwise you cannot invoke class
       public init() {  
    
       }
    
       // set the function to public, as it defaults to internal
       public static func world() {  
           print("hello from a static method")
       }
    }
    

    现在您可以通过 Swift 代码或 lldb 访问它:

    (lldb) po FrameworkHello.world()
    hello from a static method
    

    这确保了框架的符号可在 发布 构建中访问。

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多