- Support for installing via CocoaPods has been removed.
- None.
- None.
- None.
- None.
- Fix parsing of Xcode 16 projects.
- None.
- None.
- Enums with the
@main
attribute are now retained. - Fixed issue in Swift 6 where declarations that override external type members are incorrectly identified as unused.
- Unused public/exported imports are excluded from the results even if unused in the declaring file as the exported symbols may be referenced in other files, and thus removing the import would result in a build failure.
- Removed support for Swift 5.8/Xcode 14.3.
- Added baseline support. Write a baseline with
--write-baseline <file>
and use it with--baseline <file>
.
- Fix local Swift package support.
- None.
- Added GitHub Actions output formatter.
- Disable unused import analysis for files retained with
--retain-files
. - Fix handling of Xcode project paths containing spaces.
- Fix bug causing non-deterministic results for structs with implicit initializers.
- None.
- Unused import detection is now enabled by default.
- Added the
--retain-encodable-properties
option to retain all properties onEncodable
types only. - Added the
--xcode-list-arguments
option to pass additional arguments toxcodebuild -list
. - Added the
--skip-schemes-validation
option to skip validation of Xcode schemes.
@State
and@Binding
properties are now excluded from assign-only property analysis.- Unused imports are now detected in files containing no references.
- The command-line parsing strategy for options that were delimited by a pipe or comma has changed. These options are now parsed as a space delimited list, e.g
--option "arg1" "arg2"
. - The option
--external-encodable-protocols
is deprecated, use--external-codable-protocols
instead.
- Add experimental unused import analysis option
--enable-unused-import-analysis
. - Add experimental automatic code removal option
--auto-remove
. - Assign-only properties on structs with synthesized initializers are now detected.
- Added the
--retain-codable-properties
option to retain all properties on Codable types. - Results for redundant protocol conformances will now list the inherited protocols that should replace the redundant conformance, if any.
- Added the
--retain-files
option to retain all declarations within the given files.
- Subscript functions required by
@dynamicMemberLookup
are now retained. - A newline is no longer printed before non-Xcode formatted results.
--external-codable-protocols
now retains enums that conform toCodingKey
.- Fix public accessibility false-positive for actors.
- Fix public accessibility false-positive for property wrappers.
- Fix public accessibility false-positive for declarations referenced from a public
@inlinable
function. - Fix public accessibility false-positive for function parameter default values.
- Fix public accessibility false-positive for inherited and default associated types.
- Fix public accessibility false-positive for generic types used in the generic argument clause of a return type.
- Fix public accessibility false-positive for retained/ignored declarations.
- Fix public accessibility false-positive for enum case parameter types.
- Fix public accessibility false-positive for properties initialized with generic specialized types.
- Types associated with assign-only properties are no longer identified as unused until the property is removed.
- Classes referenced in Info.plist as
NSPrincipalClass
andWKExtensionDelegateClassName
are now retained.
- None.
- Add support for indexing plist files via the generic
--file-targets-path
option.
- None.
- None.
- Added the
--relative-results
option to output result paths relative to the current directory. --quiet
now silences warnings too.
- Fix redundant public accessibility analysis for protocol members declared in extensions that are referenced cross-module where the protocol itself is not.
- Remove checks causing errors when scanning multi-platform projects.
- Additional arguments passed through to xcodebuild/swift are now quoted automatically as needed.
- None.
- SwiftUI previews (
PreviewProvider
) are no longer retained by default. Retain them with--retain-swift-ui-previews
.
- Fix retaining members of public generic protocol extensions with
--retain-public
.
- None.
- Swift 5.9 support.
- Path forward slashes in JSON output formats are no longer escaped.
INDEX_ENABLE_DATA_STORE
is now forcefully enabled as it's required for indexing in some cases.
- Swift 5.7 and macOS 12 are no longer supported.
- Reduced indexing and analysis runtime by ~60%.
- Fix indexing multi-platform projects such as those containing watchOS extensions.
- Subclasses of CLKComplicationPrincipalClass referenced from an Info.plist are now retained.
- None.
- None.
- Revert SwiftPM binary command plugin. Sorry folks, but SwiftPM doesn't provide the appropriate permissions for Periphery to build projects in the sandbox.
- None.
- Add the
--retain-objc-annotated
option. - Added support for SwiftPM binary command plugin.
- None.
- None.
- Improve indexing performance when multiple index stores are provided.
- Added
--external-test-case-classes
option to allow external types to be treated as XCTestCase subclasses. - Comment commands now support trailing comments, e.g
// periphery:ignore - explanation of why this is necessary
- Fix handling of relative paths in
--file-targets-path
. - Fix redundant public accessibility false positives when
--retain-objc-accessible
is enabled.
- None.
- None.
- Fix index/report exclude regression.
- None.
- Significantly improve the performance of index and report filtering.
- Moderate improvements to indexing and analysis performance.
COMPILER_INDEX_STORE_ENABLE
is now forcefully enabled as it's required for indexing.- Fix false positive where a
typealias
is extended but otherwise unused. - Fix redundant accessibility analysis for function metatype arguments.
- Fix redundant accessibility analysis for property types inferred from a function call initializer.
- None.
- None.
- Fix JSON deserialization crash caused by unrelated warnings in the output from
xcodebuild -list -json
. - Retain all
@MainActor
annotated types and their constructors to workaround a bug in Swift 5.7. - Retain all constructors on types instantiated via
Self(...)
to workaround false positives caused by a bug in Swift. Set<AnyCancellable>
andNSKeyValueObservation
are now included in the default values for--retain-assign-only-property-types
.- Improve accuracy of guard-let shorthand workaround.
- Fix unused parameter false positive result for parameter used within a nested computed variable.
- None.
- Add CodeClimate output formatter available via the
--format codeclimate
option. - Add support for third-party build systems, such as Bazel.
- Enums that conform to SwiftUI special Provider protocols are now retained, as was already the case for structs and classes.
- None.
- Add
clear-cache
command. - Add support for analyzing local SwiftPM packages in Xcode projects.
- AnyCancellable properties are now excluded from assign-only property analysis.
- None.
- None.
- Fix retaining CodingKeys enum in a struct whose Codable conformance is declared in an extension.
- Used tagged dependencies to prevent "unsafe build flags" error from SwiftPM.
- Fix old index store use by including Xcode version hash in DerivedData directory name.
- None.
- None.
- Fix guard-let shorthand syntax.
- Fix accuracy of unused parameter analysis for overridden and protocol conforming functions.
- Fix retaining
buildFinalResult(_:)
andbuildLimitedAvailability(_:)
result builder methods.
- None.
- None.
- Fix error building with SwiftPM and Swift 5.7:
the target 'PeripheryKit' in product 'periphery' contains unsafe build flags
- Fix unused parameter analysis for shorthand if-let syntax.
- Workaround Swift shorthand if-let syntax bug (swiftlang/swift#61509). Global properties are not handled by this workaround.
- Fix retaining inferred associated types.
- Fix redundant public accessibility analysis for types used in closure signatures.
- Conflicting index store units are now detected and result in an error.
- Swift 5.6 or later is now required.
- Add
--report-include
option to filter reported violations with an allowlist. - Support for reading Xcode 14 generated index stores.
- None.
- Swift 5.5 or later is now required.
- Add support for Swift 5.6.
- Output is now line buffered when writing to a fifo/pipe.
- IBSegueAction annotated functions are now retained.
- None.
- None.
- Fix another crash while indexing.
- None.
- None.
- Fix a crash while indexing.
- None.
- None.
- Fix false positive when protocols requirements are satisfied in another file from the one that declares the conformance.
- Fix redundant public accessibility analysis of enum associated value types.
- Fix redundant public accessibility analysis of aliased types.
- Comment commands can now retain redundant protocols.
- Fix excluding paths that contain relative components, e.g
--report-exclude "../file.swift"
.
- None.
- None.
- Fix false positive when a class inherits a class with the same name from another module.
- Retain parameters on protocol function members implemented by an external type.
- Unused function parameters on unimplemented protocol function members are now retained, as the function may still be referenced from an existential type.
- Fix incorrect redundant public accessibility on a public superclass when a subclass is used in another module.
- Result Builder static methods are now retained.
- Assign-only properties that are assigned multiple times in the same method are now correctly identified as assign-only.
- Fix issue where properties with identical names at different scopes could cause inconsistent results from assign-only property analysis.
- None.
- None.
- The
DEVELOPER_DIR
environment variable is now respected. - Updated
XcodeProj
dependency resolves building with Xcode 13.
- None.
- None.
- Fix comment ignore command for properties with multiple bindings.
--index-exclude
and--report-exclude
options now accept Bash version 4 glob syntax. Therefore, recursive globs "**" are now supported.
- SwiftUI @(UI/NS)ApplicationDelegateAdaptor wrapped properties and now retained.
- All file types can now be excluded from indexing.
- None.
- None.
- None.
- Fix crash caused by cyclic inherited type references.
- None.
NSEntityMigrationPolicy
subclasses referenced by.xcmappingmodel
are now retained.ValueTransformer
subclasses referenced by.xcdatamodeld
are now retained.- Properties of types directly or indirectly conforming to
Encodable
are now automatically retained. The--external-encodable-protocols
option has been added to instruct Periphery that the specified external protocols also inheritEncodable
.
- Fix
--index-exclude
resulting in an error about unindexed files. - Fix an error during guided setup when
xcodebuild
is not setup for command line use. CodingKey
enums ofEncodable
conforming types are now also retained likeDecodable
types.- Fix detection of assign-only properties when the getter is shadowed by a parameter with the same name.
- Removed support for Swift <= 5.2.
- Using an index store that does not contain complete data for the requested targets now results in an error.
- The
--index-store-path
option now implies--skip-build
. - Guided setup now omits the
--targets
option from the generated command when 'all' targets are selected for SwiftPM projects. - Add option to guided setup to save the configuration to '.periphery.yml'.
- Fix parsing
INFOPLIST_FILE
references containing$(SRCROOT)
.
- None.
- None.
- Fix erroneous results for explicit 'getter' accessors.
- None.
- None.
- Fix an issue where scans with many schemes could breaking loading of the index store.
- None.
- Add redundant public accessibility analysis.
- Add arm64 support.
- Add
--retain-assign-only-property-types
option to retain assign-only properties based on their type. - Declarations in an entry point file (e.g main.swift) are no longer blindly retained, even if unused.
- Additional arguments passed to xcodebuild can now override the default set of environment based arguments.
- Fix issue where protocol property references could be incorrectly associated with the getter/setter rather than the property itself, leading to erroneous results.
- Fix unused parameter false positive result for identical function signatures at the same location in different files.
- None.
- None.
- Retain constructors of generic structs that cannot be identified as used due to Swift bug SR-7093.
- None.
- None.
- In Swift 5.3 and lower, all optional protocol members are now retained in order to workaround a Swift bug. This bug is resolved in Swift 5.4.
- Cases of public enums are now also retained when using
--retain-public
. - Open method parameters are now also retained when using
--retain-public
. - Empty public protocols that have an implementation in extensions are no longer identified as redundant.
- Foreign protocol method parameters are no longer identified as unused.
- None.
- None.
- Fix ignore comments on protocol declarations.
- The
--xcargs
option has been removed, and superseded by passing arguments following the--
terminator. E.gperiphery scan --xcargs --foo
is nowperiphery scan -- --foo
. This feature can also be used to pass arguments toswift build
for SwiftPM projects.
- None.
- None.
- None.
- None.
- Improve unused parameter location identification.
- None.
- None.
- Fix indexing failure on unhandled declaration kinds, such as 'commentTag'.
--retain-objc-accessible
also retains private declarations explicitly attributed with@objc
.
- None.
- None.
- Fix crash during indexing phase.
- JSON and CSV output formats have changed to reflect the fact that declarations can have multiple IDs if they're members of multiple build targets.
- Declarations accessible by the Objective-C runtime are no longer retained by default. The
--no-retain-objc-annotated
option has been removed, and--retain-objc-accessible
added.
- Protocols that are never used as an existential type are now explicitly identified as redundant rather than simply unused, which could be confusing.
- Add
--clean-build
flag to clean build artifacts before the build step. - Add support for files that are members of multiple build targets. Such files no longer produce erroneous results.
- Protocol members whose implementation is provided by an external type, yet aren't referenced via a value type are now identified as unused.
- @IBInspectable properties are now retained.
- Declarations ignored with a '// periphery:ignore' comment now also retain their references to other declarations.
- Fix running Periphery from within Xcode where Xcode's environment variables could cause build failures or incorrect results.
- Fix an issue where a protocol could incorrectly retain references to methods in an unused conforming declaration.
- None.
- None.
- Extension classes referenced in Info.plist as NSExtensionPrincipalClass are now retained.
- None.
- None.
- Fix unused parameter identification when surrounded with backquotes.
- None.
- Add support for SwiftPM & Xcode mixed projects.
- None.
- None.
- None.
- IBOutlets and IBActions that reside in a base class that are referenced only via a subclass are now retained.
- None.
- Added a Checkstyle output formatter.
- Fix Swift 5.2 support.
- Updated Yams dependency to fix building with Swift for Tensorflow.
- Fix possible concurrent mutation crash.
- Classes & structs that conform to SwiftUI's LibraryContentProvider are now retained.
- None.
- None.
- Fix version number.
- SourceKit based indexing has been removed, the IndexStore indexer is now the sole indexer. Therefore, the following scan options have been removed:
--use-index-store
,--use-build-log
,--save-build-log
. - The
scan-syntax
command has been removed.
- Support for code comments to ignore unused declarations.
- Support for analyzing Swift Package Manager projects.
- Linux support for Swift Package Manager projects.
- Assign-only property detection is back and enabled by default. Disable it with
--retain-assign-only-properties
. - Added
--skip-build
option to skip the build phase.
- UISceneDelegateClassName & UISceneClassName referenced in Info.plist are now retained.
- Ignore parameters from functions annotated with @IBAction.
- Classes & structs that conform to SwiftUI's PreviewProvider are now retained.
- Support @main entry points.
- Fix unused recursive function detection when using the index store.
- Properties named in struct implicit constructors are now retained.
- Implicit declarations such as struct constructors are now retained.
- A
typealias
that defines anassociatedtype
in an external protocol is now retained. - All custom
appendInterpolation
methods are now retained, as they cannot be identified as unused due to swiftlang/swift#56189 - Fixed path resolution for nested projects in Xcode workspaces.
wrappedValue
andprojectedValue
properties in property wrappers are now retained.XCTestManifests.swift
is now treated as an entry point file likeLinuxMain.swift
.- Updated
XcodeProj
dependency to resolve some Xcode project parsing issues.
- Aggressive Mode has been removed as it provided little value.
- Removed undocumented diagnosis console feature.
- Add Xcode 12 support.
- Fixed an issue where implicit declarations inserted by SourceKit could cause incorrect results.
- None.
- None.
- Fix --exclude option for scan-syntax.
- Bundle lib_InternalSwiftSyntaxParser.dylib in the release archive.
- None.
- Support for Xcode 11.4, Swift 5.2.
- Experimental IndexStore based indexer.
- Fix shell escaping issues.
- None.
- Add support for Xcode 11.3.
- None.
- None.
- None.
- Fix CocoaPod.
- None.
- None.
- Xcode 10.2 compatibly.
- None.
-
New
strict
option to exit with non-zero status if any unused code is found. Cihat Gündüz #22 #23 -
Add official Homebrew support. Ian Leitch #24
- Fix parsing of projects using Siri message intents. Ian Leitch #25 #26
- First open-source release.
- None.
- None.
- None.
- None.
- Don't attempt to syntax scan directories ending with .swift.
- Detect invalid xcodeproj references.
- None.
- None.
- Fix infinate loop from parsing projects with cyclic references.
- None.
- Improve performance of scan-syntax command.
- Fix parsing of #warning and #error directives.
- None.
- Unused function prameter analysis.
- Terminate all child processes on SIGINT.
- Exclude pod schemes from guided setup.
- Remove retain ObjC question from guided setup.
- Avoid passing 'CURRENT_ARCH' and 'arch' environment variables to xcodebuild when their value is 'undefined_arch'.
- None.
- None.
- Improved target module name identification.
- None.
- None.
- Fix crash when inspecting project configuration for nested .xcodeproj.
- Detect .xcodeproj referenced from within groups in an .xcworkspace.
- None.
- None.
- Projects nested within other projects are now identified.
- None.
- Label results identified by aggressive mode.
- Add compiler flags to speed up build phase.
- Schemes are built in the order they're given.
- Add error hint for CocoaPods bug #8000.
- Add support for YAML configuration.
- Retain XCTestCase classes that do not directly inherit XCTestCase.
- None.
- No more trial mode - 100% of results are now free. Advanced features require a Pro license.
- Fixed issue with poor performance resulting in a segmentation fault.
- None.
- None.
- Ensures Xcode is configured for command-line use.
- None.
- None.
- Built with a static Swift stdlib.
- Ignore xcworkspace generated by Swift Package Manager inside the xcodeproj.
- None.
- Support for saving, and using build logs in order to skip the build phase.
- All output format types are now available in trial mode.
- Unused code with cyclic dependencies is now detected.
- Protocol declarations implemented in a subclass of the conforming class are now identified as used.
- Protocols that inherit a foreign protocol (e.g from Foundation) are now treated differently than other protocols, as Periphery cannot detect declarations that are used internally by the foreign module. For example, if your class conforms to Comparable and implements <(lhs:rhs:), the behavior of sort() may be altered, yet Periphery does not have visibility of any directs call to <(lhs:rhs:).
- None.
- --report-exclude and --index-exclude options now expect a pipe character to delimit multiple globs.
- None.
- None.
- Identify LinuxMain.swift as an entry point.
- Fix regression of handling schemes and targets containing spaces.
- None.
- Added tips for eliminating false positives in trial mode.
- Added check-update command.
- Added ability to exclude files either from indexing or final report.
- None.
- None.
- Added support for Xcode 10.
- Warn about source files that are members of multiple targets.
- Diagnosis console now lists active references as their source location.
- Fixed issue where error messages would not be printed before Periphery exits.
- None.
- Added guided setup flow.
- None.
- None.
- None.
- Handle explicitly defined PRODUCT_MODULE_NAME.
- None.
- Added support for Xcode's new build system.
- Added support for analyzing XCTest targets.
- Added interactive diagnosis console, enabled with the --diagnose option.
- Licenses can now be activated using --email and --key options instead of entering them interactively.
- Improve parsing of xcodebuild -list output.
- Type aliases that define an associated type are now identified as used.
- None.
- None.
- Workaround issue with xcodebuild using non-UTF8 encoding.
- None.
- Enable analysis of CocoaPod targets.
- None.
- None.
- None.
- Improve scheme identification for older workspaces.
- Fix handling of source files containing single quotes.
- Fix handling of paths to swiftc that contain hyphens e.g Xcode-9.3.app.
- None.
- Disabled code signing as it's not necessary and can cause build failures.
- Schemes are no longer required to be marked as shared in order to be discovered.
- Fixed discovery of xibs/storyboards that reside within a Base.jproj.
- Fix retention of protocol declarations with a default implementation within an extension.
- None.
- None.
- Correctly handle projects containing spaces their PRODUCT_NAME.
- Add support for missing declaration kinds.
- None.
- None.
- Improve xcodebuild swiftc argument parsing such that CoreData generated model file arguments are retained.
- Improved invalid scheme error message.
- None.
- Added trial mode.
- None.
- The --retain-all-enum-cases option has been removed. Unused cases of enums that are not raw representable are always identified. Unused cases of raw representable enums are now implicitly used since their use may be completely dynamic. --aggressive analysis disables this implicit behavior.
- The --retain-objc-annotated option is now enabled by default.
- Xcode format output is colored to improve readability.
- CodingKey enums are now correctly identified as used if the enclosing class or struct conforms to Decodable.
- None.
- None.
- Fix retention of declarations marked @IBOutlet or @IBAction.
- None.
- None.
- Fix issue parsing Xcode projects that contained groups without an associated physical directory.
- None.
- None.
- Added --project option for use with projects that do not have an .xcworkspace.
- Initial release.