iOS:带有CocoaPods的伞框架

本文将教您如何通过CocoaPods分发iOS私有的伞式框架。

目录

1.简介
2.创建具有依赖关系的框架
3.创建一个Pod伞框架
4.分配豆荚
5.集成雨伞盒

介绍

在我以前的项目之一中,我特别需要创建一个包含两个以上框架的框架。 目标是尽可能隐藏这两个子框架的使用。
然后,所有内容都必须作为私有且封闭的Pod发布。

框架不过是一组可以重用的方法和逻辑。 框架是封闭的 ,因此无法读取源代码,只有定义为openpublic的方法和类可见并且可以调用。

在Apple开发环境中,一个框架与另一个框架的合并称为“ Umbrella ”。 这种类型的框架旨在隐藏某些子框架的使用,从而促进其使用。

在继续进行此冒险之前,很高兴知道苹果并未正式支持iOS的Umbrella Frameworks,确实引用了官方文档:

不要创建伞框架。

尽管可以使用Xcode创建伞形框架,但是对于大多数开发人员而言,这样做是不必要的,因此不建议这样做。 苹果使用伞形框架掩盖了操作系统中库之间的某些相互依赖关系。 在几乎所有情况下,您都应该可以将代码包含在单个标准框架包中。 或者,如果您的代码具有足够的模块化,则可以创建多个框架,但是在那种情况下,模块之间的依赖关系将是最小的或不存在,因此不应保证为它们创建保护伞。

https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html“ Apple文档”

遵循本指南,您将创建一个带有CocoaPods依赖项的子框架,这是一个伞形框架,该框架将子框架与CocoaPods的其他依赖项结合在一起。
然后,您将所有内容发布为私有和封闭的pod,最后,我们将所有内容集成到测试项目中。

创建具有依赖关系的框架

第一步,我们创建带有他的依存关系的子框架。 就我而言,这是一个cocoapod供应的框架,因此我不必创建它。

让我们从创建一个新的Cocoa Touch Framework开始

下一步是创建跨平台聚合目标

聚合目标没有关联的产品,也没有构建规则。

您可以使用构建子框架所需的依赖关系定义Podfile,然后可以执行以下操作:

 吊舱安装 

对于此示例,Podfile如下:

添加以下代码:

这种结构将使您可以将源除以归档框架所需的项目划分。 当您创建两个podspec时,这将非常有用,一个用于发布供应商的框架,另一个用于发布开放式框架,非常适合测试。

现在到了在项目中创建正确的连接并使所有工作正常进行的时候了。

Sources文件夹和Subframework.framework添加到项目中。

然后导航到目标伞的“构建阶段设置”,并添加一个“ 新复制文件阶段”

确保Subframework.framework出现在以下字段中:

  • 将二进制文件与库链接
  • 复制捆绑包资源
  • 复制文件 ,将目标设置为Frameworks,并使用活动代码签名

最后,始终在“伞”目标的“构建阶段”中,确保将头文件正确设置为public:

在Classes文件夹中创建一个新的Swift文件,您将在其中编写示例函数:

雨伞示例类

此功能将调用子框架的示例功能,并在完成后打印“雨伞打招呼”。

现在,您可以对项目进行最终存档了。
选择聚合目标 ,作为目标设置物理设备通用设备,然后开始构建。 如果一切顺利,请在项目脚本中指定的Umbrella目录中找到包含Sub-framework的新Umbrella Framework

恭喜你! 🎊

您已经可以使用新框架,但是如果要使其成为Pod,请继续下一节。

分配豆荚

在更改pospecs以准备发布之前,您需要将框架上载到某个主机。
在我的项目中,我使用了firbase存储 ,但是还有其他有效的选项,例如bitbucketgitlabgithub

您需要托管的是一个包含Umbrella.frameworkLICENSE.TXT文件的zip文件。
使用与框架不同的名称来命名zip,例如,可以将其命名为UmbrellaFramework.zip而不是Umbrella.zip

通过维护指示框架版本的文件夹的结构,将zip文件加载到主机中,其中包含一个包含框架和许可证的zip文件。

像这样:

  /1.0.0/UmbrellaFramework.zip 

现在是时候填充两个podspec文件了。

您必须创建的第一个podspec是用于开发环境的。
然后它将引用您在其中创建了伞形框架的git url。
打开位于项目根目录中的podspec文件,然后在其中复制:

雨伞测试Podspec

使用您的项目信息更新podspec

相反,将用于实际分发的podspec是位于Umbrella子文件夹中的podspec

将其打开并复制到其中:

雨伞分布Podspec

同样,在这种情况下,您需要使用项目信息来更新podspec ,而不是放置项目的git地址,而要放置将托管已编译和压缩框架的地址。

对于每个版本,请记住正确更新您的podspec,并将新的zip上传到正确的文件夹。

您已经快完成了,现在您需要创建一个repo git,在这里将Podspec发布给希望能够安装您的框架的任何人。

我在私有仓库中使用了GitHub,但是即使在这种情况下,您也可以使用任何喜欢的git工具。

我称之为UmbrellaSDK,您可以选择任何喜欢的名称。 创建完成后,您需要在终端中执行一些步骤:

 吊舱回购添加[REPO_NAME] [SOURCE_URL] 
 吊舱回购推送[REPO_NAME] [POD_NAME] .podspec-允许警告-跳过测试 

哪里:

  • REPO_NAME :您要用来识别您的回购协议的名称,我使用了Umbrella
  • SOURCE_URL :是您刚创建的仓库的URL
  • POD_NAME :是您用于podspec的广告连播的名称,在本例中为Umbrella。
  • – -allow-warnings :在推送podspec之前,CocoaPods执行一次皮棉以验证一切正确,并通过此标志告诉您允许警告,我将其加快了测试速度。
  • – -skip-tests :在这种情况下,我也加了标志以加快测试速度,在生产环境中最好删除它并让CocoaPods运行它的测试。

如果您的推送仓库成功,那么您已经完成发布,可以将所有内容集成到测试项目中了。

再次恭喜! 🎊

集成雨伞盒

从Xcode创建一个新项目,您将在其中测试新发布的框架。

要安装Umbrella框架,需要对项目的Podfile进行一些更改。

如果您尚未在项目上初始化CocoaPod,请打开终端,然后在项目的根目录中输入:

 荚初始化 

此时,您的项目中已有一个Podfile。 打开它:

 打开Podfile 

podfile已经提供了一个起始模板,请使用以下代码行覆盖该模板:

雨伞整合Podfile

用您在上一节中创建的git存储库替换正确的Umbrella 来源很重要。
其次,请记住使用在项目模式中定义的Application目标重命名“ Your_Target ”。
保存Podfile并关闭它。

如果要使用本地容器而不是使用在线发布的供应商框架 ,则在代码注释中将找到正确的代码。 在Umbrella项目的根目录中,将正确的路径写入podspec

仍然缺少一件事:您需要添加将脚本签名传播到所有Umbrella框架和子框架的签名脚本

在终端中输入:

 触摸sign.sh 
chmod 777 sign.sh
打开sign.sh

在刚刚打开的脚本文件中,复制以下行:

签名脚本

如果框架名称不同,请替换。 保存脚本并关闭它。

此时,您可以安装Umbrella框架。 在终端中输入:

 吊舱安装 

安装完成后,打开新的Workspace,即可使用Umbrella框架。
您只需要添加文件:

 进口雨伞 

现在,您可以享受全新的私人出售的Pod伞框架 😎。