IBLinter
A linter tool to normalize .xib and .storyboard files. Inspired by 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
Available commands:
   help      Display general or command-specific help
   lint      Print lint warnings and errors (default command)
   version   Display the current version of iblinter
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 Toolsfrom 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 |  
  
enabled_rules:
  - relative_to_margin
  - use_trait_collections
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

