-
-
Save ayyybe/a5f01c6f40020f9a7bc4939beeb2df1d to your computer and use it in GitHub Desktop.
#!/bin/bash | |
CYAN="$(tput bold; tput setaf 6)" | |
RESET="$(tput sgr0)" | |
clear | |
if command -v python3 > /dev/null 2>&1; then | |
if [ $(python3 -c "print('ye')") = "ye" ]; then | |
clear | |
echo "${CYAN}python3 found!${RESET}" | |
else | |
clear | |
echo "python3 found but non-functional" # probably xcode-select stub on Catalina+ | |
echo "${CYAN}If you received a popup asking to install some tools, please accept.${RESET}" | |
read -n1 -r -p "Press [SPACE] when installation is complete, or any other key to abort." key | |
echo "" | |
if [ "$key" != '' ]; then | |
exit | |
fi | |
fi | |
else | |
echo "${CYAN}installing python3...${RESET}" | |
if ! command -v brew > /dev/null 2>&1; then | |
echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" | |
fi | |
brew install python | |
fi | |
python3 -c 'import requests' > /dev/null 2>&1 | |
if [ $? == 0 ]; then | |
echo "${CYAN}requests found!${RESET}" | |
else | |
echo "${CYAN}installing requests...${RESET}" | |
python3 -m pip install requests --user | |
fi | |
clear | |
echo "${CYAN}starting ccdl${RESET}" | |
python3 <(curl -s https://gist.githubusercontent.com/ayyybe/a5f01c6f40020f9a7bc4939beeb2df1d/raw/ccdl.py) |
#!/usr/bin/env python3 | |
# CHANGELOG (0.1.2-hotfix1) | |
# + updated script to work with new api (newer downloads work now) | |
# + added workaround for broken installer on big sur | |
# + made everything even more messy and disgusting | |
import os | |
import json | |
import argparse | |
import requests | |
session = requests.Session() | |
import shutil | |
from xml.etree import ElementTree as ET | |
from collections import OrderedDict | |
from subprocess import Popen, PIPE | |
VERSION = 4 | |
VERSION_STR = '0.1.2-hotfix1' | |
CODE_QUALITY = 'FUCKING_AWFUL' | |
INSTALL_APP_APPLE_SCRIPT = ''' | |
const app = Application.currentApplication() | |
app.includeStandardAdditions = true | |
ObjC.import('Cocoa') | |
ObjC.import('stdio') | |
ObjC.import('stdlib') | |
ObjC.registerSubclass({ | |
name: 'HandleDataAction', | |
methods: { | |
'outData:': { | |
types: ['void', ['id']], | |
implementation: function(sender) { | |
const data = sender.object.availableData | |
if (data.length !== '0') { | |
const output = $.NSString.alloc.initWithDataEncoding(data, $.NSUTF8StringEncoding).js | |
const res = parseOutput(output) | |
if (res) { | |
switch (res.type) { | |
case 'progress': | |
Progress.additionalDescription = `Progress: ${res.data}%` | |
Progress.completedUnitCount = res.data | |
break | |
case 'exit': | |
if (res.data === 0) { | |
$.puts(JSON.stringify({ title: 'Installation succeeded' })) | |
} else { | |
$.puts(JSON.stringify({ title: `Failed with error code ${res.data}` })) | |
} | |
$.exit(0) | |
break | |
} | |
} | |
sender.object.waitForDataInBackgroundAndNotify | |
} else { | |
$.NSNotificationCenter.defaultCenter.removeObserver(this) | |
} | |
} | |
} | |
} | |
}) | |
function parseOutput(output) { | |
let matches | |
matches = output.match(/Progress: ([0-9]{1,3})%/) | |
if (matches) { | |
return { | |
type: 'progress', | |
data: parseInt(matches[1], 10) | |
} | |
} | |
matches = output.match(/Exit Code: ([0-9]{1,3})/) | |
if (matches) { | |
return { | |
type: 'exit', | |
data: parseInt(matches[1], 10) | |
} | |
} | |
return false | |
} | |
function shellescape(a) { | |
var ret = []; | |
a.forEach(function(s) { | |
if (/[^A-Za-z0-9_\\/:=-]/.test(s)) { | |
s = "'"+s.replace(/'/g,"'\\\\''")+"'"; | |
s = s.replace(/^(?:'')+/g, '') // unduplicate single-quote at the beginning | |
.replace(/\\\\\'''/g, "\\\\'" ); // remove non-escaped single-quote if there are enclosed between 2 escaped | |
} | |
ret.push(s); | |
}); | |
return ret.join(' '); | |
} | |
function run() { | |
const appPath = app.pathTo(this).toString() | |
//const driverPath = appPath.substring(0, appPath.lastIndexOf('/')) + '/products/driver.xml' | |
const driverPath = appPath + '/Contents/Resources/products/driver.xml' | |
const hyperDrivePath = '/Library/Application Support/Adobe/Adobe Desktop Common/HDBox/Setup' | |
// The JXA Objective-C bridge is completely broken in Big Sur | |
if (!$.NSProcessInfo && parseFloat(app.doShellScript('sw_vers -productVersion')) >= 11.0) { | |
app.displayAlert('GUI unavailable in Big Sur', { | |
message: 'JXA is currently broken in Big Sur.\\nInstall in Terminal instead?', | |
buttons: ['Cancel', 'Install in Terminal'], | |
defaultButton: 'Install in Terminal', | |
cancelButton: 'Cancel' | |
}) | |
const cmd = shellescape([ 'sudo', hyperDrivePath, '--install=1', '--driverXML=' + driverPath ]) | |
app.displayDialog('Run this command in Terminal to install (press \\'OK\\' to copy to clipboard)', { defaultAnswer: cmd }) | |
app.setTheClipboardTo(cmd) | |
return | |
} | |
const args = $.NSProcessInfo.processInfo.arguments | |
const argv = [] | |
const argc = args.count | |
for (var i = 0; i < argc; i++) { | |
argv.push(ObjC.unwrap(args.objectAtIndex(i))) | |
} | |
delete args | |
const installFlag = argv.indexOf('-y') > -1 | |
if (!installFlag) { | |
app.displayAlert('Adobe Package Installer', { | |
message: 'Start installation now?', | |
buttons: ['Cancel', 'Install'], | |
defaultButton: 'Install', | |
cancelButton: 'Cancel' | |
}) | |
const output = app.doShellScript(`"${appPath}/Contents/MacOS/applet" -y`, { administratorPrivileges: true }) | |
const alert = JSON.parse(output) | |
alert.params ? app.displayAlert(alert.title, alert.params) : app.displayAlert(alert.title) | |
return | |
} | |
const stdout = $.NSPipe.pipe | |
const task = $.NSTask.alloc.init | |
task.executableURL = $.NSURL.alloc.initFileURLWithPath(hyperDrivePath) | |
task.arguments = $(['--install=1', '--driverXML=' + driverPath]) | |
task.standardOutput = stdout | |
const dataAction = $.HandleDataAction.alloc.init | |
$.NSNotificationCenter.defaultCenter.addObserverSelectorNameObject(dataAction, 'outData:', $.NSFileHandleDataAvailableNotification, $.initialOutputFile) | |
stdout.fileHandleForReading.waitForDataInBackgroundAndNotify | |
let err = $.NSError.alloc.initWithDomainCodeUserInfo('', 0, '') | |
const ret = task.launchAndReturnError(err) | |
if (!ret) { | |
$.puts(JSON.stringify({ | |
title: 'Error', | |
params: { | |
message: 'Failed to launch task: ' + err.localizedDescription.UTF8String | |
} | |
})) | |
$.exit(0) | |
} | |
Progress.description = "Installing packages..." | |
Progress.additionalDescription = "Preparing…" | |
Progress.totalUnitCount = 100 | |
task.waitUntilExit | |
} | |
''' | |
ADOBE_PRODUCTS_XML_URL = 'https://cdn-ffc.oobesaas.adobe.com/core/v5/products/all?_type=xml&channel=ccm,sti&platform=osx10,osx10-64&productType=Desktop' | |
ADOBE_APPLICATION_JSON_URL = 'https://cdn-ffc.oobesaas.adobe.com/core/v3/applications' | |
DRIVER_XML = '''<DriverInfo> | |
<ProductInfo> | |
<Name>Adobe {name}</Name> | |
<SAPCode>{sapCode}</SAPCode> | |
<CodexVersion>{version}</CodexVersion> | |
<Platform>osx10-64</Platform> | |
<EsdDirectory>./{sapCode}</EsdDirectory> | |
<Dependencies> | |
{dependencies} | |
</Dependencies> | |
</ProductInfo> | |
<RequestInfo> | |
<InstallDir>/Applications</InstallDir> | |
<InstallLanguage>{language}</InstallLanguage> | |
</RequestInfo> | |
</DriverInfo> | |
''' | |
DRIVER_XML_DEPENDENCY = ''' <Dependency> | |
<SAPCode>{sapCode}</SAPCode> | |
<BaseVersion>{version}</BaseVersion> | |
<EsdDirectory>./{sapCode}</EsdDirectory> | |
</Dependency>''' | |
ADOBE_REQ_HEADERS = { | |
'X-Adobe-App-Id': 'accc-hdcore-desktop', | |
'User-Agent': 'Adobe Application Manager 2.0', | |
'X-Api-Key': 'CC_HD_ESD_1_0' | |
} | |
def dl(filename, url): | |
with session.get(url, stream=True, headers=ADOBE_REQ_HEADERS) as r: | |
with open(filename, 'wb') as f: | |
shutil.copyfileobj(r.raw, f) | |
def r(url, headers=ADOBE_REQ_HEADERS): | |
req = session.get(url, headers=headers) | |
req.encoding = 'utf-8' | |
return req.text | |
def get_products_xml(): | |
return ET.fromstring(r(ADOBE_PRODUCTS_XML_URL)) | |
def parse_products_xml(products_xml): | |
cdn = products_xml.find('channel/cdn/secure').text | |
products = {} | |
parent_map = {c: p for p in products_xml.iter() for c in p} | |
for p in products_xml.findall('channel/products/product'): | |
displayName = p.find('displayName').text | |
sap = p.get('id') | |
version = p.get('version') | |
dependencies = list(p.find('platforms/platform/languageSet/dependencies')) | |
if not products.get(sap): | |
if p.find('productInfoPage'): | |
print(p.find('productInfoPage').text) | |
products[sap] = { | |
'hidden': p.find('platforms/platform').get('id') != 'osx10-64' or parent_map[parent_map[p]].get('name') != 'ccm', | |
'displayName': displayName, | |
'sapCode': sap, | |
'versions': OrderedDict() | |
} | |
products[sap]['versions'][version] = { | |
'sapCode': sap, | |
'version': version, | |
'dependencies': [{ | |
'sapCode': d.find('sapCode').text, 'version': d.find('baseVersion').text | |
} for d in dependencies], | |
'buildGuid': p.find('platforms/platform/languageSet').get('buildGuid') | |
} | |
return products, cdn | |
def get_application_json(buildGuid): | |
headers = ADOBE_REQ_HEADERS.copy() | |
headers['x-adobe-build-guid'] = buildGuid | |
return json.loads(r(ADOBE_APPLICATION_JSON_URL, headers)) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument('-l', '--installLanguage', help='Language code (eg. en_US)', action='store') | |
parser.add_argument('-s', '--sapCode', help='SAP code for desired product (eg. PHSP)', action='store') | |
parser.add_argument('-v', '--version', help='Version of desired product (eg. 21.0.3)', action='store') | |
parser.add_argument('-d', '--destination', help='Directory to download installation files to', action='store') | |
args = parser.parse_args() | |
ye = int((32 - len(VERSION_STR)) / 2) | |
print('=================================') | |
print('= Adobe macOS Package Generator =') | |
print('{} {} {}\n'.format('='*ye, VERSION_STR, '='*(31-len(VERSION_STR)-ye))) | |
if (not os.path.isfile('/Library/Application Support/Adobe/Adobe Desktop Common/HDBox/Setup')): | |
print('Adobe HyperDrive installer not found.\nPlease make sure the Creative Cloud app is installed.') | |
exit(1) | |
print('Downloading products.xml\n') | |
products_xml = get_products_xml() | |
print('Parsing products.xml') | |
products, cdn = parse_products_xml(products_xml) | |
print('CDN: ' + cdn) | |
print(str(len([p for p in products if not products[p]['hidden']])) + ' products found:') | |
sapCode = None | |
if (args.sapCode): | |
if products.get(args.sapCode): | |
print('\nUsing provided SAP Code: ' + args.sapCode) | |
sapCode = args.sapCode | |
else: | |
print('\nProvided SAP Code not found in products: ' + args.sapCode) | |
print('') | |
if not sapCode: | |
for p in products.values(): | |
if not p['hidden']: | |
print('[{}] {}'.format(p['sapCode'], p['displayName'])) | |
while sapCode is None: | |
val = input('\nPlease enter the SAP Code of the desired product (eg. PHSP for Photoshop): ') | |
if val == 'APRO': | |
print('\033[1;31mAcrobat is currently broken, please sit tight while I try to find a solution.\nAll other products are functional.\033[0m') | |
elif products.get(val): | |
sapCode = val | |
else: | |
print('{} is not a valid SAP Code. Please use a value from the list above.'.format(val)) | |
product = products.get(sapCode) | |
versions = product['versions'] | |
version = None | |
if (args.version): | |
if versions.get(args.version): | |
print('\nUsing provided version: ' + args.version) | |
version = args.version | |
else: | |
print('\nProvided version not found: ' + args.version) | |
print('') | |
if not version: | |
for v in reversed(versions.values()): | |
print('{} {}'.format(product['displayName'], v['version'])) | |
while version is None: | |
val = input('\nPlease enter the desired version (eg. 21.2.3): ') | |
if versions.get(val): | |
version = val | |
else: | |
print('{} is not a valid version. Please use a value from the list above.'.format(val)) | |
print('') | |
langs = [ 'en_US', 'en_GB', 'en_IL', 'en_AE', 'es_ES', 'es_MX', 'pt_BR', 'fr_FR', 'fr_CA', 'fr_MA', 'it_IT', 'de_DE', 'nl_NL', 'ru_RU', 'uk_UA', 'zh_TW', 'zh_CN', 'ja_JP', 'ko_KR', 'pl_PL', 'hu_HU', 'cs_CZ', 'tr_TR', 'sv_SE', 'nb_NO', 'fi_FI', 'da_DK' ] | |
installLanguage = None | |
if (args.installLanguage): | |
if (args.installLanguage in langs): | |
print('\nUsing provided language: ' + args.installLanguage) | |
installLanguage = args.installLanguage | |
else: | |
print('\nProvided language not available: ' + args.installLanguage) | |
if not installLanguage: | |
print('Available languages: {}'.format(', '.join(langs))) | |
while installLanguage is None: | |
val = input('\nPlease enter the desired install language, or nothing for [en_US]: ') or 'en_US' | |
if (val in langs): | |
installLanguage = val | |
else: | |
print('{} is not available. Please use a value from the list above.'.format(val)) | |
dest = None | |
if (args.destination): | |
print('\nUsing provided destination: ' + args.destination) | |
dest = args.destination | |
else: | |
print('\nPlease navigate to the desired downloads folder, or cancel to abort.') | |
p = Popen(['/usr/bin/osascript', '-e', 'tell application (path to frontmost application as text)\nset _path to choose folder\nPOSIX path of _path\nend'], stdout=PIPE) | |
dest = p.communicate()[0].decode('utf-8').strip() | |
if (p.returncode != 0): | |
print('Exiting...') | |
exit() | |
print('') | |
install_app_name = 'Install {}_{}-{}.app'.format(sapCode, version, installLanguage) | |
install_app_path = os.path.join(dest, install_app_name) | |
print('sapCode: ' + sapCode) | |
print('version: ' + version) | |
print('installLanguage: ' + installLanguage) | |
print('dest: ' + install_app_path) | |
prodInfo = versions[version] | |
prods_to_download = [{ 'sapCode': d['sapCode'], 'version': d['version'], 'buildGuid': products[d['sapCode']]['versions'][d['version']]['buildGuid'] } for d in prodInfo['dependencies']] | |
prods_to_download.insert(0, { 'sapCode': prodInfo['sapCode'], 'version': prodInfo['version'], 'buildGuid': prodInfo['buildGuid'] }) | |
print(prods_to_download) | |
print('\nCreating {}'.format(install_app_name)) | |
install_app_path = os.path.join(dest, 'Install {}_{}-{}.app'.format(sapCode, version, installLanguage)) | |
with Popen(['/usr/bin/osacompile', '-l', 'JavaScript', '-o', os.path.join(dest, install_app_path)], stdin=PIPE) as p: | |
p.communicate(INSTALL_APP_APPLE_SCRIPT.encode('utf-8')) | |
icon_path = '/Library/Application Support/Adobe/Adobe Desktop Common/HDBox/Install.app/Contents/Resources/CreativeCloudInstaller.icns' | |
shutil.copyfile(icon_path, os.path.join(install_app_path, 'Contents', 'Resources', 'applet.icns')) | |
products_dir = os.path.join(install_app_path, 'Contents', 'Resources', 'products') | |
print('\nPreparing...\n') | |
for p in prods_to_download: | |
s, v = p['sapCode'], p['version'] | |
product_dir = os.path.join(products_dir, s) | |
app_json_path = os.path.join(product_dir, 'application.json') | |
print('[{}_{}] Downloading application.json'.format(s, v)) | |
app_json = get_application_json(p['buildGuid']) | |
p['application_json'] = app_json | |
print('[{}_{}] Creating folder for product'.format(s, v)) | |
os.makedirs(product_dir, exist_ok=True) | |
print('[{}_{}] Saving application.json'.format(s, v)) | |
with open(app_json_path, 'w') as file: | |
json.dump(app_json, file, separators=(',', ':')) | |
print('') | |
print ('Downloading...\n') | |
for p in prods_to_download: | |
s, v = p['sapCode'], p['version'] | |
app_json = p['application_json'] | |
product_dir = os.path.join(products_dir, s) | |
print('[{}_{}] Parsing available packages'.format(s, v)) | |
core_pkg_count = 0 | |
noncore_pkg_count = 0 | |
packages = app_json['Packages']['Package'] | |
download_urls = [] | |
for pkg in packages: | |
if pkg.get('Type') and pkg['Type'] == 'core': | |
core_pkg_count += 1 | |
download_urls.append(cdn + pkg['Path']) | |
else: | |
if ((not pkg.get('Condition')) or installLanguage in pkg['Condition']): # TODO: actually parse `Condition` and check it properly (and maybe look for & add support for conditions other than installLanguage) | |
noncore_pkg_count += 1 | |
download_urls.append(cdn + pkg['Path']) | |
print('[{}_{}] Selected {} core packages and {} non-core packages'.format(s, v, core_pkg_count, noncore_pkg_count)) | |
for url in download_urls: | |
name = url.split('/')[-1].split('?')[0] | |
print('[{}_{}] Downloading {}'.format(s, v, name)) | |
dl(os.path.join(product_dir, name), url) | |
print('\nGenerating driver.xml') | |
driver = DRIVER_XML.format( | |
name = product['displayName'], | |
sapCode = prodInfo['sapCode'], | |
version = prodInfo['version'], | |
dependencies = '\n'.join([DRIVER_XML_DEPENDENCY.format( | |
sapCode = d['sapCode'], | |
version = d['version'] | |
) for d in prodInfo['dependencies']]), | |
language = installLanguage | |
) | |
with open(os.path.join(products_dir, 'driver.xml'), 'w') as f: | |
f.write(driver) | |
f.close() | |
print('\nPackage successfully created. Run {} to install.'.format(install_app_path)) |
#!/bin/bash | |
CYAN="$(tput bold; tput setaf 6)" | |
RESET="$(tput sgr0)" | |
curl https://gist.githubusercontent.com/ayyybe/a5f01c6f40020f9a7bc4939beeb2df1d/raw/ccdl.command -o "/Applications/Adobe Packager.command" | |
chmod +x "/Applications/Adobe Packager.command" | |
clear | |
echo "${CYAN}Done! You can now start /Applications/Adobe Packager.command to begin${RESET}" | |
exit |
@thpryrchn
Ok, I just changedopen('/Temp/adobe.xml'
toopen('/tmp/adobe.xml'
in ccdl.py and now everything works.
Thanks, man! 🤝
And bravo @Drovosek01!
OOps!!! That was some of my debugging code... I removed it... Should be good now.
I fixed the script to download all available versions! Thank you to @Drovosek01 for the URL's that steered me the right direction :)
checkout my fork: https://gist.github.com/thpryrchn/c0ea1b6793117b00494af5f05959d526
and if you want to install mine instead, just run
curl https://gist.githubusercontent.com/thpryrchn/c0ea1b6793117b00494af5f05959d526/raw/install.sh | bash
Thank you very much and to you too
I just tried it. I installed yours using curl and below is the error I received. I am really new at this so its very possible I did something incorrectly.
`sapCode: PPRO
version: 15.4
installLanguage: en_US
dest: /Users/#######/Documents/Adobe Download Project/Install PPRO_15.4-en_US.app
[{'sapCode': 'PPRO', 'version': '15.4', 'buildGuid': '9e6fb542-3777-4b17-8823-7ad7cbd4090c'}, {'sapCode': 'CCXP', 'version': '2.2.1', 'buildGuid': '3fdc5e2b-c3fa-11e9-b9c5-12148b63a89a'}]
Creating Install PPRO_15.4-en_US.app
Traceback (most recent call last):
File "/dev/fd/63", line 421, in
File "/usr/local/Cellar/[email protected]/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/Library/Application Support/Adobe/Adobe Desktop Common/HDBox/Install.app/Contents/Resources/CreativeCloudInstaller.icns'
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions... 51 completed.
[Process completed]`
You need to have the creative cloud installer installed.
https://www.adobe.com/creativecloud/desktop-app.html
When I have time, I will code in a catch that will catch that the file is missing, and instruct the user to download and install the installer.
I just tried it. I installed yours using curl and below is the error I received. I am really new at this so its very possible I did something incorrectly.
`sapCode: PPRO
version: 15.4
installLanguage: en_US
dest: /Users/#######/Documents/Adobe Download Project/Install PPRO_15.4-en_US.app
[{'sapCode': 'PPRO', 'version': '15.4', 'buildGuid': '9e6fb542-3777-4b17-8823-7ad7cbd4090c'}, {'sapCode': 'CCXP', 'version': '2.2.1', 'buildGuid': '3fdc5e2b-c3fa-11e9-b9c5-12148b63a89a'}]Creating Install PPRO_15.4-en_US.app
Traceback (most recent call last):
File "/dev/fd/63", line 421, in
File "/usr/local/Cellar/[email protected]/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/Library/Application Support/Adobe/Adobe Desktop Common/HDBox/Install.app/Contents/Resources/CreativeCloudInstaller.icns'
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions... 51 completed.[Process completed]`
I guess that was phrased inappropriately.. I have deleted my post
I see that @thpryrchn’s version also offers Creative Cloud (I asume the Desktop app) as a download but provides no possible version numbers. Anyone had any luck downloading it? I wonder if the installer that the script downloads (if it can download one indeed) is truly an offline installer. The one available at adobe.com is not, and with the installers of the other apps requiring Creative Cloud Desktop app being installed beforehand, so there is currently no way (that I know of) to have a truly offline installing experience.
I fixed the script to download all available versions! Thank you to @Drovosek01 for the URL's that steered me the right direction :)
checkout my fork: https://gist.github.com/thpryrchn/c0ea1b6793117b00494af5f05959d526
and if you want to install mine instead, just run
curl https://gist.githubusercontent.com/thpryrchn/c0ea1b6793117b00494af5f05959d526/raw/install.sh | bash
Thanks it works
I see that @thpryrchn’s version also offers Creative Cloud (I asume the Desktop app) as a download but provides no possible version numbers. Anyone had any luck downloading it? I wonder if the installer that the script downloads (if it can download one indeed) is truly an offline installer. The one available at adobe.com is not, and with the installers of the other apps requiring Creative Cloud Desktop app being installed beforehand, so there is currently no way (that I know of) to have a truly offline installing experience.
You need the Creative cloud installer to be installed on the system that makes the offline installers.. Not on the offline machines. The script needs files from the Installer to make the offline installers.
You need the Creative cloud installer to be installed on the system that makes the offline installers. Not on the offline machines.
The first part, I do understand. The second, I think you are mistaken: offline installers created by this script will not install unless the computer you are trying to install them on has first had the Creative Cloud desktop app installed on it. But the Creative Cloud desktop app installer downloadable from Adobe is not an offline installer, hence, the question.
You need the Creative cloud installer to be installed on the system that makes the offline installers. Not on the offline machines.
The first part, I do understand. The second, I think you are mistaken: offline installers created by this script will not install unless the computer you are trying to install them on has first had the Creative Cloud desktop app installed on it. But the Creative Cloud desktop app installer downloadable from Adobe is not an offline installer, hence, the question.
Hmm... Adobe does have the offline installer available on their site! https://helpx.adobe.com/download-install/kb/creative-cloud-desktop-app-download.html under "macOS | Alternative downloads"
Hello I got this error after successfully downloaded lightroom and patched it
I tried to download photoshop but it didn't work. Could anyone help? Thanks a lot!!
sapCode: PHSP
version: 22.4.3
installLanguage: en_US
dest: /Users/onionleung/Downloads/Install PHSP_22.4.3-en_US.app
Traceback (most recent call last):
File "/dev/fd/63", line 379, in
File "/dev/fd/63", line 379, in
KeyError: '2.2.1'
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
This script is not made for purpose of piracy, you will not get support about that here.
Hello I got this error after successfully downloaded lightroom and patched it
I tried to download photoshop but it didn't work. Could anyone help? Thanks a lot!!
sapCode: PHSP
version: 22.4.3
installLanguage: en_US
dest: /Users/onionleung/Downloads/Install PHSP_22.4.3-en_US.app
Traceback (most recent call last):
File "/dev/fd/63", line 379, in
File "/dev/fd/63", line 379, in
KeyError: '2.2.1'
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
The version here is outdated, and is no longer being updated. Which is why I forked it, and fixed it.
Checkout my fork: https://gist.github.com/thpryrchn/c0ea1b6793117b00494af5f05959d526
and if you want to install mine instead, just run:
curl https://gist.githubusercontent.com/thpryrchn/c0ea1b6793117b00494af5f05959d526/raw/install.sh | bash
Tested mine, and it created the Photoshop package perfectly.
as @idarek said, this is not for Piracy. It is for making Offline Installs, or for Rolling back to older versions in case there are bugs with newer versions, or to support older Mac's. Also saves bandwith for installing on multiple machines. Like for schools, or for people who have very limited bandwidth.
@thpryrchn Thank you for the link! Though when I'm installing the applications, it appeared " error code 103" . Is there any way to fix this? Please help me, thank you!
I have only got an error code when I have had an adobe app open.Like upgrading PhotoShop. Try rebooting, and then install again.
Hello @thpryrchn I got this error now, your script was working fine when I tried it 2 weeks ago
Creating Install PHSP_22.4.3-fr_FR.app
Traceback (most recent call last):
File "/dev/fd/63", line 421, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/shutil.py", line 259, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
FileNotFoundError: [Errno 2] No such file or directory: '/Library/Application Support/Adobe/Adobe Desktop Common/HDBox/Install.app/Contents/Resources/CreativeCloudInstaller.icns'
I created a repository with a working version of the script. I suggest that the development of the script continue in this repository - https://github.com/Drovosek01/adobe-packager
@Drovosek01: Sweet!
Hi, when using the app, it will say:
starting ccdl
= Adobe macOS Package Generator =
========= 0.1.2-hotfix1 =========
Downloading products.xml
Parsing products.xml
CDN: https://ccmdls.adobe.com
27 products found:
[AEFT] After Effects
[AEFTBETA] After Effects (Beta)
[AERO] Aero (Beta)
[AME] Media Encoder
[AMEBETA] Media Encoder (Beta)
[AUDT] Audition
[AUDTBETA] Audition (Beta)
[CHAR] Character Animator
[CHARBETA] Character Animator (Beta)
[DRWV] Dreamweaver
[ESHR] Dimension
[FLPR] Animate
[KBRG] Bridge
[LTRM] Lightroom Classic
[MUSE] Muse CC
[PHSP] Photoshop
[PPRO] Premiere Pro
[PPROBETA] Premiere Pro (Beta)
[PRLD] Prelude
[RUSH] Premiere Rush
[RUSHBETA] Premiere Rush (Beta)
[SBSTA] Substance 3D Sampler
[SBSTD] Substance 3D Designer
[SBSTP] Substance 3D Painter
[SPRK] XD
[STGR] Substance 3D Stager
[UXPD] UXP Developer Tools
Please enter the SAP Code of the desired product (eg. PHSP for Photoshop): PHSP
Photoshop 22.0
Photoshop 22.0.1
Photoshop 22.1
Photoshop 22.1.1
Photoshop 22.2
Photoshop 22.3
Photoshop 22.3.1
Photoshop 22.4
Photoshop 22.4.1
Photoshop 22.4.2
Photoshop 22.4.3
Photoshop 22.5
Photoshop 22.5.1
Photoshop 22.5.2
Photoshop 22.5.3
Please enter the desired version (eg. 21.2.3): 22.5.3
Available languages: en_US, en_GB, en_IL, en_AE, es_ES, es_MX, pt_BR, fr_FR, fr_CA, fr_MA, it_IT, de_DE, nl_NL, ru_RU, uk_UA, zh_TW, zh_CN, ja_JP, ko_KR, pl_PL, hu_HU, cs_CZ, tr_TR, sv_SE, nb_NO, fi_FI, da_DK
Please enter the desired install language, or nothing for [en_US]: en_US
Please navigate to the desired downloads folder, or cancel to abort.
sapCode: PHSP
version: 22.5.3
installLanguage: en_US
dest: /Users/daniel/Downloads/Install PHSP_22.5.3-en_US.app
Traceback (most recent call last):
File "/dev/fd/63", line 379, in
File "/dev/fd/63", line 379, in
KeyError: '2.2.1'
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
I enter PHSP for Photoshop, and the version, and language, and location. It will come up with KeyError: '2.2.1' and (Process completed) I look, and there is no installer. How can I fix this?
That is because this is no longer maintained....
https://github.com/Drovosek01/adobe-packager is what you want!!!
Hi, when using the app, it will say:
starting ccdl
= Adobe macOS Package Generator = ========= 0.1.2-hotfix1 =========
Downloading products.xml
Parsing products.xml CDN: https://ccmdls.adobe.com 27 products found:
[AEFT] After Effects [AEFTBETA] After Effects (Beta) [AERO] Aero (Beta) [AME] Media Encoder [AMEBETA] Media Encoder (Beta) [AUDT] Audition [AUDTBETA] Audition (Beta) [CHAR] Character Animator [CHARBETA] Character Animator (Beta) [DRWV] Dreamweaver [ESHR] Dimension [FLPR] Animate [KBRG] Bridge [LTRM] Lightroom Classic [MUSE] Muse CC [PHSP] Photoshop [PPRO] Premiere Pro [PPROBETA] Premiere Pro (Beta) [PRLD] Prelude [RUSH] Premiere Rush [RUSHBETA] Premiere Rush (Beta) [SBSTA] Substance 3D Sampler [SBSTD] Substance 3D Designer [SBSTP] Substance 3D Painter [SPRK] XD [STGR] Substance 3D Stager [UXPD] UXP Developer Tools
Please enter the SAP Code of the desired product (eg. PHSP for Photoshop): PHSP
Photoshop 22.0 Photoshop 22.0.1 Photoshop 22.1 Photoshop 22.1.1 Photoshop 22.2 Photoshop 22.3 Photoshop 22.3.1 Photoshop 22.4 Photoshop 22.4.1 Photoshop 22.4.2 Photoshop 22.4.3 Photoshop 22.5 Photoshop 22.5.1 Photoshop 22.5.2 Photoshop 22.5.3
Please enter the desired version (eg. 21.2.3): 22.5.3
Available languages: en_US, en_GB, en_IL, en_AE, es_ES, es_MX, pt_BR, fr_FR, fr_CA, fr_MA, it_IT, de_DE, nl_NL, ru_RU, uk_UA, zh_TW, zh_CN, ja_JP, ko_KR, pl_PL, hu_HU, cs_CZ, tr_TR, sv_SE, nb_NO, fi_FI, da_DK
Please enter the desired install language, or nothing for [en_US]: en_US
Please navigate to the desired downloads folder, or cancel to abort.
sapCode: PHSP version: 22.5.3 installLanguage: en_US dest: /Users/daniel/Downloads/Install PHSP_22.5.3-en_US.app Traceback (most recent call last): File "/dev/fd/63", line 379, in File "/dev/fd/63", line 379, in KeyError: '2.2.1'
Saving session... ...copying shared history... ...saving history...truncating history files... ...completed.
[Process completed]
I enter PHSP for Photoshop, and the version, and language, and location. It will come up with KeyError: '2.2.1' and (Process completed) I look, and there is no installer. How can I fix this?
when Indesign and illustrator will come in the list?
@thpryrchn @Drovosek01 and probably others. Thanks for getting the ayyybe ccdl script working again. After I noticed this, with many months delay, I have also incorporated your changes into my CC-Offline-Package-Generator which is an application packaging the Drovosek01 version of the ccdl script. CC Offline Package Generator already has all dependencies included in a small 8 MB app, whereas the adobe-packager script may need to download and install about 500 MB of dependencies in order to work.
You may download and try the updated app here: CC Offline Package Generator - Download
@ponziipo - this is not really the reason why we are sharing the ability to download selected versions of Adobe CC applications, and I would request that these questions would not be raised or answered here as I am concerned that they could violate the Github TOS. Maybe r/piracy would be a more appropriate place where you can ask that question. - I think @Drovosek01 explained the purpose of ccdl well:
This can help system administrators who need to install the same program from Adobe on several computers, as well as those people who do not want to use the latest version of programs from Creative Cloud or install the application on an officially unsupported version of macOS ...
Hello, Any idea why it's failing now days ?
=================================
= Adobe macOS Package Generator =
============= 0.1.4 =============
Do you want to make M1 native packages (y/N): y
Downloading products.xml
https://cdn-ffc.oobesaas.adobe.com/core/v4/products/all?_type=xml&channel=ccm,sti&platform=macuniversal,osx10-64,osx10&productType=Desktop
Source URL is: https://cdn-ffc.oobesaas.adobe.com/core/v4/products/all?_type=xml&channel=ccm,sti&platform=macuniversal,osx10-64,osx10&productType=Desktop
Source URL is: https://cdn-ffc.oobesaas.adobe.com/core/v4/products/all?_type=xml&channel=ccm,sti&platform=macarm64,macuniversal&productType=Desktop
Parsing products.xml
Traceback (most recent call last):
File "ccdl.py", line 655, in <module>
File "ccdl.py", line 362, in runccdl
File "ccdl.py", line 276, in parse_products_xml
TypeError: 'NoneType' object is not iterable
[74244] Failed to execute script 'ccdl' due to unhandled exception!
That is because when you select M1, it only shows apps that are for the M1. Some apps are still only Intel, therefore they won't show up..
also make sure you are using the script on https://github.com/Drovosek01/adobe-packager
Not working anymore
Does anyone here have access to After Effects 2020 and Media Encoder 2020?? Please help
@thpryrchn
Ok, I just changed
open('/Temp/adobe.xml'
toopen('/tmp/adobe.xml'
in ccdl.py and now everything works.Thanks, man! 🤝
And bravo @Drovosek01!