在 Package.swift 中,将目标添加到库中的目标数组与将目标添加到依赖项数组之间有什么区别。
在第一个示例中,“Helpers”被添加为“MySwiftPackage”目标的依赖项。
let package = Package(
name: "MyTestPackage",
products: [
.library(
name: "MyTestPackage",
targets: ["MyTestPackage"]),
.library(
name: "Helper",
targets: ["Helper"]),
],
dependencies: [
],
targets: [
.target(
name: "MyTestPackage",
dependencies: ["Helper"]), // <---- 'Helper' defined as dependency
.target(
name: "Helper",
dependencies: []),
]
)
Run Code Online (Sandbox Code Playgroud)
在下一个示例中,“Helper”被添加为“MySwiftPackage”库中的另一个目标。
let package = Package(
name: "MyTestPackage",
products: [
.library(
name: "MyTestPackage",
targets: ["MyTestPackage","Helper",]), // <-- 'Helper' defined in targets
.library(
name: "Helper",
targets: ["Helper"]),
],
dependencies: [
],
targets: [
.target(
name: "MyTestPackage", …Run Code Online (Sandbox Code Playgroud) 我正在将作为 Xcode 项目构建和测试的库迁移到 Swift Package Manager。该项目包含 3 个目标:库本身、具有不同依赖关系的相同库以及测试(应用程序)目标。
到目前为止,移植库很容易。
现在我有兴趣构建具有不同依赖项(模拟)的相同库,可以对其进行测试。
实际上,Package.swift 文件如下所示:
// swift-tools-version:5.4
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "TargetLibrary",
platforms: [
.iOS(.v14), .macOS(.v10_15)
],
products: [
.library(
name: "TargetLibrary",
targets: ["TargetLibrary"]
),
],
dependencies: [
.package(
url: "ssh://git@github.com/DependentLib",
.upToNextMinor(from: "1.3.18")
),
],
targets: [
.target(
name: "TargetLibrary",
dependencies: [
// Using the "main" dependency for the "TargetLibrary"
.product(name: "DependentLib", package: "DependentLib"),
],
path: …Run Code Online (Sandbox Code Playgroud) 我有一个示例 Swift Package Manager 包(我们称之为TestPackage),其结构如下:
TestPackage/
Sources/
TestPackage/
Services/
Services.h
Services.m
TestPackageUI/
UIComponent1.h
UIComponent1.m
UIComponent2.h
UIComponent2.m
include/
TestPackage.h (umbrella header)
Run Code Online (Sandbox Code Playgroud)
我的内容TestPackage.h看起来像这样:
TestPackage/
Sources/
TestPackage/
Services/
Services.h
Services.m
TestPackageUI/
UIComponent1.h
UIComponent1.m
UIComponent2.h
UIComponent2.m
include/
TestPackage.h (umbrella header)
Run Code Online (Sandbox Code Playgroud)
我想要的是这个包的用户可以将此包导入 objc/swift 并使用 Services 和 TestPackageUI。他们可以做一些事情,例如:
Objective-C:
/// Umbrella header
/// Services
#import "Services.h" // (or "Services/Services.h")
/// TestPackageUI
#import "Component1.h" // (or "TestPackageUI/Component1.h")
#import "Component2.h" // (or "TestPackageUI/Component2.h")
Run Code Online (Sandbox Code Playgroud)
迅速:
@import TestPackage;
/// or
#import <TestPackage.h>
Run Code Online (Sandbox Code Playgroud)
SPM使用文档说:
如果复杂的包含布局或与模块不兼容的标头,可以在包含目录中提供自定义 …
objective-c swift swift-package-manager module-map swift-package
Swift 有一个有趣的关键字,可以在 中声明ModuleA:
@_exported import Foundation
Run Code Online (Sandbox Code Playgroud)
然后,当在其他模块(例如ModuleB)中时,我导入ModuleA:
import ModuleA
let currentDate = Date() // using a Foundation struct
Run Code Online (Sandbox Code Playgroud)
Foundation...即使我没有使用语句导入它,我也可以使用类型import。它会被自动导入,因为它已@_exported在ModuleA.
现在我想在 Objective-C 中有类似的行为。
鉴于:
TargetA(Swift)、ProtocolTarget(带有关键字注释类型的 Swift @objc) 和TargetB(ObjC)ProtocolTarget隐式导入,以便在TargetB导入时TargetA,来自 的所有方法ProtocolTarget都应该在TargetA.我怎样才能实现这个目标?
import objective-c swift swift-package-manager swift-package
我正在尝试使用xcassetsSwift 包 ( src ) 内文件夹中的颜色集。它似乎不起作用。我通过编写一个尝试使用颜色的简单视图来测试这一点:
Text("Hello")
.foregroundColor(Color("brandPrimary")
Run Code Online (Sandbox Code Playgroud)
我从这段代码中得到了一个空视图;文本找不到颜色。
我围绕网络进行了大量研究 - 回顾 WWDC 视频,例如Swift 包:资源和本地化,他们似乎建议该xcassets文件夹自动包含为资源。这对我不起作用。
我尝试process("Resources/Colors.xcassets")在我的包清单中添加,但这也没有帮助。
我最近从 GitHub 分叉了一个 Swift Package 库,以实现我一直缺少的功能。但是,当我尝试在 Xcode 项目中添加我的包版本(通过添加我的 fork 的 url)时,Xcode 找不到任何结果。
这是 Swift Package Manager 的有意限制还是我遗漏了什么?
我创建了一个新的 Swift 包并尝试使用RxSwift其中的依赖项。我按照这些说明添加依赖项,但在此之后我的包无法构建,并出现以下错误:
找不到包“mylibrary”目标“MyLibrary”所需的产品“RxCocoa”。
我的包清单在这里:
// swift-tools-version: 5.8
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [them visible to other packages.
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
dependencies: [
.package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.5.0"))
],
targets: [
.target(
name: "MyLibrary",
dependencies: ["RxSwift", "RxCocoa"]),
.testTarget(
name: "MyLibraryTests",
dependencies: ["MyLibrary"]),
]
)
Run Code Online (Sandbox Code Playgroud)
我在用着Xcode 14.3。我应该如何将 RxSwift 依赖项添加到包中。
我正在尝试在 Swift 包中显示图像包。
let image = UIImage(named: "image", in: Bundle.module, compatibleWith: nil)当我使用png图像时,此代码有效。但是当我使用svg同名的 (image.svg) 时,图像是nil.
这就是我定义保存图像的资源文件夹的方式Package.swift
resources: [
.process("Resources"),
]
Run Code Online (Sandbox Code Playgroud) 我有点为难了。我为 Xcode 项目创建了自定义文件模板。
在正常的项目环境中,当我访问New file创建弹出窗口时,我的自定义模板就会出现,如下面的屏幕截图所示
这些模板位于以下公共路径:/Users/XXXX/Library/Developer/Xcode/Templates
当我处理 swift 包时会出现这个问题。当我尝试创建新文件时,弹出窗口界面非常不同,并且不包含我的自定义模板,如下图所示:
我怀疑我应该将模板设置在 swift 包的其他特定位置,但我不知道在哪里。我环顾四周,似乎没有找到任何关于我应该在哪里设置自定义内容的参考Swift Packages。
我正在寻找有关此事的任何提示。或者任何可以为我提供有关如何解决问题的线索的信息。
先感谢您。
swift ×8
xcode ×3
dependencies ×2
ios ×2
objective-c ×2
github ×1
import ×1
module-map ×1
rx-cocoa ×1
rx-swift ×1
svg ×1
swiftui ×1
templates ×1