Faux Pas

Release Notes

Version 1.7.2

November 03, 2017
  • 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.)
  • 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)

Version 1.7.1

December 15, 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)

Version 1.6.2

May 13, 2016
  • Support for opening documentation links in Dash 3.
  • We now use a version of the Clang compiler that matches the one that ships with Xcode 7.2.
  • 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.

Version 1.6.1

February 08, 2016
  • 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.
  • 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.)

Version 1.6

October 10, 2015
  • New rule: Associated object on value-like type.
  • New rule: Complete NSNotificationCenter detachment.
  • 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).
  • 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+)
  • 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.

Version 1.5

July 15, 2015
  • New rule: Hardcoded self class reference.
  • The documentation/help window now supports searching.
  • 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.
  • 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<key> and +keyPathsForValuesAffecting<key>. (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)

Version 1.4

March 27, 2015
  • 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.)
  • 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.
  • The order of third-party code attributions in the “About” dialog is now randomized.
  • 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)

Version 1.3

January 13, 2015
  • 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.
  • 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.
  • 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.

Version 1.2.1

December 18, 2014
  • New rule: Assigning delegate property. (Thanks to Ben Asher for suggesting this.)
  • 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).
  • 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.
  • 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.)

Version 1.2

October 26, 2014
  • New rule: Global and localized resource.
  • New rule: Fragile error condition check.
  • New rule: Observing UIKit object using KVO.
  • 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.
  • 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)

Version 1.1.2

September 28, 2014
  • 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.
  • 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.

Version 1.1.1

September 16, 2014
  • 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.

Version 1.1

September 14, 2014
  • New rule: Implicitly atomic property.
  • New rule: Literal string for key path.
  • New rule: Potential assertion side effects.
  • The “Missing API Usage Description” rule now understands the new location API usage keys introduced in iOS 8.
  • The “Dot syntax usage” rule option “Enforce dot syntax only for properties” is now on by default.
  • 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.

(Thanks to Peter N Lewis and Gaige B Paulsen for reporting some of the issues fixed in this release.)

Version 1.0.1

September 01, 2014
  • 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”.
  • The “Usage of strong instead of retain” rule has been renamed to “Usage of retain in ARC code”.
  • 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.

(Thanks to Peter N Lewis and Petteri Kamppuri for reporting most of the issues fixed in this release.)

Version 1.0

August 20, 2014
This is 1.0, and we are thus out of the beta — thank you to all the beta testers! After upgrading from a beta build, the app will move into an evaluation trial mode. For continued use, please purchase a license from the website.
  • The “Non-copying property of immutable NSCopying type” rule now suppresses diagnostics for NSManagedObject subclasses. (Thanks to Wayne Hartman for reporting this.)
  • 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.

Version 0.9.9 (Beta)

August 17, 2014
  • New rule: Invocation of superclass implementation of +[NSObject initialize].
  • You can now save and load configuration files to and from arbitrary files in the GUI.
  • The “Undetached delegate” rule is now “Undetached delegate or data source” (nuff said.)
  • The “Non-copying property of immutable NSCopying type” rule now has the option “Ignore private properties”, which is enabled by default.
  • The “Absolute path in build setting value” rule now has the option “Regexes for allowed paths”, which can be used to suppress warnings about absolute references to specific paths. (issue #13)
  • Support for Beyond Compare as an external diff tool (which we use to illustrate configuration changes that have occurred in the GUI, via the prompt that shows up when you try to close a project with modified configuration).
  • The rule filter field in the rule selection sheet now also matches on rule short names.
  • Better validation of regular expression options.
  • We now disable -Werror during source code checking, so as not to unnecessarily skip checking code that contains warnings, but not (real) errors.
  • The property list format is no longer supported for Faux Pas configuration files (only JSON is).
  • The “Recommended VCS ignores” rule no longer expects *.lock to be ignored. (These temp files are created by editors that are not typically used by iOS/Mac developers (e.g. Eclipse) and this pattern unnecessarily complicates non-exclusion of some CocoaPod files.)
  • Some invalid HTML in some diagnostics info fields.
  • Some compiler warnings when checking Xcode 6 projects.
  • Crashes when diagnostic file path suppression regexes are invalid.
  • Rule options being reset in the GUI when saving changes multiple times in the rule selection sheet. (issue #20)
  • False positives for the “Missing device type resource” rule in cases where the checked app targets only a single device family. (Thanks to Marius Ursache for reporting this.)
  • Broken property list serialization for diagnostics. (Thanks to Miguel for reporting this.)

Version 0.9.8 (Beta)

August 11, 2014
  • All rules now have a “Regexes for ignored file paths” option that allows suppressing diagnostics from that rule in all files whose path matches any of the specified regular expressions.
  • The “Conflicting category methods” rule is now able to check all known categories, including ones in system libraries. This means that overriding system class methods (which are defined in categories) in your own categories will elicit diagnostics.
  • Better explanation for expected .gitignore rules for *.lock and !Podfile.lock in the “Recommended VCS ignores” rule.
  • The “Problematic release build compiler arguments” rule now accepts macro definition arguments with an assigned value for required arguments in the format -DSOMETHING (for required arguments configured in the format -DSOMETHING=foo warnings are emitted if e.g. -DSOMETHING or -DSOMETHING=notfoo is used.) This means that e.g. -DNDEBUG=1 is accepted for the expected-by-default argument -DNDEBUG.
  • Projects with the same name in the “recent projects / projects open in xcode” list will now display the first unique parent folder name after them to help differentiate between them.
  • Better detection of “release” build configurations.
  • Better detection of UIView or NSView subclass objects in Nibs. This should fix false positives for many rules that depend on Nib interpretation.
  • The XML output format has been removed.
  • Crash when scanning format specifiers in localized strings.
  • “Data argument not used by format strings” compiler warnings when NSLocalizedString() return values are used as format strings. issue #10
  • Erroneously expected -Wdeprecated-implementations compiler argument for non-Objective-C compilation units in the “Recommended compiler warning options” rule.
  • The “Recommended VCS ignores” rule now also checks Pods/Manifest.lock exclusion along with the Pods folder exclusion (the also-recommended *.lock exclusion conflicts with this, so a negation exception may be needed for Pods/Manifest.lock.) (Thanks to Jouni Miettunen for reporting this.)
  • Failure to find Info.plist if it is configured with an absolute path. (Thanks to Samuel Cai for steps to reproduce.)
  • Crashes in keyboard event handling.
  • False positives for the “Setter invocation in init or dealloc method” rule in cases where setter invocations occurred inside block literals (which means that they are most likely executed sometime later.) (Thanks to Stephan Esch for reporting this.)
  • False positives for the “Recommended compiler warning options” rule — this rule has been significantly refactored to better handle many edge cases. (Thanks to Jos Kuijpers for reporting this.)
  • Unnecessary diagnostics from the “Unprefixed Objective-C class” rule for forward declarations (@class Thing). (Thanks to Jonathan Lundell for reporting this.)
  • Erroneous conversion of <ul>, <ol>, and <li> tags in serialized diagnostics’ HTML-format fields to <div>s.
  • Failure to find linked libraries whose paths contained build setting variables. (This should fix cases where the “XIB reference to unknown class” rule fails to detect classes exported in libPods.a.)
  • Regression where the app would sometimes crash when closing sheets in the GUI.
  • False positives for the “Unused resource” rule for some common third-party library config files. (issue 18)
  • False positives for the “XIB User-defined runtime attribute mismatch” rule in cases where the runtime attribute property or setter is defined in a superclass. issue #21
  • False positives for the “Unprefixed Objective-C class” in cases where the prefix is not all-uppercase and at least two characters, but matches the “Class Prefix” setting set for the project.
  • The “Duplicate resource” rule no longer warns about empty files. issue #23
  • The “Globally caching a thread-unsafe class instance” rule no longer warns about code that occurs in subclasses of, or categories on UIKit/AppKit classes. issue #22
  • Inverted exit status for the clearcaches CLI command.

Version 0.9.7 (Beta)

August 04, 2014
  • The “Throwing an Objective-C exception” rule now has an option to allow throwing exceptions as the sole statement in a routine. This is useful for suppressing warnings for “not implemented / must override” exceptions. (Thanks to Yvo van Beek for the suggestion.)
  • The “Old, verbose Objective-C syntax” rule no longer warns about cases where mutable collections (NSMutableArray or NSMutableDictionary) are initialized without using literal syntax (this now matches the behavior of the Xcode syntax refactoring feature.) An option has been added for this rule to expect literal syntax also for mutable collections. (issue #8)
  • The “Recommended VCS ignores” rule no longer recommends Jetbrains AppCode -specific ignores unless the .idea folder exists. In addition, a new rule option allows disabling these warnings.
  • We no longer add a timestamp to the JSON header comment when saving config files from the GUI. (Thanks to Richard Buckle for suggesting this.)
  • The default value of the “Whether CocoaPods data should be ignored” option for the “Recommended VCS ignores” rule has been changed to NO, as per the recommendation in http://guides.cocoapods.org/using/using-cocoapods.html. (Thanks to Luke Redpath for suggesting this.)
  • Warnings for the CocoaPods-specific ignore rules in the “Recommended VCS ignores” rule will only be emitted if CocoaPods is actually used for the project.
  • The “Recommended VCS ignores” rule now warns if Podfile.lock is ignored. (Thanks to Orta Therox for suggesting this.)
  • The “Send feedback” menu item now displays an alert before opening the system default email application. This extra step should help people who use webmail in lieu of desktop email apps. (Thanks to Reinier van Vliet for reporting this.)
  • False positives for the “unknown resource” rules in cases where the resource reference was to a file added as a resource by CocoaPods.
  • False positives for the “Unnecessary Nib method” rule in cases where a class was being referenced by at least one storyboard file.
  • False positives for the “Unnecessary Nib method” rule in cases where subclasses of a class implementing -awakeFromNib are archived in Nibs. (issue #6)
  • False positives for the “Undetached delegate” rule in cases where the delegate property is declared weak and the delegate value is assigned using Objective-C message send syntax in lieu of property access (“dot”) syntax.
  • Regression where the “Remove from recent projects” context menu item did not work in the main window projects table. (Thanks to John Daub for reporting this.)
  • Erroneously displayed context menu for group rows in the main window projects table. (Thanks to John Daub for reporting this.)
  • Erroneously displayed “Remove from recent projects” context menu item for the “Projects open in Xcode” group in the main window projects table. (Thanks to John Daub for reporting this.)
  • False positives for the “Recommended compiler warning options” rule in cases where -Weverything is used to enable all warnings. (Thanks for Alex Curylo for reporting this.)
  • Crash when serializing diagnostics as XML.
  • Crashes when the checking process finishes while the user is dragging the log view scroll bar. (Thanks to Reinier van Vliet for steps to reproduce.)
  • Crashes when updating the error/warning markers in the checking log vertical scroll bar.
  • Potential hangs (infinite loops) during checking.
  • False negatives for the “Recommended VCS ignores” rule.

Version 0.9.6 (Beta)

August 01, 2014
  • A crash in the “Unnecessary Nib method” rule.

Version 0.9.5 (Beta)

August 01, 2014
  • New rule: Unnecessary Nib method.
  • Better detection of UIView objects when parsing Nib files.
  • A crash when opening documentation links in Xcode. (Thanks to Boris Tschirschwitz for steps to reproduce.)
  • The “Retaining or copying delegate” rule no longer warns about properties that are pointers to the application delegate object. (Thanks to Mike Ash for reporting this.)

Version 0.9.4 (Beta)

July 22, 2014
  • For projects that use CocoaPods, the “This project must be built as part of a workspace” option is now preselected in the project configuration “wizard” sheet.
  • The project configuration “wizard” sheet can now be manually opened from the “Project” menu.
  • We are now more eager to pre-emptively invalidate build log caches. This should avoid more situations where checking fails due to project changes that make our build log cache invalid.
  • Diagnostic suppression annotations that don't specify any rule names are now reported as warnings.
  • Removed the --usePCH (“Use precompiled header”) option. Precompiled headers are always used.
  • A crash when reading asset catalogs.

Version 0.9.3 (Beta)

June 26, 2014
  • New rule: Unprefixed Objective-C class.
  • Projects currently open in Xcode are also shown in the main GUI window's “recent projects” list.
  • The precompiled header processing is faster (it has been parallelized.)
  • The checking log now displays the types of precompiled headers (e.g. “ARC, Objective-C, armv7s”.)
  • Faux Pas now tolerates compiler warnings when parsing precompiled headers, and simply reports them in the checking log (checking is still interrupted upon compiler errors.)
  • Build configurations named “App Store” are now considered “release” configurations.
  • When opening files in Xcode, we now supply the --line argument to xed — the latest stable Xcode seems to work better with regard to this, but unfortunately it's still quite buggy (for newly opened files, it selects the specified line, but does not scroll the viewport to it, and this doesn't seem to work at all for files that are already open.)
  • Many rules have been renamed in order to make rule naming more consistent across the board.
  • False positives for the “Discarded opaque NSNotificationCenter observer” rule in cases where the value assignment was done as part of a variable declaration statement.
  • The “Copying property of mutable NSCopying type” rule no longer warns about properties with a class pointer type where the -copy method of the class in question is known to return a mutable instance (NSMutableString, NSMutableCharacterSet, NSMutableURLRequest).
  • Broken class name references in some diagnostic messages.
  • False positives for the “Unknown resource” rules in cases where asset catalog image set references used file extensions.
  • False positives for the “Unknown resource” rules for some Core Data managed object model files.
  • False positives for the “Possibly unused resource” rule for asset catalogs.
  • Failure to find an app icon in cases where the app icon asset catalog image set contained missing variants.
  • Empty string resource files are no longer considered invalid.

Version 0.9.2 (Beta)

June 17, 2014
  • New rule: Stringsdict file without matching string resource file.
  • New rule: Uncommented localized string.
  • Some rule descriptions have been improved slightly.
  • The Memory allocation without using sizeof rule is no longer enabled by default. (It emits false positives in many cases due to its lack of control/data flow analysis.)
  • The +[NSObject load] method without an @autoreleasepool rule is now only applied for Xcode targets whose minimum deployment target is OS X 10.7 or earlier, or iOS 5 or earlier. (In OS X 10.8+ and iOS 6+ the runtime automatically provides an autorelease pool in +load. Thanks to Mike Ash for helping with this.)
  • The configuration sheet in the GUI can now be resized vertically.
  • The “Fixed-format NSDateFormatter not using invariant (POSIX) locale” rule no longer warns about cases where the date template is generated via +[NSDateFormatter dateFormatFromTemplate:options:locale:].
  • Broken links in the info pane of the rule selection sheet. (Thanks to Oleg Grenrus for reporting this.)

Version 0.9.1 (Beta)

May 26, 2014
  • NOTE: Faux Pas now requires OS X 10.9 (Mavericks).
  • The “Constructor return type” rule now also warns about init methods whose return type is an explicit object pointer type (instead of the expected instancetype).
  • Bugs in interpreting asset catalog subfolder structures. (Thanks to Jaakko Kangasharju for reporting this.)

Version 0.9 (Beta)

May 19, 2014
  • New rule: Unidiomatic accessor naming.
  • The machine-readable diagnostics output now contains some HTML-formatted fields.
  • Added a “Report bugs” menu item under the “Help” menu.
  • The “Missing Translation” rule now finds more errors, and some false positives have been fixed (e.g. it now also checks unlocalized string resource files as well as .stringsdict files, and it should resolve the string resource file locales to check more correctly).
  • Some rule descriptions have been improved slightly.
  • Rule warnings are now more prominently displayed in diagnostics groups.
  • The “XIB Refers to unknown class” rule is not enabled by default anymore. (Produces too many false positives in some cases.)

Version 0.8.7 (Beta)

March 29, 2014
  • Warning messages from xcodebuild are now displayed in the checking log.
  • Added “Ignore indirect inclusions” option for the “Redundant inclusion directive” rule. (Allows you to get warnings only for inclusions redundant with the prefix header's direct inclusions.)
  • The “Instance method writes to static variable” rule now suppresses warnings for assignments occurring inside a dispatch_once() block.
  • Crashes when reading asset catalog data.

Version 0.8.6 (Beta)

March 17, 2014
  • Diagnostics are now sorted by file name and line number. (Thanks to Jouni Miettunen for suggesting this.)
  • We no longer invoke xcodebuild in order to clean the previous build products and intermediate files. (This makes the checking process just a tiny bit faster.)
  • Rules that need to detect NSString* values now correctly interpret usages of constants.
  • Compiler warnings (as opposed to errors) are now displayed with the yellow color in the checking log.
  • Removed the --forceBuildLogCacheUsage option.
  • False positives for the “Use of old, verbose Objective-C syntax” rule in cases where messages were being sent to a receiver of type id and Clang would make a (wrong) guess as to what method is being called. E.g. [NSLocale.currentLocale objectForKey:] would yield a warning about -[NSDictionary objectForkey:] being invoked. (Thanks to Jaakko Kangasharju for reporting this.)
  • Incorrect URL to the app backend server (crash reports can be sent again).
  • C++ standard library header inclusion errors for projects that use libc++.
  • For projects that build only arm64 executables, we now automatically interpret the source files using the armv7s architecture instead (we cannot support the arm64 architecture yet, due to the fact that Apple has not yet added the relevant code to the open source LLVM codebase.)
  • Concurrency-related bugs when parsing XIB files, leading to false positives and false negatives.
  • Inaccurate detection of prefix header file paths, leading to false negatives in projects where the prefix header file extension was not .pch.
  • If multiple precompiled headers were produced for a project, Faux Pas would only check the AST of one of them (it now checks all of them).
  • The project configuration help sheet no longer attempts to read workspaces under hidden directories.
  • Crashes when interpreting some string literals.
  • Crashes when the stdout/stderr pipes are broken.

Version 0.8.5 (Beta)

March 04, 2014
  • Added menu items for the “Select Rules…” and “Configure…” actions, with the respective key equivalents ⇧⌘R and ⇧⌘C.
  • When determining the existence of a resource file, the “Base” locale is now checked along with the development region locale.
  • We now correctly find an icon for a project whose main app target uses an image asset catalog for the app icon.
  • The pre-filled feedback email subject now includes the app version number.
  • The project icon is now added as a base64-encoded PNG into the serialized diagnostics output.
  • Version control information (VCS name and current revision) is now added into the serialized diagnostics output.
  • Added section “Manually Invoking Faux Pas in Xcode” into the manual.
  • Added support for the Chocolat code editor.
  • The “Unprefixed category method” rule now ignores setter methods by default (this can be changed via the ignoreSetters rule option.)
  • Removed the “Using multiple GCD queue priorities” rule.
  • Some xcodebuild arguments used by Faux Pas are now hardcoded (always set) instead of simply defining them as the default value for the extraXcodebuildArgs option.
  • The “Discarded opaque NSNotificationCenter observer” rule's suppressViaVoidCast option is now enabled by default.
  • Bugs in the handling of moved or deleted projects in the “recent projects” list. (Thanks to Jouni Miettunen for reporting this.)
  • The “recent projects” list was erroneously saved under ~/Library/Caches/ instead of under ~/Library/Application Support/.
  • Bugs in reading image asset catalogs. This will fix false negatives/positives in rules that check for image asset catalogs.
  • Detection of the GNU __null extension when determining whether a cursor is a null literal.
  • False positives for the “Undetached delegate” rule for files compiled as Objective-C++. (Thanks to Jouni Miettunen for reporting this.)
  • False positives for the “Discarded opaque NSNotificationCenter observer” rule in cases where the observer-returning method's return value was given as an argument to a function call or ObjC message expression (this might mean that the invoked routine is responsible for saving the observer object somewhere.)
  • Configuration GUI bugs where in some cases changes were not applied when they should have, or vice versa.
  • XIBs are now read and parsed each time the project is checked.
  • The “Missing NSNotificationCenter observer detachment” rule no longer warns about cases where the notification observer is the class object (a self reference in a class method).
  • Changing the workspace or scheme options now invalidate build log caches.
  • Diagnostics serialization will no longer lock up the GUI.
  • We now detect NSAscendingSortIndicator and NSDescendingSortIndicator as system-provided built-in image names.

Version 0.8 (Beta)

February 12, 2014
  • New rule: Macro definition for literal value. (Thanks to Jouni Miettunen for the suggestion.)
  • Diagnostic listing views now have a “Configure this rule” button that makes it easy to go and adjust the configuration options of the rule that emitted the displayed diagnostics.
  • We now present a simple “configuration wizard” sheet when projects without an associated Faux Pas configuration file are opened.
  • The “Not using dot syntax” rule is now called “Dot syntax usage” and can be configured to enforce usage of dot syntax solely for accessors declared with the @property syntax.
  • The “Code refers to unknown resource” rule now also checks +[NSImage imageNamed:] invocations.
  • The “Code refers to unknown resource” rule is now able to check some cases where the arguments to resource loading API methods are not just simple string literals: e.g. [UIImage imageNamed:(condition ? @"a" : @"b")] or [UIImage imageNamed:[NSString stringWithFormat:@"%@_image", @"an"]].
  • Now using a newer version of libgit2.
  • The “Missing image resolution variant” rule will no longer warn about vector images.
  • Some crashes in the GUI when error messages were being added to the log text view.
  • Some crashes due to unsynchronized concurrent usage of libgit2 APIs.
  • Some bugs in the configuration GUI.
  • The description of the “Possibly unused Objective-C method” rule incorrectly said that private methods will not be warned about, when in fact the opposite is true: the rule warns only about private methods.
  • Broken path resolution for some compilation unit source files.
  • False positive for the “Not using the null coalescing operator” rule where a block-typed Obj-C method argument was null-checked and then called if non-null.
  • The “Unnecessary NULL check before free()” rule no longer warns about NULL checks expanded from macros (some macros from system headers, e.g. DTSendSignalFlag(), can trigger this.)
  • The “Casting the return value of malloc()” rule no longer warns about casts expanded from macros (some macros from system headers, e.g. DTSendSignalFlag(), can trigger this.)
  • Extraction of code snippets for diagnostics in some rare cases.
  • The “Not using the null coalescing operator” rule now has the “Recommended” tag.

Version 0.7.5 (Beta)

January 22, 2014
  • New rule: Absolute path in build setting value.
  • Rule configuration options are now set in the rule selection GUI dialog.
  • More granular reporting of checking operation progress.
  • Parsing of XIB files is now much faster (it has been parallelized.)
  • Application of rules before and after the checking of code is now faster (it has been parallelized.)
  • Warning messages are now indicated in the checking log vertical scroll bar, in the same way error messages already are.
  • The checking log scroll bar markers for errors (and now also warnings) will also be shown when the scroll bar is in the “overlay” mode (i.e. when no mouse is present.)
  • We now remember the sizes of the rule selection and configuration sheets.
  • The current path of the application is automatically used when generating and installing the CLI wrapper script in /usr/local/bin/fauxpas (instead of assuming /Applications/FauxPas.app.)
  • The “Project reference to file using absolute path” rule can now be configured to allow absolute path references to system files (e.g. system frameworks).
  • Some error messages that were printed only to stderr are now also shown in the GUI log text view.
  • False positives for the “Weak reference to top-level XIB object” rule in cases where a lifetime attribute was not specified in a property declaration. (Thanks to Marco Arment for reporting this.)
  • False positives for the “Retaining property of immutable NSCopying type” rule in cases where a property declaration was declared readonly. (Thanks to Marco Arment for reporting this.)
  • False positive for the “Fixed-format NSDateFormatter not using invariant (POSIX) locale” rule in cases where +localeWithLocaleIdentifier: was used instead of -initWithLocaleIdentifier:. (Thanks to Martin Richter for reporting this.)
  • False positives for the “Code refers to unknown resource” rule in cases where resources were being read from a bundle other than the main bundle.
  • False positives for the “+[NSObject load] method without an @autoreleasepool” rule in cases where the autorelease pool was initialized explicitly.
  • The “Missing translation” rule will no longer consider the string todo a “missing value” placeholder for Spanish and Portugese translations (“Todo” is an actual word in these languages.)
  • The “Dynamic library install name” rule no longer warns about system libraries, even if they are referenced using absolute paths.
  • We now find the correct Info.plist file, even when it's preprocessed as part of the build. This fixes many false positives.
  • Source code interpretation errors for projects whose prefix header did not have the .pch file extension.
  • The “Project reference to file outside version control root” rule now ignores references to any system paths.
  • Crashes when interpreting code containing certain kinds of illegal string literal constructs.
  • The “Assignment of literal zero to pointer” rule no longer warns about assignments that cast a literal zero to a pointer type.
  • App target icons in the icns format are now correctly found.
  • False positives for rules that check for resource file existence in cases where an iconset was being compiled into an icns file during builds.
  • Renamed the “Retaining property of immutable NSCopying type” rule to “Non-copying property of immutable NSCopying type” (it warns about assigning properties as well.)
  • Diagnostics produced by the “Xcode build configuration file overwrites previously set value” rule will now have the severity “concern” (changed from “warning”.)

Version 0.7 (Beta)

January 08, 2014
  • New rule: XIB User-defined runtime attribute mismatch.
  • New rule: Retaining or copying delegate.
  • New rule: Use of API not available in the minimum deployment target.
  • Error messages in the log text view are now indicated with red markers in the vertical scroll bar, and the number of errors in the log is shown as a badge in the sidebar.
  • UI responsiveness improved dramatically during checking.
  • Now using Clang 3.4 final release. (Reverted from a newer version for stability, as well as for improved compatibility with the version of Clang that ships with the latest Xcode.)
  • The “Recommended compiler warning options not used” rule now recommends more useful compiler warning flags.
  • The “Reserved symbol prefix” rule can now be configured to omit warnings about two-character prefixes that are not used by any known system frameworks.
  • The “Possibly unused Objective-C method” rule now warns only about private methods (it was producing way too many false positives otherwise).
  • The app can now optionally send an anonymous system profile when it asks for updates from the server.
  • The onlyIfIvarAvailable option of the “Setter invocation in init or dealloc method” rule is now enabled by default.
  • The format of the JSON and Property List outputs has changed: there is now a root dictionary, and the diagnostic objects can be found under the diagnostics key.
  • Dropped support for the old “Xcode 4 and before” XIB format.
  • Faulty detection of whether ARC is enabled for a compilation unit. (Thanks to Jouni Miettunen for reporting the bug.)
  • False positives for the “Use strong instead of retain” rule in cases where a retain-using property declaration resided in a header file whose associated implementation file was being compiled without ARC.
  • Faulty detection of init methods. (Thanks to Jouni Miettunen for reporting the bug.)
  • False positives for rules that depend on matching of Objective-C properties to their backing instance variables. (Thanks to Jouni Miettunen for reporting the bug.)
  • False positive for the “Undetached delegate” rule in cases where the delegate property is declared as weak.
  • False negatives for the “Recommended compiler warning options not used” rule: warnings were not emitted if a recommended warning flag was being disabled via a -Wno-flag argument.
  • The “XIB Refers to unknown class” rule will no longer warn about classes defined in linked libraries.

Version 0.6.5 (Beta)

December 10, 2013
  • Support for image asset catalogs. (This means that the “Code/XIB refers to unknown resource” rules will no longer warn about references to asset catalog image set names, and that the “did you mean…” suggestions also take them into account.)
  • Experimental diagnostics filter in the GUI. Use filters like file=MY*ViewController* or impact=functionality to filter the diagnostics displayed in the list.
  • New rule: Setter invocation in init or dealloc method.
  • New rule: Casting the return value of malloc().
  • New rule: Memory allocation without using sizeof.
  • New rule: Throwing an Objective-C exception.
  • New rule: Incorrect placement of build setting value.
  • New rule: Identifier naming.
  • New rule: Assignment of weak-unavailable object to a weak property. (OS X only)
  • New rule: Dynamic library install name. (OS X only)
  • Added “Reveal in Finder” to the recent projects list context menu.
  • We now detect resource files that are dynamically generated via a “Run Script” build phase, as long as the build phase specifies the output path, and writes the file using the output path variable.
  • The “Identifier name is reserved” rule now allows configuring whether to check for C standard and/or POSIX standard reserved name violations.
  • Intermittent crashes (at least on Mavericks) when presenting diagnostics in the GUI. (This was due to parallelized usage of a non-thread-safe third-party library (GRMustache), and should now be fixed due to us using a newer thread safe version of that library.)
  • The “IBOutlets in public interface” rule now only emits warnings for classes that are the “File's Owner” for a XIB with the same basename, and for IBOutlet properties that contain connections in such XIBs. This should fix many false positives.

Version 0.6 (Beta)

November 26, 2013
Known issue: The arm64 CPU architecture is currently unsupported, due to the fact that Apple has yet to commit support for it into the open source LLVM codebase. This should not be a problem, however, if the project has been configured to build for other architectures as well (e.g. armv7 or armv7s.)
  • The minimum system requirement is now Mac OS 10.8 (Mountain Lion). (I think this makes sense for a developer tool due to the fact that the latest Xcode has the same requirement.)
  • Dark, sexy and dangerous GUI theme (and new layout) for the projects window.
  • New rule: Constructor return type. (Thanks to Jouni Miettunen for the suggestion.)
  • New rule: Possibly unused Objective-C method.
  • New rule: Block-typed declaration without typedef.
  • New rule: Direction of ordered comparison operators.
  • New rule: Discarded opaque NSNotificationCenter observer.
  • New rule: Unnecessary NULL check before free().
  • New rule: Weak reference to top-level XIB object.
  • Now using Clang 3.5 SVN revision 195416.
  • The “Identifier name is reserved” rule now also checks macro definitions.
  • The “did you mean…” suggestions are improved. (Thanks to Jouni Miettunen for reporting some incorrect suggestions.)
  • Better UX in the GUI when no diagnostics are found (a “no diagnostics” view is shown).
  • We now build and compile the project using a single CPU architecture.
  • You can now scroll the progress log in the GUI without it constantly moving the scroll position to the bottom.
  • The --extraCompilerArgs argument now also affects the prefix header precompilation.
  • We now use the CODE_SIGNING_ALLOWED=NO argument for xcodebuild by default (this can be disabled in the configuration.) This should help avoid many code signing -related problems when Faux Pas is used to check e.g. Release builds.
  • We now use the RUN_CLANG_STATIC_ANALYZER=NO argument for xcodebuild by default (this can be disabled in the configuration.) This reduces the number of prefix headers we have to precompile for projects that run static analysis as part of their build.
  • The "Restricted direct method call" rule is now less strict: by default, it does not warn about any calls to "restricted" methods, as long as they originate from a subclass. The allowInSubclass option can be set to NO to revert to the previous behavior (where warnings are emitted for all calls except ones from an overridden version of the called restricted method.)
  • The “Using GCD queue priority other than the default” rule is now “Using multiple GCD queue priorities,” which allows you to use any one priority throughout your code.
  • The "Recommended VCS ignores" rule no longer recommends ignoring Podfile.lock.
  • The "Build settings set in Xcode GUI" rule no longer warns about conditional whitelisted settings (e.g. if CODE_SIGN_IDENTITY is whitelisted, it won't warn about CODE_SIGN_IDENTITY[sdk=iphoneos*].)
  • The "Assignment of literal zero to pointer" rule no longer warns about @0 (the NSNumber literal zero.)
  • The "Project reference to file ignored in the VCS" rule no longer warns about references to files under the Pods folder (e.g. libPods.a.)
  • In order to avoid conflicts with the modules cache used by Xcode's version of Clang, we use our own. (The --useOwnModulesCache option can be used to disable this.)
  • Display the “Reload project?” dialog only once for each change in the Xcode project.
  • Rules that require parsing and interpreting the precompiled header were not working.

Version 0.5.6 (Beta)

September 25, 2013
  • New rule: Assignment of literal zero to pointer. (Thanks to Janne Käki for the idea.)
  • Code symbol links can now be opened in external documentation browser apps (currently only Dash is supported.)
  • Support for projects that use modules.
  • Now using Clang 3.4 SVN revision 191137.
  • When displaying source code snippets in the GUI, we now use the indentation settings set in the Xcode project.
  • Removed the XIB uses autolayout rule (Xcode now has this check for projects that have a pre-iOS 6 minimum deployment target).
  • Removed the Collate similar diagnostics option (we group diagnostics based on the rule that emitted them).
  • Blurry app icons in some cases.
  • False positives for Default.png launch image variants in the Missing device type resource rule.
  • False positives for the Code refers to unknown resource rule.

Version 0.5.5 (Beta)

September 18, 2013
Remember: you can report bugs and send feedback via the Help menu in the GUI. Thanks!
  • New rule: Problematic release build compiler arguments. (Thanks to Jouni Miettunen for suggesting this)
  • Individual configuration options can be reset to their default values from the GUI context menu.
  • We now support the Xcode 5 XIB format.
  • “Suppressing diagnostics” section in the documentation.
  • The rule tag selection control in the GUI now has a context menu that allows selecting all tags or removing all selections.
  • We now support interpreting CoreFoundation string literals (e.g. CFSTR("Hello world")) as well as the CoreFoundation localization routine CFBundleCopyLocalizedString() and its macro variants. This improves functionality for all rules that deal with code localizations or string literals.
  • The "file content snippets" shown for diagnostics are now multi-line in the GUI.
  • If the “Ask to save project configuration” preference is set, present the prompt also when quitting the app (i.e. not just when the project window is closed.)
  • The machine-readable diagnostics output now contains the ruleWarning field.
  • Added the ⌘R keyboard shortcut for the “Reload project from disk” menu item. (Thanks to Jouni Miettunen for the suggestion)
  • When reloading the project from disk, Faux Pas now confirms the action if any diagnostics are shown (these will be cleared when the project is reloaded).
  • The Problematic release build settings rule diagnostics explain why specific build settings should be changed.
  • Parsing of comma-separated string array values in CLI arguments now supports escaped commas.
  • If the “Ask to save project configuration” is set, we don't present the prompt if the configuration has not been changed from the default values.
  • We now ask the system to prevent sleep and App Nap during the time we are performing checks on a project.
  • The default CLI usage output (when no arguments are given) is now much shorter. (You can get the full usage output with the command fauxpas help)
  • The XIB refers to unknown resource, XIB Refers to unknown class, and Possibly unused resource rules now also inspect storyboards.
  • The Using the +[NSObject new] initializer rule can be configured to warn about [[NSObject alloc] init] or about [NSObject new], depending on your style preferences.
  • The corners of the app icons shown in the GUI are now rounded in the iOS 7 style.
  • Removed the Unnecessary variable rule (it's not very useful.)
  • The Possibly unused resource and Missing image resolution variant rules no longer complain about default launch image files (Default.png and its variants.)
  • When "Reload project from disk" is used in the GUI, retain any changes made to the configuration. (Thanks to Jouni Miettunen for reporting this)
  • The Recommended VCS ignores rule now reports directory ignore paths as dir/ instead of dir/*. (Thanks to Jouni Miettunen for reporting this)
  • The “Open in Xcode” menu item sometimes did not work.
  • False positive for the Not using the null coalescing operator rule: blockPointer ? blockPointer() : other
  • False positive for the Unprefixed category method rule: + (void)load
  • Some parts of CLI output that were printed using the black color (which is invisible if the terminal background color is black.)
  • Storyboard files are now excluded in the Possibly unused resource rule.
  • Broken internal links in the GUI documentation window.
  • If the focus is still in a text field in the GUI array-valued configuration option editor window, save the pending changes when the "Save" button is pressed and the sheet dismissed.

Version 0.5 (Beta)

September 04, 2013
  • New rule: Project reference to file using absolute path. (Thanks to Martin Richter for the idea!)
  • New rule: Project reference to file ignored in the VCS.
  • New rule: Missing device type resource.
  • New rule: Unprefixed category method.
  • Added basic documentation. This is available through the help menu in the GUI, or by running fauxpas docs in the CLI.
  • We now use aliases/bookmarks to track the projects in the 'recent projects' list, which means that we will still find them if you move them within the filesystem.
  • You can now remove projects from the 'recent projects' list via the context menu.
  • We now use libgit2 to check for ignored paths instead of running the git executable in a subprocess. This way we don't have to require a certain version of Git to be installed on the system.
  • We now have a more comprehensive list of Objective-C prefixes used in the system frameworks.
  • We now detect more Xcode project target product types.
  • The Problematic release build settings rule now warns if "Run Clang Static Analyzer" is not enabled.
  • Better build log cache invalidation: we now invalidate the caches if the project's .xcconfig or .pch files change, or if the temporary build products directory has been cleared. This should help avoid common errors when trying to check a project.
  • We now handle situations where the name of the Xcode project, the names of any build configurations, or the names of any targets contain non-ASCII unicode code points. It is however recommended that such names be avoided (due to the mangled xcodebuild output that it causes), so we display warnings to that effect when loading projects. (Thanks to Vihtori Mäntylä for triggering this issue!)
  • The Possibly unused resource rule no longer warns about "unused" folder references.
  • When saving the configuration in the GUI, the FauxPasConfig folder is now automatically created if it doesn't already exist.
  • The project window's previous represented .xcodeproj file is reset when a second project is opened.
  • The Reference to file outside version control root rule no longer complains about references to files under /System/Library/Frameworks/.
  • Regression where Faux Pas was trying to talk to Xcode Developer Preview 3 instead of just regular plain old Xcode.
  • Some false positives for the Fixed-format NSDateFormatter not using invariant (POSIX) locale rule.
  • The Recommended VCS ignores rule no longer recommends profile to be ignored.
  • If the -scheme xcodebuild argument is specified, do not use the -target argument.
  • Find the Info.plist file even when the INFOPLIST_FILE build configuration value contains an absolute path.
  • Issue where the order of some array-typed options was mixed up when saving configuration files.
  • Lots of links to Apple's documentation (their URLs changed in almost all cases).

Version 0.4 (Beta)

July 30, 2013
  • New rule: Possibly unused resource.
  • New rule: Duplicate resource.
  • New rule: Suspicious missing bundle resources.
  • New rule: Restricted method override.
  • New rule: Undetached delegate.
  • New rule: Globally caching a thread-unsafe class instance.
  • New rule: Use strong instead of retain.
  • New rule: Not using the null coalescing operator.
  • New rule: Using GCD queue priority other than the default.
  • New rule: XIB Refers to unknown class.
  • New rule: Unnecessary variable.
  • New rule: Ignored error value.
  • New rule: +[NSObject load] method without an @autoreleasepool.
  • New rule: Missing API usage description.
  • We now support opening file links in code editors other than Xcode (AppCode, Sublime Text, TextMate, BBEdit, TextWrangler, and MacVim).
  • When the GUI app is focused, we check if the Xcode project has changed on disk and offer to reload it if necessary.
  • New CLI argument --onlyRules allows you to apply only specific rules, overriding all other rule selection options (selection via tags, exclusion).
  • The project window now supports full screen mode.
  • A Beta registration dialog is now shown on (GUI) app launch.
  • We now determine NSLocalizedString arguments better (e.g. we understand that NSLocalizedString(condition ? @"a" : @"b", nil) can end up using either @"a" or @"b" as the key).
  • Some fairly significant performance optimizations (this will be perceivable as "lack of slowness" in some functions rather than improved speed, however).
  • We now use a much more robust a method for resolving final build setting values. This makes opening projects slightly slower, however.
  • We now use the iTunesArtwork file to draw the app icon in the UI (if this file is available).
  • Improved matching of translation string border punctuation.
  • The base development region will be used as the "comparison point" for diagnostics that compare translations to each other.
  • GUI windows will now be opened where the previous primary window was.
  • All diagnostics for the same rule (that have the same severity, impact and confidence) will now be collated into the same group in the UI
  • The Redundant inclusion directive rule now ignores redundant system header inclusions by default, but this can be reverted with an option switch.
  • The NSLog() used in release build and Method swizzling rules are applied only to application targets.
  • We now support .iconset bundles when reading the application icon.
  • We now support TIFF files with embedded retina resolution variants.
  • If the verbose option is on, we now print the xcrun and xcodebuild paths we use.
  • Project-specific configuration files must now have the file extension .fauxpas.json or .fauxpas.plist. The fauxpas.{json,plist} file in the project root folder will not be read anymore — configuration files must now be inside a folder called FauxPasConfig (in the project root folder) or referenced by the Xcode project.
  • The CLI command is now called fauxpas (previously it was faux).
  • Removed the private beta time limit.
  • The Unknown resource reference rules no longer warn about some system image names.
  • The Translation format mismatch and Translation border punctuation mismatch rules no longer consider translations that have the value "todo" or "fixme".
  • The “Project” menu item would not show up after the project window had been closed and opened again.

Version 0.3 (Beta)

May 20, 2013
  • New rule: Fixed-format NSDateFormatter not using invariant (POSIX) locale.
  • New rule: Instance method writes to static variable.
  • New rule: Copying property of mutable NSCopying type.
  • The faux command can now be executed in an Xcode "Run Script" build phase with only the check argument. The project path, target, and build phase will be determined from the environment variables, and the xcode output format will be selected. This allows Xcode to pick up and display the diagnostics from our tool.
  • Rules can now be selected by their tags in the GUI.
  • Rules can now be excluded individually (both from the CLI and the GUI). This is useful when you want to for example enable all rules with specific tags, but exclude some specific rules individually. To exclude a rule in the GUI, right-click (or command-click) on it and select "Exclude rule" from the context menu.
  • The GUI will prompt you to save any configuration changes to the project when closing the window.
  • The currently open project can be reloaded from disk in the GUI (the option is under the "Project" menu).
  • Now using Clang SVN revision 180787 (bleeding edge, baby!).
  • Type name presentation is better (for example, previously we would refer to id<SomeProtocol> as <Unknown type>*).
  • We now match file inclusions by their full paths.
  • We no longer warn about "redundant inclusions" in files that are themselves included in the precompiled prefix header.
  • We now exclude only builtin and system header code from checks (previously we excluded all code outside the project's version control root, or the project root if we could not determine the version control root)
  • We now consider a project "localized" if it contains at least one string resource (.strings) file (previously we would only consider a project "localized" if it supported more than one language). This change enables string resource file checks also for projects that support only one language.
  • Better error messages when Xcode or some of its command-line tools cannot be found.
  • We now use a different “derived data” folder than what xcodebuild would use by default. This prevents us from messing with regular builds, and the build folder will no longer be created into your project directory.
  • We now prevent recursive invocations of Faux Pas, which makes is possible to run it in an Xcode "Run Script" build phase
  • The Default rule tag has been renamed to Recommended.
  • Fixed some false positives for the "Not using dot syntax" rule.
  • Fixed some false positives that were due to macro expansions that originated from system headers. This fix has been implemented by simply suppressing some diagnostics for code that has been expanded from a macro.

Version 0.2.2 (Beta)

April 23, 2013
  • New rule: Overridden +[NSObject initialize] method in a category.
  • New rule: Category used for 'private' declarations.
  • New rule: Recommended VCS ignores. (Works only with Git 1.8.2+)
  • We now correctly determine the default lifetime qualifier (assign) for properties when ARC is not used.
  • We now match properties and ivars more accurately.

Version 0.2.1 (Beta)

April 15, 2013
  • New rule: Ordered comparison of pointer and zero.
  • New rule: Translation format mismatch.
  • New rule: Duplicate translation.
  • New rule: Unused translation.
  • New rule: Method swizzling.
  • New rule: Missing image resolution variant.
  • The UI String not localized rule now checks both the standard localization string getter APIs (NSLocalizedString et al) as well as custom routines (if configured).
  • Integer literal values are determined in a more robust way.
  • Diagnostic information should not be missing in the command-line interface output.
  • Fixed a crash that sometimes occurred when closing window sheets.

Version 0.2 (Beta)

April 12, 2013
  • Initial private beta release.