无法创建Swift包管理器库

时间:2018-04-29 01:44:12

标签: swift package

关于SPM的文档很差,大多数关于它的文章都是在SPM开始时发布的。

我在Swift中实现了一种算法(匈牙利算法),并期待将其作为Github中的库发布。我不得不在这个项目中第一次使用SPM来解决另一个依赖项,一旦它开始工作,它就完美了。

现在,我无法在其他项目中使用我的库。我决定从一个新的git repo开始,因为我无法使之前的工作。

该库名为Hume,它有一个定义Hume类的Hume.swift文件。

我所经历的步骤是:

  1. 为库创建目录
  2. swift package init --type library
  3. 使用代码填充文件
  4. 推送到GitHub repo +标记版本
  5. 为将要使用库的可执行文件创建目录
  6. swift package init --type executable
  7. 在Package.swift中添加依赖项
  8. swift build
  9. 此时,swift克隆了库的repo并且没有问题地编译它(因为main.swift只包含一个Hello世界)。

    1. swift package generate-xcodeproj
    2. 当我打开项目并尝试导入我的库时,似乎可以识别模块名称但是当我尝试声明一个对象时,它说我不能声明一个模块类型的变量。 / p>

      这是库中的Package.swift文件:

      // swift-tools-version:4.0
      // The swift-tools-version declares the minimum version of Swift required to build this package.
      
      import PackageDescription
      
      let package = Package(
          name: "Hume",
          products: [
              .library(
                  name: "Hume",
                  targets: ["Hume"]),
          ],
          dependencies: [
              .package(url: "https://github.com/aleph7/Upsurge.git", from: "0.10.2"),
          ],
          targets: [
              .target(
                  name: "Hume",
                  dependencies: ["Upsurge"]),
              .testTarget(
                  name: "HumeTests",
                  dependencies: ["Hume"]),
          ]
      )
      

      图书馆只有一个具有此风格的文件:

      import Upsurge
      
      class Hume {
          // Attributes
          ....
      
          init(matriz:[[Double]]){
              ....
          }
      
          public func resuelve() -> (Double, [(Int, Int)]){
              ....
          }
      }
      

      这是虚拟可执行文件中的Package.swift:

      // swift-tools-version:4.0
      // The swift-tools-version declares the minimum version of Swift required to build this package.
      
      import PackageDescription
      
      let package = Package(
          name: "aa",
          dependencies: [
              // Dependencies declare other packages that this package depends on.
              // .package(url: /* package url */, from: "1.0.0"),
          .package(url: "https://github.com/Jasagredo/Hume.git", from: "0.1.1"),
          ],
          targets: [
              // Targets are the basic building blocks of a package. A target can define a module or a test suite.
              // Targets can depend on other targets in this package, and on products in packages which this package depends on.
              .target(
                  name: "aa",
                  dependencies: ["Hume"]),
          ]
      )
      

      构建时的输出:

       ~/Desktop/aa  swift build
      Fetching https://github.com/Jasagredo/Hume.git
      Fetching https://github.com/aleph7/Upsurge.git
      Cloning https://github.com/Jasagredo/Hume.git
      Resolving https://github.com/Jasagredo/Hume.git at 0.1.1
      Cloning https://github.com/aleph7/Upsurge.git
      Resolving https://github.com/aleph7/Upsurge.git at 0.10.2
      Compile Swift Module 'Upsurge' (30 sources)
      Compile Swift Module 'Hume' (1 sources)
      Compile Swift Module 'aa' (1 sources)
      Linking ./.build/x86_64-apple-macosx10.10/debug/aa
       ~/Desktop/aa 
      

      但是当我在虚拟可执行文件中编辑main.swift时,我发现了这个错误:

      import Hume
      
      var a = Hume(matriz: [[1,1],[1,1]]) //Cannot call value of non-function type 'module<Hume>'
      

      另外,Xcode不会自动建议我休姆课程。我只是不知道我做错了什么。

      感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我终于设法让事情发挥作用了。问题是类(并且它的init方法)未被声明为public。其余配置是正确的。