Skip to content

patcher: Step 4 falsely reports 'Already injected' when install path contains 'SpliceKit' #48

@12georgiadis

Description

@12georgiadis

Summary

When installing to a destination path that contains the string SpliceKit (e.g. the default ~/Applications/SpliceKit or a custom --dest /Volumes/4T_IJC_th4/SpliceKit), the patcher falsely reports "Already injected (skipping)" at Step 4 and never actually runs insert_dylib, leading to a non-functional install that crashes on launch.

Reproduction

./patcher/patch_fcp.sh --dest /Volumes/4T_IJC_th4/SpliceKit

Or any dest path containing SpliceKit as a directory component.

Root cause

patcher/patch_fcp.sh line 332 checks whether the dylib is already injected with:

if otool -L "$BINARY" 2>/dev/null | grep -q SpliceKit; then
    log "Already injected (skipping)"

However, otool -L prints the binary path as its first header line:

/Volumes/4T_IJC_th4/SpliceKit/Final Cut Pro.app/Contents/MacOS/Final Cut Pro (architecture x86_64):

This line contains the substring SpliceKit because of the destination directory name, so grep -q SpliceKit matches and the injection step is silently skipped. The framework is built and deployed, but LC_LOAD_DYLIB is never added to the binary.

Expected

The check should match only when SpliceKit.framework is actually referenced in an LC_LOAD_DYLIB load command.

Suggested fix

Match the framework path instead of the bare string:

if otool -L "$BINARY" 2>/dev/null | grep -q "SpliceKit.framework/Versions/A/SpliceKit"; then
    log "Already injected (skipping)"

Or inspect the load commands directly:

if otool -l "$BINARY" 2>/dev/null | grep -A2 LC_LOAD_DYLIB | grep -q "SpliceKit.framework"; then
    log "Already injected (skipping)"

Verification

After hitting this on my install and manually running insert_dylib + re-sign, the binary correctly shows the injected dylib:

@rpath/SpliceKit.framework/Versions/A/SpliceKit (compatibility version 0.0.0, current version 0.0.0)

Environment

  • macOS 26.3.0
  • FCP 12.0 build 445223
  • SpliceKit git HEAD = v3.1.13
  • Xcode 16+, CLI tools installed

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions