Skip to content
You're viewing guides for Paddle Classic, which is no longer available for new signups. Head to developer.paddle.com for Paddle Billing guides.

Trial access (Mac)

A common way to let users try out your app before buying is offering a trial period.

Trial lengths for a Paddle SDK product can be set either in the product settings in the seller dashboard or in the product config in your SDK implementation. Note that remote settings will override a local config if both are set.

// Include a 7-day trial in the default config
PADProductConfiguration *defaultProductConfig = [[PADProductConfiguration alloc] init];
defaultProductConfig.productName = @"My Product With Trial";
defaultProductConfig.vendorName = @"My Company";
defaultProductConfig.trialLength = @7;
defaultProductConfig.trialType = PADProductTrialTimeLimited;
// Create the Product we want to work with
PADProduct *paddleProduct = [[PADProduct alloc] initWithProductID:@"12345"
productType:PADProductTypeSDKProduct
configuration:defaultProductConfig];
// Remote trial values will supersede local, i.e if it has been updated to 8
// then the trial will be 8 days, not the 7 mentioned above.
[paddleProduct refresh:^(NSDictionary * _Nullable productDelta, NSError * _Nullable error) {
[paddle showProductAccessDialogWithProduct:paddleProduct];
}];
// Include a 7-day trial in the default config
let defaultProductConfig = PADProductConfiguration()
defaultProductConfig.productName = "My Product With Trial"
defaultProductConfig.vendorName = "My Company"
defaultProductConfig.trialLength = 7
defaultProductConfig.trialType = PADProductTrialType.timeLimited
// Create the Product we want to work with
let paddleProduct = PADProduct(productID: myPaddleProductID,
productType: PADProductType.sdkProduct,
configuration: defaultProductConfig)
// Remote trial values will supersede local, i.e if it has been updated to 8
// then the trial will be 8 days, not the 7 mentioned above.
paddleProduct?.refresh({ (delta: [AnyHashable : Any]?, error: Error?) in
paddle?.showProductAccessDialog(with: paddleProduct!)
})le

Active app trials can be reset programmatically by calling the resetTrial method of PADProduct, or expired by calling expireTrial.

By enabling debug mode in your build, these options are also added to the Paddle Debug menu in your app for testing purposes.

You may wish to reset or expire trials on a product version update.