Ios 在现有xcode项目上使用swift包管理器

Ios 在现有xcode项目上使用swift包管理器,ios,swift,xcode,swift-package-manager,Ios,Swift,Xcode,Swift Package Manager,我是swift和xcode领域的新手,所以我在尝试将包集成到我的项目中时遇到了问题 我想使用以下命令添加Alamofire依赖项: 在我的根项目文件夹中: swift init 这将创建Package.swift文件,我在其中添加依赖项,然后运行: swift build 一切似乎都正常,但当我尝试导入我的库时,我是我的项目: import Alamofire 我得到一个错误,它说模块无法识别。 所以我这里的问题是,在不破坏一切的情况下,集成包管理器和对现有项目的依赖关系的正确步骤是什么

我是swift和xcode领域的新手,所以我在尝试将包集成到我的项目中时遇到了问题

我想使用以下命令添加Alamofire依赖项:

在我的根项目文件夹中:

swift init
这将创建Package.swift文件,我在其中添加依赖项,然后运行:

swift build
一切似乎都正常,但当我尝试导入我的库时,我是我的项目:

import Alamofire
我得到一个错误,它说模块无法识别。 所以我这里的问题是,在不破坏一切的情况下,集成包管理器和对现有项目的依赖关系的正确步骤是什么

更新:

swift build
产出:

Resolved version: 4.3.0
Compile Swift Module 'Alamofire' (17 sources)
Compile Swift Module 'Sample' (1 sources)
还有我的包裹。斯威夫特是:

import PackageDescription

let package = Package(
    name: "Sample",
    dependencies: [
        .Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4)
    ]
)
是一个独立的工具,允许在不使用Xcode的情况下管理依赖项和构建项目。它可以使用
swift包generate xcodeproj
为您生成Xcode项目

然而,目前,Swift Package Manager只支持为macOS和Linux平台构建项目。为iOS、tvOS和watchOS构建项目的唯一方法是使用Xcode,其中包括这些平台所需的SDK

有多种方法可以使用Swift Packages Manager管理iOS/tvOS/watchOS的依赖关系,但这并不容易,需要手动操作。如果你感兴趣,可以看看

除此之外,我建议使用or

Xcode 11的更新


Swift软件包管理器现在集成到Xcode 11中。您可以通过转到“文件”然后是“Swift软件包”,然后是“添加软件包依赖项…”来添加软件包。将存储库的URL粘贴到上面的字段中,然后单击“下一步”。Xcode将引导您完成其余步骤。您可以在上了解更多信息。

Swift软件包管理器(SPM)

消费

生产:如果您正在开发库/模块(模块化),您应该注意支持它

Package.swift
-清单文件

  • 这是一个硬编码的名称
  • 在其他情况下,应放在同一级别或更高级别:
  • Swift库转换为单个
    .o格式
    文件和
    .swiftmodule
  • Swift库公开了
    .modulemap伞形图.h
    用于公开Objective-C消费者思维模块
    @import SomeModule
package.targets.target.dependencies

如果你的目标有依赖关系。您将获得相同的效果-伞形库

1.从同一软件包中添加另一个目标

例如,使用了显式依赖关系。重要提示:使用相同的名称(模块和SPM目标)。如果您没有在
package.targets.target.dependencies
中设置依赖项,则会出现下一个错误

Undefined symbol
2.从另一个包装中添加产品。另一个包中的所有目标都将公开

2.1本地包路径

您不能在用户端使用。但它至少能让你初次登场

package <package_name_1> is required using a revision-based requirement and it depends on local package <package_name_2>, which is not supported
如果未指定
//swift工具版本:
,则会得到:

package at '<some_path>' is using Swift tools version 3.1.0 which is no longer supported; consider using '// swift-tools-version:5.3' to specify the current tools version
“”处的包正在使用不再受支持的Swift tools版本3.1.0;考虑使用“//SWIFT工具版本:5.3”来指定当前工具版本

*不要忘记在测试之前提交您的更改和更新

如果您使用的是Xcode项目,您不需要
包。swift
,只需单击Xcode中swift包中的加号图标,并添加swift包的GitHub URL,库也将自动添加到您的目标中(按照下面的GIF,或单击图像中的添加图标):

额外信息
不能为相同的目标同时维护Xcode项目和Swift.package。它们不同步,
Swift package generate xcodeproj
已被弃用(这曾经是基于package.Swift创建xcodeproj的方法,但对该xcodeproj的更改没有反映在原始的
package.Swift
).

试着构建一次,看看错误是否消失。你能添加你的
包吗。swift
文件给你吗?问题我刚刚添加了我的包。swift代码,我再次运行了
swift build
命令,看起来是正确的,但导入不起作用。swift包管理器还处于初级阶段,你现在应该使用CocoaPods.
swift package init
我猜这是另一篇关于此主题的文章,单击此处,当您将swift package manager用于iOS项目时,没有公开的package.swift文件?@ChrisPrince,有,但它在幕后被Xcode隐藏和维护。解析包后,您将需要添加
packages.resolved到您的源代码管理存储库。
- You are able to work with `Package.swift` in Xcode if double click on it
.swiftpm/xcode with .xcworkspace will be generated 
- When you work with `Package.swift` you are able to check it, just save this file
- When you work with `Package.swift` you should specify schema and device(platform)
- When you build `Package.swift` 
  - library and .swiftmodule is located:
<path_to_derived_data>/DerivedData/<folder_name_where_Package.swift_located>-<randomizer>/Build/Products/<platform>
//e.g.
/Users/alex/Library/Developer/Xcode/DerivedData/someFolder-ccivqbbjujxuvdcxtuydyqfeepfx/Build/Products/Debug-iphonesimulator
  - .modulemap and umbrella.header is located:
<path_to_derived_data>/DerivedData/<folder_name_where_Package.swift_located>-<randomizer>/Build/Intermediates.noindex/<project_name>.build/<platform>/<target_name>.build/<.modulemap> and plus /Objects-normal/<arch>/<tarhet_name-Swift.h>

- When you build consumer with `Package.swift` results files will be located:
<path_to_derived_data>/DerivedData/<target_name>-<randomizer>/Build/Products/<platform>

- When you work with consumer of `Package.swift` SPM clones it into
<path_to_derived_data>/DerivedData/<target_name>-<randomizer>/SourcePackages/checkouts
producer:
package.products.library.targets: ["TargetName1", "TargetName2"]

consumer: 
1. adds single library
2. several imports

import TargetName1
import TargetName2

Undefined symbol
package <package_name_1> is required using a revision-based requirement and it depends on local package <package_name_2>, which is not supported
The URL file:///hello world/some_local_path is invalid
package at '<some_path>' is using Swift tools version 3.1.0 which is no longer supported; consider using '// swift-tools-version:5.3' to specify the current tools version