我在Swift中有一个静态库,我想从另一个Swift项目访问此库类。库中的类无法正确引用。

我的静态库StaticLib包含层次结构,

静态库项目-层次结构

StaticLib (project)
   StaticLib
       StaticLib.swift
   Products
       libStaticLib.a

静态库项目-StaticLib.swift
public class StaticLib {

    public class func test(string: String) {
        Printer().printMe(string: string)
    }
}

class Printer {

    func printMe(string: String){
        print("This is test tring: \(string)")
    }
}

主机应用-AppDelegate.swift
import StaticLib

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


        StaticLib.test("How do you do?") // error

        return true
    }
}

我完成的步骤-
  • 在Xcode Project Navigator中单击项目
  • 单击 + 添加新的目标
  • 选择框架和库>静态库>下一步
  • 输入名称StaticLib(在Swift中)>完成
  • 打开StaticLib.swift并输入
  •     public class StaticLib {
    
            public class func test(string: String) {
                Printer().printMe(string: string)
            }
        }
    
        class Printer {
    
            func printMe(string: String){
                print("This is test tring: \(string)")
            }
        }
    
  • 选择StaticLib模式,构建> OK
  • libStaticLib.a复制到名为HostApp/Libs/的新文件夹
  • 在项目导航器中选择项目>单击主应用程序目标>选择常规
  • 框架,库和嵌入式内容部分中,单击我看到libStaticLib.a已由Xcode Intelligence添加
  • 选择主应用程序架构>构建>确定
  • 选择AppDelegate.swift>添加import StaticLib
  • 添加
  •     StaticLib.test("How do you do?")
    
  • 尝试构建

  • 编译错误:

    使用未解析的标识符“StaticLib”

    如何解决此问题?我需要在库中创建任何头文件吗?

    注意:我已经成功嵌入了libStaticLib.a,它存在于Host apps的General -> Frameworks, Libraries and Embedded contents选项卡中。

    最佳答案

    我已经通过了您的步骤,所有工作都已完成,至少在Xcode 11.3.1 / iOS 13.3中有效。唯一的事情...似乎...请参阅评论

    import StaticLib // << looks like you've forgot this one !!!
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    
            StaticLib.test("How do you do?") // error
    
            return true
        }
    }
    

    更新:这是我的步骤-
  • 在Xcode Project Navigator中单击项目
  • 单击 + 添加新的目标
  • 选择框架和库>静态库>下一步
  • 输入名称StaticLib(在Swift中)>完成
  • 打开StaticLib.swift并输入
  •     public class StaticLib {
            public class func printme() {
                print("I'm swfit static lib!")
            }
        }
    
  • 选择StaticLib模式,构建> OK
  • 在项目导航器中选择项目>单击主应用程序目标>选择常规
  • 框架,库和嵌入式内容部分中,单击 + ,然后选择libStaticLib.a>添加
  • 选择主应用程序架构>构建>确定
  • 选择AppDelegate.swift>添加import StaticLib
  • 在代码
  • 中添加任何位置
        StaticLib.printme()
    
  • 构建>确定>运行...请参见输出

  • Update2:外部Lib项目的

    +1需要将StaticLib.swiftmodule(与libStaticLib.a在同一位置创建)复制到目标项目文件夹(我将其放置在.xcodeproj文件的级别)

    +2在主应用程序目标Build Settings中设置SWIFT_INCLUDE_PATHS = ${SRCROOT}
    +3清洁>构建

    注意:模块已加载的指示符是自动完成导入-它应该显示StaticLib

    关于ios - 如何从纯Swift项目访问纯Swift静态库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59875615/

    10-14 21:14