Contents

ibdecodable/iblinter

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

Installation

Using Homebrew

$ brew install iblinter

Using Mint

$ mint install IBDecodable/IBLinter

Using CocoaPods

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 <subcommand>

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

SUBCOMMANDS:
  lint (default)          Print lint warnings and errors

  See 'iblinter help <subcommand>' for detailed help.

Xcode

Add a Run Script Phase to integrate IBLinter with Xcode

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:

"${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

Rules

All rules are documented in 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. |

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

Package Metadata

Repository: ibdecodable/iblinter

Default branch: master

README: README.md