periphery icon indicating copy to clipboard operation
periphery copied to clipboard

Scanning project containing local packages

Open PiotrPawlus opened this issue 1 year ago • 2 comments

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

  • periphery version 2.21.0
  • Xcode 15.4

Additionally

  • I tried to build the project with xcodebuild for each of the targets but periphery won't allow me to provide dd for each of it for each of the schemes we have

PiotrPawlus avatar Aug 14 '24 07:08 PiotrPawlus

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.

Xopoko avatar Aug 14 '24 12:08 Xopoko

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

ileitch avatar Sep 15 '24 14:09 ileitch

This issue should now be resolved in 3.0.0. Let me know if you continue to experience this issue and I will reinvestigate.

ileitch avatar Dec 27 '24 17:12 ileitch