Package: appstore-tools
appstore-toolsTools for the AppStore Connect API.This package provides methods to publish, download, and list information about AppStore meta-data (descriptions, keywords, screenshots, previews, etc). Combined with a deployment workflow (such as github actions), the AppStore meta-data can be tracked and deployed along side the rest of the app's source code and assets.Installpipinstallappstore-toolsUsageappstore-tools[-h][--version]action[args]Examples:# List all apps under the app store accountappstore-toolsapps# Download the assets for an appappstore-toolsdownload--bundle-idcom.example.myapp--asset-dirmyassets# Publish the assets for an appappstore-toolspublish--bundle-idcom.example.myapp--asset-dirmyassetsUsage ConfigMost actions will require authentication with the AppStore Connect API, as well as specifying which app to target.All these parameters can be passed via command line argument, but for convenience, they (and any others) can also be loaded from a config file.Use the default config file path ofappstore_tools.config, or specify another with--config-file CONFIG_FILE.; appstore_tools.config; sample contentsissuer-id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxkey-id=XXXXXXXXXXkey-file=/home/me/AppStoreConnect_AuthKey_XXXXXXXXXX.p8bundle-id=com.example.myappCodeThe actions provided by the command line can also be accessed by import in a python script.# Import the packagefromappstore_toolsimportappstore,actions# Get the auth credentialswithopen("AuthKey.p8","r")asfile:key=file.read()issuer_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"key_id="XXXXXXXXXX"# Create an access tokenaccess_token=appstore.create_access_token(issuer_id=issuer_id,key_id=key_id,key=key)# Call the AppStore connect APIapps=appstore.get_apps(access_token=access_token)# Or call one of the AppStore-Tools Actionsactions.list_apps(access_token=access_token)Asset Directory StructureThedownloadandpublishactions look for assets in the following directory structure starting at--asset-dir ASSET_DIR. Screenshots and Previews are sorted alphabetically in the store listing.To leave an attribute unaffected by thepublishaction, remove the corresponding text file from the tree. An empty text file can be used to set the attribute to an empty string.Likewise, to leave the screenshots (or previews) unaffected, remove the entirescreenshotsfolder. Ifscreenshotsis present, thepublishaction will add/remove screenshot-display-types and their screenshots to match.Additionally, filepaths can be explicitly ignored by setting a regex pattern with--asset-ignore ASSET_IGNORE.[ASSET_DIR]└──com.example.myapp└──en-US├──description.txt├──keywords.txt├──marketingUrl.txt├──name.txt├──previews│└──IPHONE_65│├──video.mp4│└──video.mp4.json├──privacyPolicyText.txt├──privacyPolicyUrl.txt├──promotionalText.txt├──screenshots│├──APP_IPAD_PRO_129││├──10_Image.png││├──20_AnotherImage.png││└──30_MoreImages.png│├──APP_IPAD_PRO_3GEN_129││├──a_is_the_first_letter.png││├──b_is_the_second_letter.png││└──c_is_the_third_letter.png│├──APP_IPHONE_55││├──image01.png││├──image02.png││└──image03.png│└──APP_IPHONE_65│├──image01.png│├──image02.png│└──image03.png├──subtitle.txt├──supportUrl.txt└──whatsNew.txtAdditional attributes for media files can be set by placing ajsonfile with a matching base file name along side the media file. For example, the contents ofvideo.mp4.json(along sidevideo.mp4) could look like this:{"previewFrameTimeCode":"00:00:14:01"}SourceClone the source codegitclonehttps://github.com/bennord/appstore-tools.gitInstall dependenciespoetryinstallRun from within project environmentpoetryshell
appstore-tools--version