peripheryapp / periphery

A tool to identify unused code in Swift projects.
MIT License
5.24k stars 194 forks source link

Scanning project containing local packages #787

Open PiotrPawlus opened 2 months ago

PiotrPawlus commented 2 months ago

Description

I'm currently working on a project that contains one target but multiple schemes that represent my Local packages. CLI generates the YML file detecting all targets and schemes.

Steps to Reproduce

index_store_path:
- build/DerivedData/My_Project/Index.noindex/DataStore
retain_public: true
retain_objc_accessible: true
retain_objc_annotated: true
retain_assign_only_properties: true
retain_assign_only_property_types: true
retain_swift_ui_previews: true                        
retain_codable_properties: true
verbose: false
schemes:
- Ads
- MyFoundation
- MyProject
- Design
# And many many more 
skip_build: true
targets:
- MyProject
workspace: MyProject.xcworkspace

Actual Behavior

The "main" project is scanned correctly. The local packages are not scanned.

Environment

Additionally

Xopoko commented 2 months ago

I’m experiencing the exact same issue!

Initially, I thought it was related to my settings, so I tried modifying various project build configurations (using Tuist). I even looked into the 'DataStore/V5' folder to see what was inside and found that it contains files from local packages. However, Periphery still only scans the files that are directly part of the project, ignoring those in the packages.

I also tried opening the package using the xed . command, and then I ran xcodebuild from the generated .xcworkspace. After that, I pointed Periphery to the DerivedData directory that was created, and it successfully scanned and identified unused code in that specific package.

UPD:

During debugging, I noticed that localPackages in XcodeProject.swift is always empty. I tried to fix it by allowing the paths for each local package to be passed through configuration, but that didn't help. I continued debugging and discovered that Periphery only works with source files listed in .pbxproj. The source files of my local packages weren't there. I'm still searching for the bug.

UPD: The new version 3.0.0.beta2 fixes this problem.

ileitch commented 1 month ago

As noted by @Xopoko, this should be resolved in the 3.0 beta.