Faux Pas Changelog

What's new in Faux Pas 1.7.2

Nov 4, 2017
  • Improved:
  • Preliminary compatibility with Xcode 9. (Utilizing the open source Swift 4 Clang, due to Apple not having yet released the sources for their “Xcode 9” version of Clang.)
  • Fixed:
  • Compilation errors for projects using C++ precompiled headers. (Thanks to Mark Hastings for reporting this.)
  • Erroneous warnings about unsupported Xcode project formats.
  • False positives for the “Assigning delegate property” rule in cases where a non-Objective-C-pointer property was named *Delegate. (Thanks to Stephen Ford Horne for reporting this.)
  • False positives for the “Dynamic library install name” rule.
  • False positives for the “Retain cycle in block API usage” rule in cases where typeof(self) is used. (issue #110)
  • False positives for the “XIB User-defined runtime attribute mismatch” rule in cases where the runtime attribute type is image. (issue #115)

New in Faux Pas 1.7.1 (Dec 16, 2016)

  • Support for Xcode 8.1. (We now use a version of the Clang compiler that matches the one that ships with Xcode 8.1.)
  • New rule: Spelling error.
  • New rule: Source file header comment format.
  • New rule: Erroneous view layout in XIB.
  • New rule: Cyclomatic Complexity.
  • The “Missing API usage description” rule now checks for many more relevant cases.
  • Removed the possibility to open API documentation links in Xcode (Xcode has removed this capability from its AppleScript API since 8.0).
  • The “add annotations header file to project” feature now requires you to manually add the header file to your Xcode project (Xcode has removed the capability to add source files to projects from its AppleScript API since 8.0).
  • False positives for the “Constructor return type” rule in cases where nullability annotations were used with instancetype. (Thanks to Nikolas Mayr for reporting this.)
  • Compilation errors for projects using C++14 features. (Thanks to Mark Hastings for reporting this.)
  • Hangs in the GUI when switching between Faux Pas and other applications. (Thanks to Andrew Wooster for reporting this.)
  • False negatives for the “Undetached delegate or data source” rule in cases where the delegate host reference is an instance variable declared in a class extension. (issue #100)
  • False positives for the “Dynamic library install name” rule.
  • Excessive memory usage in cases where checked source files contained very large numbers of diagnostic suppression macro expansions. (Thanks to Nikolas Mayr for reporting this.)
  • False positives for the “Hardcoded self class reference” rule in cases where the reference is to a system framework class that is implemented as a class cluster (e.g. NSString). (Thanks to Nikolas Mayr for reporting this.)
  • False positives for the “Assigning delegate property” rule in cases where the same header was used in both ARC compilation units and non-ARC compilation units. (issue #99)
  • Hanging when opening projects when using Xcode 8.0–8.1. (issue #104)

New in Faux Pas 1.6.2 (May 13, 2016)

  • NEW:
  • Support for opening documentation links in Dash 3.
  • IMPROVED:
  • We now use a version of the Clang compiler that matches the one that ships with Xcode 7.2.
  • FIXED:
  • False positives for the “Project reference to file ignored in the VCS” rule for references to frameworks in the Carthage build folder.
  • Faux Pas sometimes hanging in the “Determining build settings” phase when opening a project, when Xcode 7.3 is installed. (Thanks to Nikolas Mayr for help with fix validation.) (issue #85)
  • Failure to apply the “Ignored key prefixes” option for the “Missing translation” rule for diagnostics about empty values for translation keys. (issue #83)
  • False positives for the “Hardcoded self class reference” rule in cases where a message is sent to a class whose name matches the name of the checked routine’s parent category. (issue #81)
  • False positives for the “Use of API not available in the minimum deployment target” rule in some cases where an API had availability annotations for multiple platforms.

New in Faux Pas 1.6.1 (Feb 8, 2016)

  • IMPROVED:
  • Project checking speed is improved (a ~10-20% speedup is typical, but e.g. Faux Pas now checks itself twice as fast as the previous version.)
  • We now use a version of the Clang compiler that matches the one that ships with Xcode 7.0.
  • The “did you mean” suggestions for unknown resource references are slightly improved.
  • FIXED:
  • Failure to check framework targets that build dynamic libraries with DEFINES_MODULE=YES. (issue #38)
  • Compiler error unknown argument: '-fembed-bitcode'. (issue #80)
  • Regression where ignore annotations stopped working. (issue #75)
  • False positives for the “Missing API usage description” rule in cases where NSBluetoothPeripheralUsageDescription was missing but not required. (Thanks to Geoffrey Wiseman for reporting this.)

New in Faux Pas 1.6 (Oct 12, 2015)

  • New:
  • New rule: Associated object on value-like type.
  • New rule: Complete NSNotificationCenter detachment.
  • Improved:
  • We now support Xcode 7 (the iOS 9 and OS X 10.11 SDKs).
  • The “Old, verbose Objective-C syntax” rule now suggests an Objective-C boxed C string (@(str)) instead of [NSString stringWithFormat:@"%s", str]. (Thanks to Nikolas Mayr for the suggestion.)
  • The “Recommended VCS ignores” rule now also considers files related to the Carthage dependency manager.
  • The “XIB User-defined runtime attribute mismatch” rule now mentions the referenced object ID, to make it easier to find it in Interface Builder. (issue #69)
  • The “Possibly unused resource” rule no longer warns about resource files whose basename is referenced in another resource file (e.g. foo.css referenced by bar.html).
  • Changed:
  • The “Missing NSNotificationCenter observer detachment” rule is only applied for projects targeting an OS prior to iOS 9 or Mac OS 10.11. (Deallocated observers are automatically unregistered in iOS 9+ and OS X 10.11+)
  • Fixed:
  • False positives for the “XIB Reference to unknown class” rule in cases where the referenced class is included from a framework built from a subproject.
  • Failure to correctly determine the paths of some XIB/Storyboard files included from subprojects.
  • Intermittent failures to check projects due to temporary cache files being cleared from under us.
  • False positives for the “XIB User-defined runtime attribute mismatch” rule in cases where an instance variable matches the runtime attribute key path. (issue #70)
  • The “Possibly unused Objective-C method” rule is now better at suppressing diagnostics about overrides of methods in classes from third-party libraries.
  • False positives in the “Missing Translation” and “Unused Translation” rules in cases where the table argument to NSLocalizedString() macros gets a dynamically determined value. (Thanks to Konstantin Pavlikhin for reporting this.)
  • False positives for the “Null coalescing operator usage” rule in cases where Foundation assertion macros are used. (issue #73)
  • False positives for the “Constructor return type” rule in cases where a method in a category could be mistaken for a factory method due to the name of the category rather than the class.

New in Faux Pas 1.5 (Oct 12, 2015)

  • New:
  • New rule: Hardcoded self class reference.
  • The documentation/help window now supports searching.
  • Improved:
  • We now use a version of the Clang compiler that matches the one that ships with Xcode 6.4. (In addition to this, we also have experimental support for Xcode 7 (which is currently still in beta), which can be enabled via the command defaults write org.hasseg.fauxpas experimentalXcode7SupportEnabled -bool yes)
  • The “Recommended project settings” rule now has the option “expectClassPrefix” which allows suppressing warnings about empty “Class Prefix” project settings.
  • Minor UI adjustments for OS X El Capitan.
  • Fixed:
  • Compiler errors when checking projects that use the new “nullability” annotations in Objective-C source code. (issue #61)
  • UI hangs (occurring in some rare circumstances) due to log message floods.
  • False positives for the “Possibly unused Objective-C method” rule for +automaticallyNotifiesObserversOf and +keyPathsForValuesAffecting. (Thanks to James Lawton for reporting this.)
  • Failure to remove cached build artifacts when clearing the caches for a project. (Thanks to Tim Wood for alerting me to the issue.)
  • False positives for the “Code refers to unknown resource” rule in cases where the resource file names contained characters that could be represented in decomposed formats in unicode strings. (issue #63)
  • False positives for the “Missing device type resource” rule in cases where a @3x image is missing for the ipad device type (there are no iPads that require @3x assets yet). (Thanks to Oleg Grenrus for reporting this.)
  • Crashes in the “Unused error value” rule when interpreting specific kinds of code constructs. (Thanks to Andriy Kachalo and Steven Woolgar for confirming the fix.) (issue #62)

New in Faux Pas 1.4 (Oct 12, 2015)

  • New:
  • New rule: Suspicious date-time format. (issue #53)
  • New rule: Unnecessary default case in exhaustive switch statement.
  • Added “Select only this rule” to the rule selection GUI context menus.
  • Whenever a project that uses a config file is opened, a notification will be shown about new rules that are not yet enabled. (Thanks to Oleg Grenrus for the suggestion.)
  • Improved:
  • Performance: Checking a project is now faster. Typically about 10–30% of checking time has been shaved off.
  • Performance: The parsing of XIB files is much faster (in some cases as much as 10x).
  • The “Retain cycle in block API usage” rule now also checks calls to the CFRunLoopObserverCreateWithHandler() function.
  • The default workspace of an Xcode project can now be selected in the “project configuration wizard” GUI’s open dialog by selecting the project.
  • The rule selection sheet in the GUI now has “cog” buttons on each row in the table, making the actions in the context menu more discoverable.
  • Changed:
  • The order of third-party code attributions in the “About” dialog is now randomized.
  • Fixed:
  • Failure to serialize number array options into JSON configuration files. (issue #58)
  • Swapped entries for TextMate and TextMate 2 in Preferences → Integrations → Code editor. (Thanks to Zev Eisenberg for reporting this.)
  • Erratically failing “open file” integration with JetBrains AppCode. (Thanks to Karlo for reporting this.)
  • False positives for the “Absolute path in build setting value” rule in cases where Xcodebuild automatically prepends $SDKROOT to the given values (HEADER_SEARCH_PATHS and LIBRARY_SEARCH_PATHS). (Thanks to Evgeny Karkan for reporting this.)
  • Failure to check source code in files outside the Xcode project root folder in cases where we cannot determine a version control root. (Thanks to Dave Polaschek for reporting this.)
  • Race condition in the rule selection GUI search feature, sometimes leading to incorrect search results.
  • False positives for the “Literal string for key path” rule in cases where KVC Collection Operators were used in a string literal key path.
  • “Literal string for key path” rule diagnostics not suppressed for -valueForKeyPath: and -setValue:forKeyPath: when the ignoreCollectionsValueForKey option is set. (issue #59)

New in Faux Pas 1.3 (Oct 12, 2015)

  • New:
  • New rule: Using a variable marked unused. (Thanks to Markus Kauppila and Jouni Miettunen for the suggestion.)
  • New rule: Retain cycle in block API usage.
  • Improved:
  • We now use a version of the Clang compiler that matches the one that ships with Xcode 6.1.
  • Build step processing is now much faster (it has been optimized and parallelized).
  • We now set the optimization level to 0 for full builds. This can reduce the time required to build the project before checking it.
  • New configuration option “Process only target precompiled headers” (--processOnlyTargetPCHs), enabled by default.
  • The “Use of API not available in the minimum deployment target” rule can now suppress warnings about API usages guarded using the ?: ternary operator. (issue #54)
  • The “NSLog() used in release build” rule can now also be applied to release builds of non-application targets. (issue #55)
  • The “Duplicate resource” rule now also checks contents of folder references.
  • The “Method swizzling” rule can now also be applied to non-application targets.
  • Miscellaneous performance improvements.
  • Fixed:
  • False positives for the “Reserved symbol prefix” rule for protocol forward-declarations. (issue #52)
  • False positives for the “Literal string for key path” rule for classes that support the Core Animation Key-Value Coding Extensions. (issue #56)
  • Crashes in the Clang compiler when checking projects that define a module. (Thanks to Tai Heng for reporting this.)
  • Suppressed some (harmless but noisy) “Argument unused during compilation” compiler warnings during checking.

New in Faux Pas 1.2.1 (Oct 12, 2015)

  • New:
  • New rule: Assigning delegate property. (Thanks to Ben Asher for suggesting this.)
  • Improved:
  • The “Missing image resolution variant” rule now has the “Expected resolution scales” option, which allows suppressing warnings e.g. in cases where non-retina (“@1x”) images are intentionally omitted. (issue #42)
  • Minor UI changes for Yosemite.
  • Rules that apply only to “app” targets will now also be applied to “app extension” targets.
  • The full descriptions of rule options is now included in the CLI output (when using the fauxpas rules command).
  • Changed:
  • The “Use of API not available in the minimum deployment target” rule “Avoid false positives” option is now enabled by default.
  • The “Reserved symbol prefix” rule no longer warns about class names occurring in forward declarations.
  • Fixed:
  • Compilation and Xcodebuild errors when checking projects that contain Swift code. (issue #43)
  • Crash that occurs when the SYMROOT build setting is not set.
  • False positives for the “Unexpected retina image resolution” rule in cases where only @2x and @3x images are included in an asset catalog. (issue #41)
  • False positives for the “Undetached delegate or data source” rule. (issue #47)
  • Failure to install the CLI tools if /usr/local/bin doesn't yet exist. (issue #46)
  • Failed builds during checking in cases where “Treat warnings as errors” is enabled.
  • False positives for the “Possibly unused Objective-C method” rule in cases where a custom setter or getter for a property declared with the @property syntax was invoked using dot syntax. (issue #48)
  • False positives for the “Fragile error condition check” rule. (Thanks to Marcin Krzyżanowski for reporting this.)

New in Faux Pas 1.2 (Oct 12, 2015)

  • New:
  • New rule: Global and localized resource.
  • New rule: Fragile error condition check.
  • New rule: Observing UIKit object using KVO.
  • Improved:
  • The “Unexpected retina image resolution” rule now also checks image asset catalogs.
  • The “Missing image resolution variant” rule now also checks image asset catalogs.
  • The “Missing device type resource” rule now also checks image asset catalogs.
  • The “Possibly unused resource” rule now also checks image asset catalogs.
  • The “Duplicate resource” rule now also checks image asset catalogs.
  • The app icon in the GUI is now selected based on the target you select in the target popup button.
  • The rules and tags CLI commands now accept a list of rule/tag names to display the information for.
  • The “read more” links are now displayed in the rule descriptions in the CLI output (when using the rules command).
  • The “Use of API not available in the minimum deployment target” rule now suppresses diagnostics about usage of new enum fields in switch-case statements (if the “Avoid false positives” option is selected).
  • The “Unused error value” rule can now suppress warnings in cases where an error variable is being referenced in code that has been expanded to nothing by the preprocessor (e.g. a reference in an NSAssert() when checking a release build that disables assertions).
  • The FauxPas.app/Contents/Resources/install-cli-tools command can now be used to install /usr/local/bin/fauxpas without launching the GUI.
  • Fixed:
  • Better handling of build and module caches, which should resolve many cases where trying to check projects resulted in fatal compilation errors.
  • False positives for the “Project reference to file outside version control root” rule in cases where Xcode was installed under the user’s home folder.
  • False positives from the “Possibly unused resource” rule for entitlements files.
  • False negatives for the “Block-typed declaration without typedef” rule.
  • A rare crash when resolving project build settings.
  • A crash when parsing xcconfig files containing statements with no value assignment (issue #39)

New in Faux Pas 1.1.2 (Oct 12, 2015)

  • Improved:
  • The “Missing image resolution variant” and “Unexpected retina image resolution” rules now also consider @3x images.
  • The “Missing device type resource” rule now also checks cases where a device type is not covered for a scale-variant (e.g. @2x or @3x) image resource.
  • Fixed:
  • False positive regressions when using the iOS 8 SDK.
  • Compiler errors when checking iOS 8 app extension targets. (issue #34)
  • Handling of @3x images in many cases.
  • False negatives in the “Missing API usage description” rule for the iOS 8 location usage description keys.
  • False positives for the “Code refers to unknown resource” rule in cases where code in non-app targets used a reference to the main bundle.
  • A heap buffer overflow, possibly leading to crashes in some rare cases.

New in Faux Pas 1.1.1 (Oct 12, 2015)

  • Fixed:
  • False positives due to regression in the detection of XIB/Storyboard files included in the build.
  • Hanging during checking (due to deadlocks) in some rare cases.
  • Crashes in some rare cases.

New in Faux Pas 1.1 (Oct 12, 2015)

  • New:
  • New rule: Implicitly atomic property.
  • New rule: Literal string for key path.
  • New rule: Potential assertion side effects.
  • Improved:
  • The “Missing API Usage Description” rule now understands the new location API usage keys introduced in iOS 8.
  • Changed:
  • The “Dot syntax usage” rule option “Enforce dot syntax only for properties” is now on by default.
  • Fixed:
  • False negatives for the “Undetached delegate or data source” rule in cases where dot syntax was used to invoke a delegate setter method not declared with the @property syntax.
  • False positives for the “Redundant inclusion directive” in cases where the prefix header file extension is not .pch.
  • False positives for the “Unnecessary Nib method” rule in cases where a class was archived in a XIB that was used in another target or project than the one under test.
  • False positives for the “Unnecessary Nib method” rule in cases where Xcode 4 -format XIBs were found in the build. (We don't support XIBs in the old format.)
  • A race condition in the “Unnecessary Nib method” rule implementation, potentially leading to false positives.
  • Failure to detect the C++11 null pointer literal, leading to some false positives for files compiled as C++11.
  • Some rare false positives for the “Missing API usage description” rule.
  • False negatives for the “Missing API usage description” rule in cases where some API usage description keys were present but had an empty value.
  • False positives for the “Project reference to file ignored in the VCS” rule for build product file references when BUILT_PRODUCTS_DIR is under the Git repository root.
  • False positives for the “Possibly unused resource” rule for some about panel -related files in OS X application targets.

New in Faux Pas 1.0.1 (Oct 12, 2015)

  • Improved:
  • The --minErrorStatusSeverity option now accepts the value None, which will ensure that Faux Pas always returns a zero exit status (indicating success) regardless of what diagnostics are emitted.
  • The “checking log” sidebar button now shows the number of warning messages in the log as a yellow “badge”.
  • Changed:
  • The “Usage of strong instead of retain” rule has been renamed to “Usage of retain in ARC code”.
  • Fixed:
  • False positives for the unknown resource reference rules for files generated automatically by the build system.
  • False positives for the “Project reference to file ignored in the VCS” rule for paths outside the VCS root.
  • False positives for the “Modifying the value of an argument variable” for C++ by-reference arguments.
  • Bugs in string resource file parsing, leading to false positives in some cases.
  • False positives for the “Redundant inclusion directive” in cases where the prefix header file extension is not .pch.
  • False positives for the “Retaining or copying delegate” rule for readonly delegate properties.
  • False positives for the “Globally caching a thread-unsafe class instance” rule in cases where NS{Date,Number}Formatter is cached globally when the minimum deployment target is at least iOS 7 (these classes have been documented as thread safe since that.) (issue #28)
  • GUI component drawing bug which caused unnecessary CPU usage when idle.
  • Failure to resolve project-relative xcconfig inclusion paths.

New in Faux Pas 1.0 (Oct 12, 2015)

  • Improved:
  • The “Non-copying property of immutable NSCopying type” rule now suppresses diagnostics for NSManagedObject subclasses. (Thanks to Wayne Hartman for reporting this.)
  • Fixed:
  • Window frames not persisted. (issue #29)
  • False positives for the “Shortcut initializer” rule for -init invocations on self or super when preferAllocInit=NO (Thanks to Stephan Esch for reporting this.)
  • Edge case crash when building projects.
  • Regression in system path detection, causing false positives or otherwise incorrect behavior in some cases.