GTCatalog
由约定构成的目录是一套针对 Objective-C 和 Swift "组件" 开发设计的运行时工具和约定。
概述
如果您的团队同时开发多个组件,可能会发现构建示例和单元测试涉及一些非平凡的开销
- 每个组件的 Xcode 项目的维护。
- 每个组件的示例和测试目标的维护。
- 在项目/目标/工作空间之间切换。
解决这个问题的一个方案是创建一个所谓的 "目录" 应用程序。目录的用途是在一个应用程序中演示组件集合的使用。目录应用程序降低了您团队需要与之交互的不同 Xcode 目标数量。您团队管理您的目录 Xcode 项目,根据需要添加和更新文件。
如果——不是在管理 Xcode 项目——您只需创建新的源文件并运行 pod install
会怎样呢?
通过结合约定和 CocoaPods,约定目录最小化了创建 示例 和 单元测试 的工程 overhead。简单地运行 pod install
,您的目录将包括所有示例和单元测试,只需两个易于访问的目标。
的唯一剩余的工程负担是实际编写示例和测试。
一个示例
一个示例目录位于 example/
目录中。运行 pod install 来设置它
pod install --project-directory=example/
open example/Catalog.xcworkspace
打开项目,您将找到两个目标:目录和单元测试。运行目录。
您可以在目录应用程序中浏览到单个组件的示例。
现在尝试运行单元测试。您会看到在单元测试输出中出现一个电阻测试。
Quickly introducing how to add a new example
打开以下目录
open example/components/Resistor/examples/
- 复制示例中的一个。
- 打开重复项并为该类分配一个唯一的名称。
- 更改
+catalogBreadcrumbs
路径至独一无二的值。 - 运行
pod install --project-directory=example/
并重新构建应用。 - 现在您的示例将列在电阻器类别下。
以下五个步骤描述了将新示例添加到目录的端到端过程。
添加新测试的快速介绍
打开以下目录
open example/components/Resistor/tests/unit/
- 复制任意一个测试。
- 打开重复项并为该类分配一个唯一的名称。
- 运行
pod install --project-directory=example/
并重新构建应用。 - 运行单元测试。
安装指南
本指南将向您介绍如何创建使用 CatalogByConvention 库的目录项目。
步骤 1:规划组件约定
这是最重要的步骤。这里最重要的是您必须一致地为每个组件应用约定。
让我们看看位于 example/
目录中的示例遵循的约定
components/
ComponentNameCamelCased/
examples/
SomeExample.m
src/
Resistor.h
RESClass.h
RESClass.m
tests/
unit/
SomeUnitTest.m
步骤 2:创建必要的文件/文件夹
除了 components/
目录之外,我们还会创建以下内容
- 一个
catalog/
目录。 - 一个
CatalogExamples.podspec
文件 - 一个
CatalogUnitTests.podspec
文件 - 一个
Podfile
文件
最终结果将如下所示
catalog/
components/
CatalogExamples.podspec
CatalogUnitTests.podspec
Podfile
步骤 3:创建约定 podspec
让我们看看 CatalogExamples.podspec
和 CatalogUnitTests.podspec
的内容。
在 CatalogExamples.podspec
中
Pod::Spec.new do |s|
s.name = "CatalogExamples"
s.version = "1.0.0"
s.summary = "Convention for catalog examples."
s.homepage = "https://github.com/your/repo"
s.authors = "Catalog"
s.license = 'Apache 2.0'
s.source = { :git => "https://github.com/your/repo.git", :tag => s.version.to_s }
s.requires_arc = true
# Conventions
s.source_files = 'components/*/examples/*.{h,m,swift}'
s.public_header_files = 'components/*/examples/*.h'
s.resources = ['components/*/examples/resources/*']
end
在 CatalogUnitTests.podspec
中
Pod::Spec.new do |s|
s.name = "CatalogUnitTests"
s.version = "1.0.0"
s.summary = "Convention for catalog tests."
s.homepage = "https://github.com/your/repo"
s.authors = "Catalog"
s.license = 'Apache 2.0'
s.source = { :git => "https://github.com/your/repo.git", :tag => s.version.to_s }
s.requires_arc = true
s.framework = 'XCTest'
# Conventions
s.source_files = 'components/*/tests/unit/*.{h,m,swift}'
s.resources = ['components/*/tests/unit/resources/*']
# Unit tests require you to specify your components as dependencies.
s.dependency 'Resistor'
end
第4步:为您的目录创建Podfile
现在让我们编辑Podfile
。
请随意使用以下模板,并根据需要更新目标、路径和依赖关系。
abstract_target 'Catalog' do
workspace 'Catalog.xcworkspace'
use_frameworks!
pod 'GTCatalog'
# Define where the local pods live. This allows your conventions to depend on them.
pod 'Resistor', :path => 'components/Resistor'
target "Catalog" do
project 'catalog/Catalog.xcodeproj'
pod 'CatalogExamples', :path => './'
end
target "UnitTests" do
project 'catalog/Catalog.xcodeproj'
pod 'CatalogUnitTests', :path => './'
end
end
第5步:创建 Catalog Xcode 项目
创建一个新的Xcode项目。我们假设您正在使用“Single View Application”模板。为项目启用单元测试。
确保您的应用程序和单元测试目标与您的Podfile
中定义的目标一致。
删除默认的ViewController类。
更新您的应用程序代理,如下所示
import UIKit
import CatalogByConvention
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
let rootViewController =
NodeListViewController(node: GTFCreateNavigationTree())
rootViewController.title = "Catalog by Convention"
let navController = UINavigationController(rootViewController: rootViewController)
self.window?.rootViewController = navController
self.window!.makeKeyAndVisible()
return true
}
}
第6步:运行 pod install
为您的Catalog运行pod install
。打开您的Catalog工作区。
pod install
open Catalog.xcworkspace
您的所有示例、单元测试和组件源代码都将存储在工作区的Pods项目中。
第7步:构建!
从现在起,您只需创建新的示例和单元测试源文件,它们将在随后的 pod install 中被捕获。
持续步骤:添加示例
要使示例视图控制器出现在项目中,您的视图控制器必须实现+catalogBreadcrumbs
。例如
@implementation ParallelResistorExample (CatalogByConvention)
+ (NSArray<NSString *> *)catalogBreadcrumbs {
return @[ @"Resistor", @"Parallel" ];
}
@end
作者
liuxc123, [email 保护中]
许可协议
GTCatalog可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。