原文
如果你曾经试图创建自己的iOS框架,但是其中有诸多不便-管理依赖和编写测试不方便,本教程将引导您从头到尾创建您的第一个iOS框架,以便您可以创建一个自己的。
我们将构建一个框架,暴露一个名为RGBUIColor(red:green:blue)的函数,该函数返回根据这些值创建的新UIColor。 我们将使用Swift构建它,使用Carthage作为依赖项管理器。 我们的框架将使用Carthage,CocoaPods或git子模块。
开始吧!
设置Xcode项目
- 选择 File → New → Project.
- 选择 iOS → Framework & Library→Cocoa Touch Library
- 点击 “Next” 并填写选项提示. 确定选中了 “Include Unit Tests” 复选框
- 选择您要保存项目的目录。
- 取消选中“Create Git repository on My Mac”,之后手动设置
- 单击“Create”,项目将在Xcode中打开。
- 点击File→ Save As Workspace,将workspace文件和xcodeproj文件保存在同一目录下,使用相同的名称。 我们把项目放在一个工作空间,因为我们将添加我们的Carthage依赖作为子模块; 它们必须位于Xcode的工作区中才能构建它们。
- 关闭项目
- 打开workspace
- 选择“Manage Schemes”,勾上后面的“shared”
然后打开终端
初始化Git
cd到你的项目目录
- 运行
git init
初始化一个空的存储库。 - 创建一个.gitignore将会阻止一些讨厌的Xcode和依赖文件,我们不想在git中跟踪。
这里有一个标准的Swift项目.gitignore与几个修改。 我们添加了.DS_Store并删除了fastlane和额外的注释。
## OS X Finder
.DS_Store
## Build generated
build/
DerivedData
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
## Other
*.xccheckout
*.moved-aside
*.xcuserstate
*.xcscmblueprint
## Obj-C/Swift specific
*.hmap
*.ipa
# Swift Package Manager
.build/
# Carthage
Carthage/Build
添加Carthage和依赖关系
- 在项目目录中创建一个名为Cartfile的文件和它的运行时依赖关系。 我们将添加Curry。
github "thoughtbot/Curry"
github "Quick/Quick"
github "Quick/Nimble"
创建 bin/setup
脚本。 它用于给我们的贡献者(和我们)一个简单的方法来设置项目和依赖。
mkdir bin
touch bin/setup
chmod +x bin/setup
打开bin/setup
并填写:
#!/usr/bin/env sh
if ! command -v carthage > /dev/null; then
printf 'Carthage is not installed.\n'
printf 'See https://github.com/Carthage/Carthage for install instructions.\n' exit 1
fi
carthage update --platform iOS --use-submodules --no-use-binaries
在这个脚本中,我们确保用户已安装Carthage 并运行carthage update
命令来安装iOS依赖项。
我们使用--use-submodules
,以便我们的依赖关系作为子模块添加。 这允许用户在Carthage之外使用我们的框架,如果他们想要的话。 我们使用--no-use-binaries
,以便我们的依赖关系建立在我们的系统上。
使用bin/setup
创建,让我们运行它,以便Carthage将下载你的依赖。
- 打开终端运行
bin/setup
现在我们需要设置你的项目来构建和链接新的依赖项。
向工作区添加依赖关系
因为我们的依赖是子模块,我们需要将它们添加到我们的工作区。
打开Carthage/Checkouts
,并将每个依赖项.xcodeproj
添加到工作空间的根目录。 他们可以从Finder拖动到Xcode项目的导航器。
当你完成它应该看起来像:
链接运行时依赖关系
- 在导航器中选择“RGB”,并在中间侧边栏选择“RGB”目标,选择“构建阶段”选项卡并展开“链接库二进制文件”部分。
- 单击“+”图标,并从
Curry-iOS
目标中选择Curry.framework
。 - 单击“Add”
链接开发依赖
- 从中间侧边栏选择“RGB测试”目标。
- 使用与之前相同的过程,将Quick和Nimble框架添加到此目标的“Link binary with libraries”部分。
当向每个目标添加依赖项时,Xcode会自动将它们添加到“Build Settings”选项卡下的“Framework Search Paths”。 我们可以从“RGB”和“RGBTests”目标中删除这些,因为Xcode将它们视为隐式依赖关系,因为它们在同一个工作空间中。 - 选择目标,找到“Framework Search Paths”设置,突出显示它,然后按键盘上的“backspace”。
- 接下来,在导航器中查看“RGB”项目; 你会看到在根级别有三个新框架。 要保持此区域的组织,突出显示所有三个,右键单击并选择“New group from selection”将它们放在命名组中。 我会调用我的“Frameworks”。
现在Carthage已经设置好了,让我们添加CocoaPods。