从零开始,打造自己的首个 iOS 框架

431 查看

如果你曾试图创建自己的iOS框架,你知道这不是一个头脑发热作出的决定 — 管理依赖以及写测试用例一点也不简单。本教程将会带你从头到尾创建你的第一个iOS框架,让你可以创建自己的框架。

我们将在框架暴露一个名为 RGBUIColor(red:green:blue) 的函数,这个函数根据参数返回一个新的UIColor。我们将使用 Swift 创建它,并使用 Carthage 作为依赖管理器。在 Carthage、CocoaPods 或者 git submodules 中都可以使用我们的框架。

让我们开始吧!

设置 Xcode 工程

  • 选择 File → New → Project。
  • 在左边栏选择 iOS → Framework & Library,然后在右侧选择 “Cocoa Touch Library”。
  • 点击“Next”并且填写弹出的选项。确保勾选了“Include Unit Tests”复选框。

CFo5I571SMWDTllrhfQW_Project Options

  • 选择工程的保存位置。
  • 取消选择“在我的 Mac 上创建 Git 版本库”,我们稍后将手动创建它。
  • 点击“创建”,工程将在 Xcode 中打开。
  • 转到File → Save As Workspace,使用同样的名字将你的 Xcode 工程保存到相同的路径下。我们之所以将工程放到工作区中,是因为我们将把Carthage依赖作为子模块加入进来;Xcode必须确保它们在一个工作区中才能 build 它们。
  • 用 File → Close Project 关闭 Xcode 工程。
  • 用 File → Open 打开工作区。
  • 点击 Xcode 左上方的 scheme 并选择“Manage Schemes”。我们需要将我们的 scheme 标记为“shared”,以便工程可以用Carthage构建
  • 定位到“RGB”scheme,选中“Shared”复选框然后点击“Close”。

J1T3GfyKSBed3XmQDMZR_Manage Schemes

让我们移步到终端去。

初始化 Git

首先,导航到你存储工程所在的目录。

  • 运行 git init 来初始化一个空的版本库。
  • 创建一个.gitignore,将我们不希望在git中追踪的一些讨厌的Xcode文件和依赖文件排除出去。

这里是一个稍作修改的,Swift工程使用的标准的.gitignore文件。我们增加了.DS_Store,并删除了fastlane和多余的注释。

添加 Carthage 和依赖

  • 在你的工程目录下创建一个名为 Cartfile 的文件,并添加运行时依赖。我们将添加 Curry
  • 创建一个 Cartfile.private 文件。它将包含私有的依赖,例如我们的测试框架。我们将使用 Quick 和 Nimble
  • 创建一个 bin/setup 脚本。它用来给我们的贡献者(以及我们)一个简单的方法来设置工程以及依赖。
  • 打开 bin/setup,写入如下内容:

在这段脚本中,我们确保用户安装了Carthage,并且运行它的 update 命令来安装iOS依赖。

我们使用了 --use-submodules 已使我们的依赖作为子模块被添加进来。这样当用户希望脱离 Carthage 的时候,也能使用我们的框架。我们使用 --no-use-binaries,这样我们的依赖就是在我们的系统上 build 的。

bin/setup创建好之后,让我们运行它,以便Carthage下载我们的依赖。

  • 在终端中运行 bin/setup

现在我们需要设置我们的工程,来构建和链接新的依赖。

向工作区添加依赖

因为我们的依赖是一些子模块,我们需要把他们添加到我们的工作区。

打开 Carthage/Checkouts,然后把每一项依赖的.xcodeproj 添加到工作区的根目录。可以把他们从 Finder 拖入 Xcode 工程的导航器。
当你完成之后,导航器应该看起来像这样:
rBQNmPf2QiOkafIz30XK_Add Subprojects

  • 在导航器中选择“RGB”并且在中间的工具条选择“RGB”目标,选择“Build Phases”选项卡并展开“Link binary with libraries”小节。
  • 点击“+”图标并从 Curry-iOS 目标中选择 Curry.framework
  • 点击“Add”。

rqymaJQ9Rua4r6RmBEjW_select-framework

  • 在中间的工具条选择“RGBTests”目标。
  • 使用跟上文相同的过程,在该目标的“Link binary with libraries”小节添加 Quick 以及 Nimble 框架。当我们在每个目标添加依赖的时候,Xcode 会自动将他们添加到“Build Settings”选项卡的“Framework Search Paths”中。我们可以将它们从“RGB”和“RGBTests”目标中移除,由于是在相同的工作区中,Xcode将他们看作隐式依赖。
  • Select the target, locate the “Framework Search Paths” setting, highlight it, and press “backspace” on your keyboard.
  • 选择该目标,定位到“Framework Search Paths”设置,使其高亮,然后点击键盘上的退格键。

fXCR3yrrRrGRkTZsXEOW_Search Paths

  • 接着,看一下导航器中的“RGB”工程;你将会看见根级有三个新的框架。为了保持这个区域有序,高亮所有这三项,右击并选择“New group from selection”,将它们放入一个有名字的组。我将给我的组取名“Frameworks”。
    现在 Carthage 设置好了,让我们添加 CocoaPods。

添加 CocoaPods 支持

要添加 CocoaPods 支持,我们需要在工程的根目录创建一个 .podspec 文件,并且写入我们的工程信息。

如果你曾试图创建自己的iOS框架,你知道这不是一个头脑发热作出的决定 — 管理依赖以及写测试用例一点也不简单。本教程将会带你从头到尾创建你的第一个iOS框架,让你可以创建自己的框架。

我们将在框架暴露一个名为 RGBUIColor(red:green:blue) 的函数,这个函数根据参数返回一个新的UIColor。我们将使用 Swift 创建它,并使用 Carthage 作为依赖管理器。在 Carthage、CocoaPods 或者 git submodules 中都可以使用我们的框架。

让我们开始吧!

设置 Xcode 工程

  • 选择 File → New → Project。
  • 在左边栏选择 iOS → Framework & Library,然后在右侧选择 “Cocoa Touch Library”。
  • 点击“Next”并且填写弹出的选项。确保勾选了“Include Unit Tests”复选框。

CFo5I571SMWDTllrhfQW_Project Options

  • 选择工程的保存位置。
  • 取消选择“在我的 Mac 上创建 Git 版本库”,我们稍后将手动创建它。
  • 点击“创建”,工程将在 Xcode 中打开。
  • 转到File → Save As Workspace,使用同样的名字将你的 Xcode 工程保存到相同的路径下。我们之所以将工程放到工作区中,是因为我们将把Carthage依赖作为子模块加入进来;Xcode必须确保它们在一个工作区中才能 build 它们。
  • 用 File → Close Project 关闭 Xcode 工程。
  • 用 File → Open 打开工作区。
  • 点击 Xcode 左上方的 scheme 并选择“Manage Schemes”。我们需要将我们的 scheme 标记为“shared”,以便工程可以用Carthage构建
  • 定位到“RGB”scheme,选中“Shared”复选框然后点击“Close”。

J1T3GfyKSBed3XmQDMZR_Manage Schemes

让我们移步到终端去。

初始化 Git

首先,导航到你存储工程所在的目录。

  • 运行 git init 来初始化一个空的版本库。
  • 创建一个.gitignore,将我们不希望在git中追踪的一些讨厌的Xcode文件和依赖文件排除出去。

这里是一个稍作修改的,Swift工程使用的标准的.gitignore文件。我们增加了.DS_Store,并删除了fastlane和多余的注释。

添加 Carthage 和依赖

  • 在你的工程目录下创建一个名为 Cartfile 的文件,并添加运行时依赖。我们将添加 Curry
  • 创建一个 Cartfile.private 文件。它将包含私有的依赖,例如我们的测试框架。我们将使用 Quick 和 Nimble
  • 创建一个 bin/setup 脚本。它用来给我们的贡献者(以及我们)一个简单的方法来设置工程以及依赖。
  • 打开 bin/setup,写入如下内容:

在这段脚本中,我们确保用户安装了Carthage,并且运行它的 update 命令来安装iOS依赖。

我们使用了 --use-submodules 已使我们的依赖作为子模块被添加进来。这样当用户希望脱离 Carthage 的时候,也能使用我们的框架。我们使用 --no-use-binaries,这样我们的依赖就是在我们的系统上 build 的。

bin/setup创建好之后,让我们运行它,以便Carthage下载我们的依赖。

  • 在终端中运行 bin/setup

现在我们需要设置我们的工程,来构建和链接新的依赖。

向工作区添加依赖

因为我们的依赖是一些子模块,我们需要把他们添加到我们的工作区。

打开 Carthage/Checkouts,然后把每一项依赖的.xcodeproj 添加到工作区的根目录。可以把他们从 Finder 拖入 Xcode 工程的导航器。
当你完成之后,导航器应该看起来像这样:
rBQNmPf2QiOkafIz30XK_Add Subprojects

  • 在导航器中选择“RGB”并且在中间的工具条选择“RGB”目标,选择“Build Phases”选项卡并展开“Link binary with libraries”小节。
  • 点击“+”图标并从 Curry-iOS 目标中选择 Curry.framework
  • 点击“Add”。

rqymaJQ9Rua4r6RmBEjW_select-framework

  • 在中间的工具条选择“RGBTests”目标。
  • 使用跟上文相同的过程,在该目标的“Link binary with libraries”小节添加 Quick 以及 Nimble 框架。当我们在每个目标添加依赖的时候,Xcode 会自动将他们添加到“Build Settings”选项卡的“Framework Search Paths”中。我们可以将它们从“RGB”和“RGBTests”目标中移除,由于是在相同的工作区中,Xcode将他们看作隐式依赖。
  • Select the target, locate the “Framework Search Paths” setting, highlight it, and press “backspace” on your keyboard.
  • 选择该目标,定位到“Framework Search Paths”设置,使其高亮,然后点击键盘上的退格键。

fXCR3yrrRrGRkTZsXEOW_Search Paths

  • 接着,看一下导航器中的“RGB”工程;你将会看见根级有三个新的框架。为了保持这个区域有序,高亮所有这三项,右击并选择“New group from selection”,将它们放入一个有名字的组。我将给我的组取名“Frameworks”。