你可以在 iOS 应用程序中使用 Package.swift 而不是使用 .xcodeproj 吗?

Posted

技术标签:

【中文标题】你可以在 iOS 应用程序中使用 Package.swift 而不是使用 .xcodeproj 吗?【英文标题】:Can you use Package.swift in an iOS app instead of using .xcodeproj? 【发布时间】:2020-05-21 19:26:37 【问题描述】:

我一直在使用 File -> Swift Packages -> Add Package Dependency 将 Swift 包依赖项添加到我的 ios 应用程序项目中。但是可以改用 Package.swift 吗?我以为我可以放入一个 Package.swift 并且它会开始使用它来解决我的包。我也在使用 Cocoapods,所以无法生成新的 xcodeproj 文件。

【问题讨论】:

不,你不能在没有 Xcode 项目的情况下使用 Swift Packages for iOS 应用程序,例如代码签名需要它——SwiftPM 不能这样做。 对,这就是我想做的。我仍然想给我们一个 xcodeproj,但我想用 Package.swift 清单管理 Swift 包依赖项,而不是 xcode 中的交互式包编辑器。 那么你可能会在你的 Xcode 项目中添加一个新的 Swift 包,并在这个包的 Package.swift 中声明你所有的依赖项,但我不确定如何使用 CocoaPods 来实现它。 【参考方案1】:

要使用 Package.swift 文件管理项目的 swift 包依赖项,您应该执行以下步骤:

    创建一个包含您的项目的工作区(如果您没有) 创建空的 swift 包,例如项目文件夹中的“依赖项” 将包添加到您的工作区(只需使用 swift 包拖放文件夹) 将项目目标与“依赖项”链接:“构建阶段 -> 将二进制文件与库链接” 将您的依赖项添加到 Package.swift:
let package = Package(
    name: "Dependencies",
    ...
    dependencies: [
        .package(url: "https://github.com/username/SwiftPackage.git", .exact("1.1.0")),
    ],
    targets: [
        .target(
            name: "Dependencies",
            dependencies: ["SwiftPackage"]),
        ...
    ]
)

现在编辑 Package.swift 文件后,所有 swift 包依赖项都会自动在您的项目中可用。

更新

第二个非常稳定的选项可以将 Dependencies swift 包添加到您的项目中:

    创建一个空的 swift 包,例如项目文件夹中的“依赖项”。 将您的依赖项添加到 Package.swift(见上文)。 在“Dependencies”文件夹中创建一个本地git存储库,并将所有文件提交到master。 通过提供完整路径file:///Users/.../Dependencies(XCode 仅允许通过完整路径添加)并将其指向master 分支,在项目设置的“Swift Packages”选项卡中添加“Dependencies” swift 包。 如果您需要使用相对路径,只需执行下一个技巧:在 project.pbxproj 文件中手动将 XCRemoteSwiftPackageReference > repositoryURL 值更改为 file://Dependencies,然后您可以看到:

注意:每次更改 Package.swift 文件中的依赖项后,您需要将所有更改推送到 master 以允许您的项目看到它们。

【讨论】:

我试图避免将软件包直接添加到 xcodeproj,因为它似乎非常不稳定并且已经给我带来了一段时间的问题。 “Swift 包依赖项”部分(远程包)中列出的包总是可以完美运行。我的解决方法是远程创建一个新分支,将更改推送到该分支,并将应用程序的包依赖项指向该分支。但我宁愿有一个可以用 Swift 编写并使用的 Package.swift 清单文件。 您也可以使用本地 git 存储库,而不是推送到远程。将一组完整路径添加到您的 swift 包文件夹,例如file:///Users/.../Dependencies(XCode 只允许通过完整路径添加)。并且在创建相对路径的技巧之后:在您的project.pbxproj 文件中将XCRemoteSwiftPackageReference > repositoryURL 的值更改为file://Dependencies 我想这就是这样做的方法。不幸的是,您必须删除远程引用并将其替换为项目文件中的本地引用,但这可以满足我的需要。如果你把它作为一个答案,我会奖励赏金。

以上是关于你可以在 iOS 应用程序中使用 Package.swift 而不是使用 .xcodeproj 吗?的主要内容,如果未能解决你的问题,请参考以下文章

IOS模拟器怎么安装应用程序

iOS,Xcode11,解决“could not inspect application package” 导致的无法真机器运行

发布delphi程序(build with runtime package)要带哪些文件?

使用 Swift Package Manager 将 Google Firebase Admob 添加到 iOS 项目 [关闭]

使用 package.json 在全局和本地安装依赖项

如何在 Oracle MAF 应用程序中使用 iOS 钥匙串?