我如何编写和发布Swift库以从Scratch下载数据

VolexDownloader为Swift 3

动机:😇

好吧,我一直很热衷于编写一段可以以某种方式帮助他人的代码。 我曾经写一些小应用程序来解决一些琐碎的问题,但是后来我决定写一个对其他开发人员而不是最终用户真正有用的低级API。

想法:💡

大多数应用程序的任务是以一种或另一种方式从Internet或Intranet下载数据。 每次都是同一段代码或创建一个请求,设置会话,创建任务,更不用说管理下载的内容了。 为什么不编写为您处理所有这些事情的一键式API,以便您可以专注于重要的事情,例如处理实际下载的数据。

它能做什么? 💪🏼

  • 它具有以下模式:

使用用户界面:

  • VeloxDownloader带有内置的下载视图,该视图显示下载进度,并且当前可以停止任何下载。
  • 通过此API,您可以控制是否要为任何特定文件下载启用后台下载。

没有UI:

  • 该API使用Swift闭包来返回下载进度,剩余时间和下载的完成状态。 您可以使用此信息来满足您的需求,甚至可以构建自己的下载进度GUI。
  • 该API还允许您为任何特定文件下载启用或禁用后台下载。

设计与代号:🙇🏼

好吧,我在网上环顾四周,并从现有的图书馆中获得了一些动力。 它们要么是用Obj-c编写的,要么仅提供了一个特定的用例。 我想结合所有这些实现,以提供您只需调用的多合一产品即可为您完成工作。 在这种情况下,您只需给它提供文件url,然后它将在特定位置为您下载。

  • 我首先考虑了文件的生命周期。 有关持久性和删除下载文件的设计决策。 库检查temp和应用程序缓存目录中的命名冲突,并相应地删除和/或覆盖。
  • 接下来考虑的是下载以及开发人员选择的各种模式。 实例化了URLSession并根据下载的前台与后台进行了正确的配置。
  • 完成上述设置后,在Xcode控制台上的日志中产生了正确的结果后,我继续使用UI并创建了自定义tableView来显示下载活动。 我选择为此创建xib,因为我知道将来必须将其作为库发布。 为单元格创建了一个xib,为tableView本身创建了一个xib。
  • 然后是将下载逻辑链接到我各自的视图控制器的任务。 好吧,长话短说,我使用协议和通知来实现这一目标。 我的下载程序类发布了有关通过协议和通知下载的文件状态的更新,我的UI类根据下载开始,完成或被用户停止更改了UI组件。

Github🐙

我创建了所有源代码并将其提交到Github中。 我以前从未以库的形式发布过它,所以我不得不重新格式化我的项目结构。

  • 我将所有文件(.swift和.xib)合并在一起,这些文件将成为我的库的一部分。 你可以在这里查看
  • 我创建了一个问题,将所有提供我链接的媒体插入到我的项目自述文件中以显示gif和图片。
  • 一旦我认为我的实现成功,就从开发分支创建了一个pull请求,将所有更改合并到master中。
  • 我通过克隆项目并运行它进行了快速检查。 中提琴,一切似乎都正常。 此时,我创建了一个发行版,并为其指定了版本号。

椰子足🍫

这很容易成为整个旅程中最困难的部分。 部分原因是因为我以前没有发布过Pod,但从中学到了很多。 以下是重要的痛点:

  • 创建一个podspec文件。 这是Pod脚本读取的文件,以了解有关项目的所有信息。 它由您的项目在github上的位置,在cocoapods.org上创建相应的pod版本的版本号,源文件所在的位置,源文件的扩展名等组成。
  • 我只需要假设Cocoapods.org上提供的详细信息对于像我这样的初学者来说就足够了,但是如果需要像我这样的人,我仍然会继续详细介绍整个过程。
  • 确保您的系统上安装了cocoapod。 如果您不确定,请按照以下步骤开始操作。
  • 接下来,通过在终端中运行以下命令,将自己注册到cocoapods.org:
  • pod trunk register email 'Your Name'
  • 现在该创建一个podspec文件。 我将遍历我创建的podspec文件,以了解最重要的部分。 您可以将podspec文件放在xcode项目的主目录中。 可在此处找到VeloxDownloader的Podspec文件
  • 根据我的说法,podspec中的重要字段:
  • s.version = "1.6" :这是您在Github上发布的版本。 您可以转到github上的发布部分,并为您的发布提供标签/版本号。
  • s.source = { :git => "https://github.com/nitinsh99/VeloxDownloader.git", :tag => s.version} :这是cocoapod网站如何获取有关您项目的所有元数据,包括源文件。
  • s.source_files = "VeloxDownloader/SourceFiles/*.swift" :这将告诉pod脚本创建一个库需要编译哪些文件。 这就是为什么我合并所有需要包含在库中的文件,并将其放在项目内名为SourceFiles的文件夹中的原因。 您会发现我没有在其中放入视图控制器或appdelegate。 只有第三方需要使用我的库的文件。
  • s.resource = [ "VeloxDownloader/SourceFiles/*.xib" ] :Cocoapods需要您在此行下声明所有资源文件,例如xib,images等。 注意,我给了文件夹地址和文件扩展名。 我这里没有任何图像,但是如果您这样做,那么这里是您需要提及的地方。
  • 就是这样! 如果填写所有这些详细信息,则以下命令应该成功。 您可以在终端上的计算机上针对podspec文件的本地副本运行此命令。 我一直运行此命令,直到修复所有错误。
  • pod spec lint YourProject.podspec
  • 最后,当以上命令成功执行时,您可以将podspec推送到cocoapod中继。 以下命令将发布您的项目,并为您提供链接在cocoapods.org上的发布位置。
  • pod trunk push YourProject.podspec

用法:💻

  • 可以使用CocoaPods安装VeloxDownloader。 只需将以下行放入PodFile并从终端运行pod update 。 同样适用于您的项目,如果trunk push命令成功执行,则任何人都可以使用如下所示的行导入正确的Pod名称和版本号来导入Pod。
  • pod 'VeloxDownloader', '~> 1.6'

结论:❤️

希望本文能对整个快速图书馆中推动cocoapods流动的人有所帮助。