Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/IBDecodable/IBLinter

A linter tool for Interface Builder
https://github.com/IBDecodable/IBLinter

ib linter storyboard

Last synced: 3 months ago
JSON representation

A linter tool for Interface Builder

Awesome Lists containing this project

README

        

# IBLinter
[![Build Status](https://travis-ci.org/IBDecodable/IBLinter.svg?branch=master)](https://travis-ci.org/IBDecodable/IBLinter)
[![Swift 5.0](https://img.shields.io/badge/Swift-5.0-orange.svg?style=flat)](https://developer.apple.com/swift/)

A linter tool to normalize `.xib` and `.storyboard` files. Inspired by [realm/SwiftLint](https://github.com/realm/SwiftLint)

![](assets/warning.png)

## Installation

### Using [Homebrew](http://brew.sh/)

```sh
$ brew install iblinter
```

### Using [Mint](https://github.com/yonaskolb/Mint)

```sh
$ mint install IBDecodable/IBLinter
```

### Using [CocoaPods](https://cocoapods.org)

```sh
pod 'IBLinter'
```

This will download the IBLinter binaries and dependencies in `Pods/` during your next
`pod install` execution and will allow you to invoke it via `${PODS_ROOT}/IBLinter/bin/iblinter`
in your Script Build Phases.

### Compiling from source

You can build from source by cloning this repository and running
```
$ make install
```
`iblinter` will be installed in `/usr/local/bin`.

## Usage

You can see all description by `iblinter --help`

```
$ iblinter --help
USAGE: iblinter

OPTIONS:
--version Show the version.
-h, --help Show help information.

SUBCOMMANDS:
lint (default) Print lint warnings and errors

See 'iblinter help ' for detailed help.
```

### Xcode

Add a `Run Script Phase` to integrate IBLinter with Xcode

```sh
if which iblinter >/dev/null; then
iblinter lint
else
echo "warning: IBLinter not installed, download from https://github.com/IBDecodable/IBLinter"
fi
```

Alternatively, if you've installed IBLinter via CocoaPods the script should look like this:

```sh
"${PODS_ROOT}/IBLinter/bin/iblinter"
```

## Requirements

IBLinter requires Swift5.0 runtime. Please satisfy at least one of following requirements.

- macOS 10.14.4 or later
- Install `Swift 5 Runtime Support for Command Line Tools` from [More Downloads for Apple Developers](https://developer.apple.com/download/more/)

## Rules

All rules are documented in [Rules.md](Rules.md)

Pull requests are encouraged.

## Configuration

You can configure IBLinter by adding a `.iblinter.yml` file from project root directory.

| key | description |
|:---------------------|:--------------------------- |
| `enabled_rules` | Enabled rules id. |
| `disabled_rules` | Disabled rules id. |
| `excluded` | Path to ignore for lint. |
| `included` | Path to include for lint. |
| `custom_module_rule` | Custom module rule configs. |
| `use_base_class_rule`| Use base class rule configs.|
| `view_as_device_rule`| View as device rule configs.|

### CustomModuleConfig

You can configure `custom_module` rule by `CustomModuleConfig` list.

| key | description |
|:-----------|:---------------------------------------------------------------------------- |
| `module` | Module name. |
| `included` | Path to `*.swift` classes of the module for `custom_module` lint. |
| `excluded` | Path to ignore for `*.swift` classes of the module for `custom_module` lint. |

### UseBaseClassConfig

You can configure `use_base_class` rule by `UseBaseClassConfig` list.

| key | description |
|:------------------|:---------------------------------- |
| `element_class` | Element class name. |
| `base_classes` | Base classes of the element class. |

**Note:** UseBaseClassRule does not work for classes that inherit base class. You need to add all classes to `base_classes` to check.

### ViewAsDeviceConfig

You can configure `view_as_device` rule by `ViewAsDeviceConfig`. If there are no config, `device_id` is set as `retina4_7`.

| key | description |
|:------------------|:---------------------------------- |
| `device_id` | Device id for device. |

**appx.** Table of mapping device name to `device_id` (on `Xcode 10.2`)

| device name | device id |
|:------------------|:-------------------- |
| `iPhone 4s` | `retina3_5` |
| `iPhone SE` | `retina4_0` |
| `iPhone 8` | `retina4_7` |
| `iPhone 8 Plus` | `retina5_5` |
| `iPhone XS` | `retina5_9` |
| `iPhone XR` | `retina6_1` |
| `iPhone XS Max` | `retina6_5` |

### UseTraitCollectionsConfig

You can configure `use_trait_collections` rule by `UseTraitCollectionsConfig`. If there is no config then use_trait_collections is set to true

| key | description |
|:---------------:|:---------------:|
| enabled | `true` |

### HidesBottomBarConfig

You can configure `hides_bottom_bar` rule by `HidesBottomBarConfig` list.

| key | description |
|:---------------:|:---------------:|
| `excluded_view_controllers` | Controller's class name to ignore `hides_bottom_bar` rule. |

```yaml
enabled_rules:
- relative_to_margin
- use_trait_collections
- hides_bottom_bar
- has_single_view_controller
- has_initial_view_controller
disabled_rules:
- custom_class_name
excluded:
- Carthage
- App
included:
- App/Views
custom_module_rule:
- module: UIComponents
included:
- UIComponents/Classes
excluded:
- UIComponents/Classes/Config/Generated
use_base_class_rule:
- element_class: UILabel
base_classes:
- PrimaryLabel
- SecondaryLabel
view_as_device_rule:
device_id: retina4_0
use_trait_collections_rule:
enabled: false
hides_bottom_bar_rule:
excluded_view_controllers:
- FirstViewController
- SecondViewController
```