GTCatalog 0.0.1

GTCatalog 0.0.1

liuxc 维护。



GTCatalog 0.0.1

  • 作者
  • liuxc123

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

打开项目,您将找到两个目标:目录和单元测试。运行目录。

Catalog

您可以在目录应用程序中浏览到单个组件的示例。

现在尝试运行单元测试。您会看到在单元测试输出中出现一个电阻测试。

Tests

Quickly introducing how to add a new example

打开以下目录

open example/components/Resistor/examples/
  1. 复制示例中的一个。
  2. 打开重复项并为该类分配一个唯一的名称。
  3. 更改 +catalogBreadcrumbs 路径至独一无二的值。
  4. 运行 pod install --project-directory=example/ 并重新构建应用。
  5. 现在您的示例将列在电阻器类别下。

以下五个步骤描述了将新示例添加到目录的端到端过程。

添加新测试的快速介绍

打开以下目录

open example/components/Resistor/tests/unit/
  1. 复制任意一个测试。
  2. 打开重复项并为该类分配一个唯一的名称。
  3. 运行 pod install --project-directory=example/ 并重新构建应用。
  4. 运行单元测试。

安装指南

本指南将向您介绍如何创建使用 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.podspecCatalogUnitTests.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项目中。

Pods

第7步:构建!

从现在起,您只需创建新的示例和单元测试源文件,它们将在随后的 pod install 中被捕获。

持续步骤:添加示例

要使示例视图控制器出现在项目中,您的视图控制器必须实现+catalogBreadcrumbs。例如

@implementation ParallelResistorExample (CatalogByConvention)

+ (NSArray<NSString *> *)catalogBreadcrumbs {
  return @[ @"Resistor", @"Parallel" ];
}

@end

作者

liuxc123, [email 保护中]

许可协议

GTCatalog可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。