Skip to content

Instantly share code, notes, and snippets.

@dannote
Last active December 20, 2024 19:41
Show Gist options
  • Save dannote/17e0396fe2e19c6e60c915838376d267 to your computer and use it in GitHub Desktop.
Save dannote/17e0396fe2e19c6e60c915838376d267 to your computer and use it in GitHub Desktop.
Final Cut Pro X trial reset
#!/usr/bin/swift
// DISCLAIMER
// This script modifies an unencrypted file associated with the trial version of Final Cut Pro.
// Under the DMCA (17 U.S.C. § 1201), this modification does not qualify as circumvention of a technological
// protection measure (TPM), as it does not involve bypassing encryption, authentication, or similar protections.
// Distributing this code is therefore legal under the DMCA.
// This script is intended for educational and research purposes, such as exploring trial-related file structures,
// or for system troubleshooting in controlled environments with explicit permissions. It is not intended to be used
// in a manner that violates Apple's software license agreement.
// WARNING
// Using this script to reset or extend the trial period of Final Cut Pro without Apple's authorization likely violates
// the software license agreement. Such actions may lead to legal consequences. The responsibility for compliance with
// all applicable laws and agreements lies solely with the user. The author of this script assumes no liability for misuse
// or any resulting consequences.
import Foundation
let path = URL(fileURLWithPath: NSString(string: "~/Library/Containers/com.apple.FinalCutTrial/Data/Library/Application Support/.ffuserdata").expandingTildeInPath)
let data = try! NSData(contentsOf: path) as Data
let dictionary = try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! NSDictionary
let mutableDictionary = dictionary.mutableCopy() as! NSMutableDictionary
for (key, value) in mutableDictionary {
if value is NSDate {
mutableDictionary[key] = Date()
}
}
try! NSKeyedArchiver.archivedData(withRootObject: mutableDictionary, requiringSecureCoding: false).write(to: path)
print("You'd better buy it")
@geetch
Copy link

geetch commented Sep 28, 2024

It’s working for me on the latest fcp. Just run the rm command in the terminal and check the trial period length.

Did you execute it in macOS Sequoia?

@andresreibel
Copy link

andresreibel commented Sep 28, 2024 via email

@utkcodes
Copy link

utkcodes commented Oct 1, 2024

Please confirm if it still works on macOS Sequoia?

@andresreibel
Copy link

andresreibel commented Oct 1, 2024 via email

@l0u1sg
Copy link

l0u1sg commented Nov 15, 2024

The latest version of Final Cut Pro seems not to work with this script:

main/final-cut-pro-trial-reset.swift:6: Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=260 "The file “.ffuserdata” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/[RESTRICTED]/Library/Application Support/.ffuserdata, NSURL=file:///Users/[RESTRICTED]/Library/Application%20Support/.ffuserdata, NSUnderlyingError=0x12e610c40 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

Does someone have a solution?

@TehBrian
Copy link

The latest version of Final Cut Pro seems not to work with this script:

main/final-cut-pro-trial-reset.swift:6: Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=260 "The file “.ffuserdata” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/[RESTRICTED]/Library/Application Support/.ffuserdata, NSURL=file:///Users/[RESTRICTED]/Library/Application%20Support/.ffuserdata, NSUnderlyingError=0x12e610c40 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

Does someone have a solution?

Try this: https://gist.github.com/TehBrian/bf82c7505b647d423da6d5abbe2b95a3

@l0u1sg
Copy link

l0u1sg commented Nov 17, 2024 via email

@TehBrian
Copy link

@l0u1sg, I've updated https://gist.github.com/TehBrian/bf82c7505b647d423da6d5abbe2b95a3 with the correct path for newer versions of Final Cut Pro.

Additionally, I've made a similar Gist for Logic Pro, https://gist.github.com/TehBrian/1c236b6d9c58e736c0480a876759164d, which I'll keep updated as well.

@l0u1sg
Copy link

l0u1sg commented Nov 18, 2024 via email

@dannote
Copy link
Author

dannote commented Nov 21, 2024

@TehBrian thank you, updated the code accordingly.

@dannote
Copy link
Author

dannote commented Dec 6, 2024

@andresreibel As I clearly stated in the disclaimer up there, this is not a place to distribute cracks, hacks or anything else that violates DMCA. Any attempts to advertise stuff like that will be suppressed immediately.

@andresreibel
Copy link

andresreibel commented Dec 6, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment