在本地和远程使用CocoaPods分发框架

在本教程中,我们的重点是创建一个框架,然后在本地和远程在我们的应用程序中使用。

框架是分层目录,它将共享资源(例如动态共享库,nib文件,图像文件,本地化字符串,头文件和参考文档)封装在一个程序包中。 多个应用程序可以同时使用所有这些资源。 系统会根据需要将它们加载到内存中,并在可能的情况下在所有应用程序之间共享资源的一份副本。

框架的好处

  1. 代码/功能模块化
  2. 在多个应用程序之间共享代码
  3. 在多个应用程序之间共享资源
  4. 作为第三方库分发
  5. 最适合并行工作的团队

为iOS创建框架

在Xcode中,选择File> New Project创建您的项目>在Framework&Library部分中,选择Cocoa Touch Framework>单击Next>输入产品名称“ MyFramework ”,如图1所示>单击Next>选择Location> Create。

Framework已创建,如图2所示,名称为MyFramework

框架的责任是从服务器获取数据并随数据一起返回给使用者。 让我们创建一个swift文件从Xcode中,选择File> File> Swift File> APIRequestLoader > Create

如图3所示,我们完成了框架代码。 要使用此框架,客户端需要提供符合APIRequest协议的对象,在该对象中,它使用预期的请求和响应数据类型实现make和parseResponse方法。

生成框架项目,以确保在没有生成警告或错误的情况下获得成功的生成

至此,我们创建了框架。 现在创建一个消费者项目。

选择“文件”>“新建”>“项目”>“在应用程序”部分中,选择“单视图应用程序”,然后单击“下一步”>在出现产品名称的对话框中: Consumer >“下一步”>“创建”。
如图4所示,我们创建了一个消费应用程序,它将使用我们的框架服务。

使用拖放来消费框架

转到MyFramework项目>右键单击Products文件夹下的MyFramework.framework >单击在Finder中显示。 这将重定向框架的位置

现在打开Consumer应用程序,并将框架拖放到项目中。 确保检查是否需要复制项目,以便文件实际复制到新项目中,而不仅仅是添加引用,如图6所示。

如图7所示,将框架放入项目中。 它已添加到“链接框架和库”部分。 通过选择框架从本节中删除它,然后点击减号

现在点击Embedded Binaries上的加号并添加框架,如图8所示。

如图9所示,现在添加了MyFramework.framework 。 在“ Embedded Binaries部分添加框架会将其也添加到“ Linked Frameworks and Libraries部分

如图10所示,我们通过执行以下步骤来消耗我们的框架

  1. 首先,我们import MyFramework 。 就像导入Foundation API一样,如果不导入它就无法访问Framework api。
  2. 我们在框架中使用了APIRequestLoader类api和框架所需的数据。 初始化类时,它将执行网络调用并解码模型(MyGitHub)中的数据。

使用本地CocoaPods的消费框架

CocoaPods是iOS项目中流行的依赖项管理器。 这是用于管理依赖关系和版本控制的工具。

首先按照链接中的说明安装cocoapods

如果您只是进入,可以下载项目 回购 包含 Framework(MyFramework)项目和Consumer应用程序项目(Consumer_Part1_Starter)。

打开下载的项目文件夹,如图11所示。

打开终端并转到MyFramework文件夹的根目录,如图12所示,然后运行以下命令


播客规范创建MyFramework

应该创建MyFramework.podspec 。 在任何文本编辑器中打开文件。 将其替换为如图13所示的代码并保存。

Pod规范描述了Pod库的版本。 它包括有关应从何处获取源,使用哪些文件,要应用的构建设置以及其他常规元数据(例如其名称,版本和说明)的详细信息。

name →荚的名称

version →Pod版本

platform →规范应指出支持库的平台和相应的部署目标。

source →应该从中检索库的位置。

至此,我们的框架已配置完毕。 现在打开Consumer应用程序项目,并删除上一节中添加的框架。 右键单击框架>选择Delete> Move to Trash,如图14所示。构建项目,您将看到错误No such module 'MyFramework'. 在下一步中,我们将通过使用Pod在本地安装框架来解决此问题

打开终端并转到Consumer应用程序的根文件夹,然后运行以下代码。 这将创建一个Podfile,如图15所示。如果您从未使用过pod,请按照本教程进行操作。

 荚初始化 

Podfile是一种规范,描述了一个或多个Xcode项目的目标的依赖关系

如图16所示,将podfile代码替换为podfile代码。在此文件中,我们说Consumer应用程序需要MyFramework作为此项目的依赖项,并且提供了本地路径来查找依赖项。

打开终端>转到Consumer应用程序的根文件夹(创建Podfile所在的级别)>运行以下命令,如图17所示

 吊舱安装 

至此,我们已经配置了MyFramework的依赖项。 首先关闭Consumer应用程序,然后打开Consumer.xcworkspace. 运行项目,现在我们的应用程序可以正常运行了。

使用此命令,您正在搜索CocoaPods存储库并下载任何与Podfile条件匹配的新的或更新的Pod。 它还解决所有依赖关系,更新Xcode项目文件,以便它知道如何构建和链接Pod,以及执行任何其他所需的配置。

如图18所示,现在添加了我们的依赖项,您还可以看到源代码和框架扩展文件

至此,我们建立了我们框架的本地存储库。 现在打开MyFramework项目,并添加新方法,该方法将返回硬编码数据,如图19所示MyFramework您将看到Build Succeeded

打开Consumer.xcworkspace. 您将看到可以立即访问此方法,如图20所示。

使用远程存储库分发框架

本节将引导您将Pod发布到GitHub,并像第三方框架一样使用它。

在github上创建了MyFramework存储库,如图21所示

将项目克隆到一些空文件夹

MyFramework项目内容移动到克隆存储库文件夹中

提交并推送代码之前。 首先用以下代码替换MyFramework.podspec代码。 我们将源URL从本地替换为远程。 现在,我们告诉podspec应该从中检索库的位置,如图24所示。

如图25所示,我们将代码推送到我们创建的存储库中

我们按下了标签,如图26和27所示。正如我们在MyFramework.podspec.指定的MyFramework.podspec.

打开消费者应用程序podfile然后将pod(相关性)URL从本地替换为远程。

打开终端并转到Consumer应用程序目录的根文件夹,然后运行以下代码

 吊舱更新 

现在如图29所示,它是使用podfile中指定的标签从远程git repo提取的

有用的链接

https://www.raywenderlich.com/5109-creating-a-framework-for-ios

https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html

https://zh.wikipedia.org/wiki/Convention_over_configuration

https://guides.cocoapods.org/syntax/podspec.html

下一个

在下一部分中,我们将看到如何为需要其他库作为依赖项的库配置cocoapods