Trials and Licensing (Mac)

The Mac SDK has a flexible licensing implementation that allows you to use our full solution, just our platform for issuing and validation, or roll your own entirely.

Trials and Licensing

If making use of our complete solution you’ll typically want to use our UI (if not, take a look at Silent Licensing)

To work with our trials & licenses you’ll need to have the product you want to sell created on the dashboard as an SDK product (these issue licenses)

Then it is just a case of throwing up our gatekeeper product info UI when you’d like your app to be restricted:


// The default product config to honor, including a 7 day trial:
PADProductConfiguration *defaultProductConfig = [[PADProductConfiguration alloc] init];
defaultProductConfig.productName = @"My v4 Product";
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];

// Refresh to ensure we've got up to date information locally for the product.
// 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];
}];

// The default product config to honor, including a 7 day trial:
let defaultProductConfig = PADProductConfiguration()
defaultProductConfig.productName = "My v4 Product"
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)

// Refresh to ensure we've got up to date information locally for the product.
// 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!)
})

Next Steps

Questions about Paddle?

If you need any help regarding your Paddle integration, please get in touch with our Customer Success team using the form below.