A linter tool to normalize .xib and .storyboard files. Inspired by realm/SwiftLint
Installation
Using Homebrew
Using Mint
$ mint install IBDecodable/IBLinter
Using CocoaPods
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
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 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 |
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
