Ios 在现有xcode项目上使用swift包管理器
我是swift和xcode领域的新手,所以我在尝试将包集成到我的项目中时遇到了问题 我想使用以下命令添加Alamofire依赖项: 在我的根项目文件夹中: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 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库公开了
用于公开Objective-C消费者思维模块.modulemap伞形图.h
@import SomeModule代码>
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