gpt4 book ai didi

ios - 在闭源 Swift 框架中嵌入框架

转载 作者:可可西里 更新时间:2023-11-01 03:32:10 24 4
gpt4 key购买 nike

我们公司想向我们的客户分发适用于 iOS 的闭源 SDK。我一直在使用 Cocoapods 来构建框架并构建了一个使用它的示例应用程序。以前,该应用程序在模拟器上以及在设备上部署时都运行良好。但是,我还在应用程序本身中嵌入了 Pods.framework 文件。另一条可能感兴趣的信息是该框架是用 Swift 编写的,包含的 cocoapods 依赖项是 Swift 和 Objective-C。

我想让 pod 需求更易于管理,这样用户就不需要关心它们,并尝试将 Pods.framework 文件嵌入到我们正在构建的 SDK 中 - 所以我删除了 < strong>Embed Pods Frameworks 和 Copy Pods Resources 来自示例应用程序,仅将它们留在框架中,我还删除了 Pods.framework 作为示例应用程序的依赖项,仅将其保留在开发工具包。这似乎在模拟器中有效,但该应用程序现在在移动设备上崩溃并出现 dyld: Library not loaded 错误。

在研究它时,我无意中发现了一些相关的讨论: https://github.com/CocoaPods/CocoaPods/issues/344 https://objectpartners.com/2014/06/25/developing-private-in-house-libraries-with-cocoapods/

但是,建议的使用私有(private) pod 的解决方案看起来并不适合我们,据我了解,私有(private) pod 中的源代码仍然是开放的,我们无法与客户共享。

有人可以建议在这种情况下可行的解决方案吗?

最佳答案

好吧,我终于有了一个更持久的解决方案。它是我的旧版本的修改后的更干净的版本,现在我了解了 Xcode 如何更好地链接到我的 Swift 子框架中

使分发/编译有点难看的问题:

由于 Swift 标准库没有像 Obj-C 那样捆绑在设备上,也不能保证它们在版本之间是稳定的(Swift 3 中 promise 的稳定二进制接口(interface):https://github.com/apple/swift-evolution#development-major-version--swift-30)我们必须确保整个项目是针对相同版本的 Swift 编译的。这意味着使用你的闭源框架的人必须在他们的项目中使用与你编译库时相同版本的 Swift,即使他没有在他的代码中使用 Swift,因为最终是他的 Swift 版本被捆绑到应用程序中,并且您的 SDK 会运行。这只是闭源框架的问题,因为开源框架将始终针对与最终项目相同的版本进行编译。可能的解决方法是将客户端限制为您使用的相同版本或分发多个编译(即 Swift 2.1 和 Swift 2.0)。为了解决这个问题,您可以为用户提供针对多个 Swift 版本编译的二进制文件的副本。

除此之外,以下是我在编译/分发期间必须做的事情,以制作一个在 Swift 中运行的二进制框架:

构建框架时:

  • 在项目目标中,确保将 Pods.framework 添加到 Linked Frameworks and Libraries(确保这是 Pods.framework 的预编译 RED 版本,我在同一目录中有一个黑色编译的 Pods.framework,它构建良好,但随后导致一个框架会导致项目在后期项目的链接器阶段提示缺少 armv7 架构)
  • 在 Build Settings 的 User-Defined 部分下,添加一个名为 BITCODE_GENERATION_MODE 的字段并将其设置为 bitcode
  • 不要 #import 桥接 header 中的任何框架,所有告诉您这样做的说明都是 Swift 1.0-1.2 天遗留下来的,您不再需要它了,它的危害比good(后面的项目会提示找不到这些连它都没有暴露的header)
  • 将构建目标更改为Generic iOS DeviceArchiveExport 框架

使用框架构建项目时:

  • 将框架拖放到项目中,在 General 选项卡中将其添加到 Embedded BinariesLinked Frameworks and Libraries(您只需要添加框架本身,而不是子框架或 pod 文件)
  • 在build设置选项卡中,将新路径添加到框架搜索路径:$(PROJECT_DIR)/MyFramework.framework/Frameworks
  • 构建项目

关于ios - 在闭源 Swift 框架中嵌入框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33796065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com