R.swift Version License Platform

在 Swift 项目中获取强类型、自动补全的资源,如图像、字体和 Segue

为何使用它?

它使你的代码使用资源时

目前你的代码是

let icon = UIImage(named: "settings-icon")
let font = UIFont(name: "San Francisco", size: 42)
let color = UIColor(named: "indicator highlight")
let viewController = CustomViewController(nibName: "CustomView", bundle: nil)
let string = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Arthur Dent")

使用 R.swift 后变为

let icon = R.image.settingsIcon()
let font = R.font.sanFrancisco(size: 42)
let color = R.color.indicatorHighlight()
let viewController = CustomViewController(nib: R.nib.customView)
let string = R.string.localizable.welcomeWithName("Arthur Dent")

查看 更多示例 或了解 Fabric.app 如何使用 R.swift

演示

自动补全的图像

Autocompleted images

编译时检查的图像

Compiletime checked images

这只是一个开始,查看 更多示例

CocoaHeadsNL 演示

Mathijs Kadijk 在 2016 年 9 月的 CocoaHeadsNL 聚会上展示了 R.swift。讨论了 R.swift 背后的想法,并演示了如何从纯粹的字符串类型 iOS 代码迁移到静态类型代码。

R.swift presentation at CocoaHeadsNL

特性

将 R.swift 安装到你的项目后,你可以使用 R 结构体来访问资源。如果该结构体已过期,只需构建,R.swift 将更正任何缺失/更改/添加的资源。

R.swift 目前支持以下类型的资源

使用 R.validate() 进行运行时验证

问答

安装

从 Rswift 7 开始,推荐使用 Swift Package Manager 进行安装。

演示视频:从 R.swift 6 更新到 Rswift 7 (从 1:06 开始,介绍了 Rswift 7 的安装).

使用 SPM 的 Xcode 项目(推荐)

演示视频:在 Xcode 中使用 SPM 安装 R.swift

  1. 在项目设置的 "Package Dependencies" 选项卡上,单击 "+",搜索 https://github.com/mac-cain13/R.swift 并单击 "Add Package"。
  2. 在 "RswiftLibrary" 旁边选择将使用 R.swift 的目标,然后单击 "Add Package"。
  3. 现在单击你的目标,在 "Build Phases" 选项卡的 "Run Build Tool Plug-ins" 部分中,单击 "+" 并添加 RswiftGenerateInternalResources。(截图
  4. 现在 R 结构体应该可以在你的代码中使用了,使用自动完成来探索所有静态引用。

注意:第一次构建时,你可能需要批准新的插件,方法是单击关于新插件的构建错误警告。

在 Xcode Cloud 或任何其他 CI 上使用 R.swift

在你的 CI 服务器上,你无法显式允许构建插件运行,因此你需要禁用插件验证才能在没有用户交互的情况下进行构建

  1. 在 Xcode 开始构建之前,在你的 CI 上运行一个脚本,该脚本运行:defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES

在 Xcode Cloud 上,你可以在 ci_scripts/ci_post_clone.sh 中添加一个 自定义构建脚本,其中包含 Xcode 将运行的此行代码。

基于 Package.swift 的 SPM 项目

  1. 在 Package.swift 中添加依赖项
    dependencies: [
        .package(url: "https://github.com/mac-cain13/R.swift.git", from: "7.0.0")
    ]
  2. 对于每个相关的目标,添加一个依赖项和一个插件
    .target(
        name: "Example",
        dependencies: [.product(name: "RswiftLibrary", package: "R.swift")],
        plugins: [.plugin(name: "RswiftGeneratePublicResources", package: "R.swift")]
    )
  3. 构建你的项目,现在 R 结构体应该可以在你的代码中使用了,使用自动完成来探索所有静态引用

CocoaPods

  1. pod 'R.swift' 添加到你的 Podfile 并运行 pod install
  2. 在 Xcode 中:单击文件列表中的你的项目,在 TARGETS 下选择你的目标,单击 Build Phases 选项卡并通过单击左上角的小加号图标添加一个 New Run Script Phase
  3. 将新的 Run Script 阶段拖动到 Compile Sources 阶段上方Check Pods Manifest.lock 下方,展开它并粘贴以下脚本
    "$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
  4. $SRCROOT/R.generated.swift 添加到 Build Phase 的 "Output Files"
  5. 取消选中 "Based on dependency analysis",以便每次构建都运行 R.swift
  6. 构建你的项目,现在你将在 Finder 中看到 $SRCROOT 文件夹中有一个 R.generated.swift,将 R.generated.swift 文件拖到你的项目中并取消选中 Copy items if needed

可以在 此处 找到 Build Phase 的屏幕截图

提示:*.generated.swift 模式添加到你的 .gitignore 文件中,以防止不必要的冲突。

手动

  1. R.swift 库添加到你的项目
  2. 下载 一个 R.swift 版本,解压缩并将其放入你的源代码根目录
  3. 在 Xcode 中:单击文件列表中的你的项目,在 TARGETS 下选择你的目标,单击 Build Phases 选项卡并通过单击左上角的小加号图标添加一个 New Run Script Phase
  4. 将新的 Run Script 阶段拖动到 Compile Sources 阶段上方,展开它并粘贴以下脚本
    "$SRCROOT/rswift" generate "$SRCROOT/R.generated.swift"
  5. $SRCROOT/R.generated.swift 添加到 Build Phase 的 "Output Files"
  6. 取消选中 "Based on dependency analysis",以便每次构建都运行 R.swift
  7. 构建你的项目,现在你将在 Finder 中看到 $SRCROOT 文件夹中有一个 R.generated.swift,将 R.generated.swift 文件拖到你的项目中并取消选中 Copy items if needed

可以在 此处 找到 Build Phase 的屏幕截图

提示:*.generated.swift 模式添加到你的 .gitignore 文件中,以防止不必要的冲突。

贡献

我们欢迎贡献,阅读 贡献文档 以获取有关如何报告问题、提交想法和提交拉取请求的信息!

许可

R.swiftMathijs KadijkTom Lokhorst 创建,并根据 MIT 许可 发布。