A我有一个包含两个目标(和)的框架,B其文件结构如下:
FooFramework
|__ A
|__ Foo.swift
|__ Bar.swift
|__ Foobar.swift
|__ B
|__ Barfoo.swift
Run Code Online (Sandbox Code Playgroud)
BA基本上有的源的子集(其中B被设置为目标),例如B仅使用Foo.swift和Bar.swift,但不使用Foobar.swift。
现在我有一个应用程序需要框架A和B(在单独的目标中)。
此时我不确定如何设置Package.swift文件以使此设置起作用。每当我打开Package.swiftinXcode并尝试构建框架时B,编译器都会抱怨 in 中缺少类型Barfoo.swift,因为它们包含在Bar.swift.
这就是我设置Package.swift文件的方式:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "Framework",
platforms: [
.iOS(.v11),
.macOS(.v10_15)
],
products: [
.library(
name: "A",
targets: ["A"]),
.library(
name: "B",
targets: ["B"]), …Run Code Online (Sandbox Code Playgroud) 尝试在 Xcode 的 iOS 项目中使用本地 Swift 包依赖项时,我收到以下错误:
The package product 'DlibWrapper' cannot be used as a dependency of this target because it uses unsafe build flags.
(我使用不安全标志来指定静态库位置)
我还尝试将该包作为基于远程分支的依赖项导入,但无论如何它都失败了。
根据Swift 论坛上的这篇文章,该问题已在不久前解决,并且已经合并了相应的拉取请求。
问题出现在 Swift 5.2.4 (Xcode 11.6) 和 5.3 (Xcode 12 beta 3) 中。
任何线索可能是什么问题?
我正在尝试构建一个包装dlib库并在 iOS 应用程序中使用它的 Swift 包。由于平台原因,我无法使用.systemLibrary目标链接dlib. 所以我在一个静态库中预编译它并与包装器代码打包在一起,如下所示:
DlibWrapper/
Libraries/
dlib/
include/
...
lib/
arm64/
libdlib.a
Sources/
CWrapper/
include/
module.modulemap
cwrapper.h
cwrapper.cpp
SwiftWrapper/
SwiftWrapper.swift
Package.swift
Run Code Online (Sandbox Code Playgroud)
的简化内容 …
自从升级到 Xcode 12.5 以来,我从 SPM 收到了这个警告(我认为),我有两个问题:
将不胜感激任何回应。我在谷歌上找不到这些问题的好的答案。
我正在构建一个自定义的 swift 包,它的依赖项之一是一个 xcframework 包(Bugfender),并且仅适用于 iOS(和 Mac Catalyst)。可以理解的是,当我尝试在 Xcode (12.5) 中编译此包时,我收到一条错误,指出无法找到该包的 mac 库(所有 iOS 特定代码都包含在 #if os(iOS) 块中)。
基于此(https://github.com/apple/swift-evolution/blob/master/proposals/0273-swiftpm-conditional-target-dependency.md)除了Swift包规范之外,我想我可以使用一个条件排除 mac 的依赖关系,但是当我尝试以下 Swift.package 文件时,在为 mac 构建时仍然遇到相同的错误。这是一个错误还是我做错了什么?看起来它也应该基于这篇文章工作(Swift package manager: How best to indicates platform dependent code?)
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "GTSApplicationLogging",
platforms: [
.iOS(.v12), .macOS(.v10_13),
],
products: [
// Products define the executables and libraries a package produces, and …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 iOS 框架实现对 Swift 包管理器的支持,我们使用该框架在我们的主项目中与 Carthage 链接。该框架的名称是“OptionsSheetKit”
该框架包含外观UIViewController的复制品和具有视图控制器设计的故事板。UIAlertController.sheet
当我从框架内创建视图控制器的实例时,如下所示:
let content = UIStoryboard(name: "OptionsSheet", bundle: .module).instantiateViewController(withIdentifier: PickerViewController.identifier) as? PickerViewController
Run Code Online (Sandbox Code Playgroud)
该应用程序编译并运行,但是所有自定义设置类不再设置,我在 XCode 的调试区域中收到此警告:
2021-02-23 17:19:15.606835+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.607631+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.608020+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.608378+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface Builder file.
2021-02-23 17:19:15.608776+0200 OptionsSheetKitExample[23732:6479875] [Storyboard] Unknown class _TtC31OptionsSheetKit_OptionsSheetKit19SheetViewController in Interface …Run Code Online (Sandbox Code Playgroud) 我有一个本地 swift 包Foo,它提供了两个不同的库Foo和FooB。现在我想在另一个本地包Bar 中使用它们。我只能通过路径声明来获取整个包。有没有办法命名/指定应使用哪个库?我想在我的Bar包中使用FooB。
let package = Package(
name: "Foo",
products: [
.library(name: "Foo", targets: ["Foo"]),
.library(name: "FooB", targets: ["FooB"])
]
...)
Run Code Online (Sandbox Code Playgroud)
let package = Package(
name: "Bar",
dependencies: [
.package(path: "Foo"),
.package(path: "FooB") // this one does not work
],
...)
Run Code Online (Sandbox Code Playgroud)
// inside package Bar
import Foo
import FooB // this is throwing "no such module 'FooB'"
Run Code Online (Sandbox Code Playgroud) 我们已经从 CocoaPods 迁移有一段时间了,但并不是每个依赖项都进行了转换。就像 Firebase 一样。
我对重复符号有类似的问题,但现在我面临着新的问题,这可能是因为我在 SwiftPM 和 CocoaPods 中都使用了依赖项。
运行我的(示例)项目后它崩溃了:
-[FBLPromise firebaseInstallationID]: unrecognized selector sent to instance 0x600003f5a430
Run Code Online (Sandbox Code Playgroud)
顶部有警告:
objc[93047]: Class FBLPromise is implemented in both
/xxx/SampleProject.app/Frameworks/FBLPromises.framework/FBLPromises (0x10b3f09a8) and
/xxx/SampleProject.app/SampleProject (0x10af736f0).
One of the two will be used. Which one is undefined.
Run Code Online (Sandbox Code Playgroud)
在更新到 Firebase SDK v6.26.0 之前,我只会收到第一个警告,但更新后它崩溃了。
我看到了一篇关于如何在库中使用 Firebase 的文档,以及一个关于类似崩溃的GitHub 问题。但除了降级之外,似乎没有什么可以解决这个崩溃问题。
我上传了一个示例项目:https://github.com/basvankuijck/SampleProjectFirebaseCrash。
删除 SwiftPM Promises 依赖项不是一个选项,因为实际项目正在使用对 Promises 具有依赖项的 SwiftPM 依赖项。
Podfile并没有那么花哨,SampleProject 仅使用一个SwiftPM 依赖项。
谁知道如何让 SwiftPM 和 CocoaPods …
我正在运行 Xcode 13.1 / Swift 5.5.1。
我有一个包,里面有一些单元测试;该Package.swift文件使用swift-tools-version:5.5.
当我从 CLI 构建和测试我的包时,如下所示:
$ swift test --xunit-output results.xml
Run Code Online (Sandbox Code Playgroud)
测试运行并通过(大约有 20 个),但没有 XML 输出文件写入我的当前目录。
我是否错误地使用了此命令行选项,或者此功能不起作用?
我正在 Swift 中开发一个命令行应用程序,它将调用来swift初始化包、编译东西、测试东西等。我正在使用 swift 包管理器和 Xcode。在我的工具中,我swift从Process. 如果我从命令行运行我的工具,那么效果很好。但是,如果我从 Xcode 运行我的工具,一些奇怪的事情会打印到标准错误中。特别是,我得到
Failed to open macho file at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift for reading: Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)
是什么原因造成的?有什么方法可以避免它,或者我可以不从 Xcode 运行/测试这个实用程序吗?
以下是重现步骤:
mkdir XcodeRedirectionTest
cd XcodeRedirectionTest
swift package init
open Package.swift
Run Code Online (Sandbox Code Playgroud)
然后在 中Tests/XcodeRedirectionTestTests/XcodeRedirectionTestTests.swift,粘贴
Failed to open macho file at /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift for reading: Too many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)
在 Xcode 中测试失败并显示
file://.../XcodeRedirectionTest/Tests/XcodeRedirectionTestTests/XcodeRedirectionTestTests.swift: test failure: XcodeRedirectionTestTests.testExample() failed: XCTAssertEqual failed: ("2021-05-18 19:43:18.084463-0400 swift[2836:4100702] Failed to open macho file …Run Code Online (Sandbox Code Playgroud)