【问题标题】:Unable to create a custom framework with swift 4.1无法使用 swift 4.1 创建自定义框架
【发布时间】:2023-03-24 02:15:01
【问题描述】:

我一直在尝试解决this 问题。所以我想在 swift 4.1 上创建一个新的简单的新框架。

我的代码是这样的:

public class TestStupidity: NSObject {
    public static var shared = TestStupidity()
    public func hello() {
        print("hello")
    }
}

但是,即使是这一小段代码也不适合我。公共类及其变量不会出现在头文件中。

我已将这个项目上传到 GitHub 的 link

谁能帮我弄清楚我在这里做错了什么?

【问题讨论】:

  • 你是如何将你的“框架”纳入你的应用程序的?
  • import TestingStupidity。我可以导入框架,但里面除了TestingStupidityVersionNumber 什么都没有
  • 我也将它添加到嵌入式框架中
  • 您是否也将其包含在 目标依赖项 部分?
  • 我为什么需要这样做?我认为将它添加到嵌入式框架就足够了,因为它不是我的应用程序的一部分,也不在同一个工作区中

标签: ios swift xcode9.3 swift-framework


【解决方案1】:

按照这些步骤,看看它是否正常工作:

创建 Cocoa Touch Framework 类型的新项目,命名为 Tester

添加名为 TestStupidity.swift 的新 Swift 文件

将问题中的代码添加到文件中:

public class TestStupidity: NSObject {
    public static var shared = TestStupidity()
    public func hello() {
        print("hello")
    }
}

向 Single View App 类型的项目添加新目标并将其命名为 TesterApp

选择 TestApp 目标,然后在 General 选项卡中,单击 Embedded Binaries 的 + 号。选择 Tester 框架

在 ViewController.swift 文件中,将代码设置为:

import UIKit
import Tester

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let testClass = TestStupidity()
        testClass.hello()
    }
}

运行 TestApp 并在输出中看到“hello”。

【讨论】:

  • 此代码对我有用,谢谢。但是有没有一种方法可以为我的框架和应用程序保留单独的工作区,因为我在 swift 3 中工作并希望保持这种方式?
  • 我在另一个问题here中提到了我的主要问题
  • @AmoghShetigar,你一直提到头文件。按照我上面的步骤,你能引导我到你正在谈论的标题吗?也许问题不是你想的那样。
  • @AmoghShetigar,如果你想让它在 Swift 3 中也能工作,那是完全不同的情况。目前,框架和父应用程序需要使用相同版本的 Swift 编译。请参阅此处的讨论:stackoverflow.com/questions/49922008/…
【解决方案2】:
  1. 使用open 关键字:open 类是可访问的并且 subclassable 在定义模块之外。开放类成员在定义模块之外是可访问和可覆盖的。还要添加@objcMembers

    @objcMembers 开放类 ARCompactDeviceInfo: NSObject {}

  2. 转到Target -> Build Phase -> HeadersPublic中添加Umbrella Header文件(与项目同名的文件)文件 如图所示。就像在我的项目中一样,我隐藏了 CryptoAPI.h 和其余文件 Example of Swift 4 Framework

  3. 转到目标 -> 常规 -> 嵌入式二进制文件拖动您的框架。

已编辑: @Amogh Shetigar:添加上述详细信息后,我已经下载了您的项目并与示例应用程序集成。 Here is URL 适用于框架和集成应用程序

【讨论】:

  • 我尝试了您提到的更改。但是在我将它导入我的 swift 应用程序后,该类仍然不可见。
  • 公用类就够了。
  • @AmoghShetigar 检查我更新的答案。第三点会帮助你。如果工作请接受并投票
  • @Aleem 将文件添加到公共标头将意味着整个文件连同代码将添加到.framework。我想隐藏我的实现
  • @AmoghShetigar 是的,这是真的,如果您担心隐私,那么只需在公共中添加伞头文件,其余文件添加到项目中。我也相应地更新了我的答案。
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 2014-11-07
  • 2015-02-14
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2018-05-21
相关资源
最近更新 更多