Example of a complete app_info.json

The following shows the contents of an app description file in which all types of app parts are configured by way of example:

 "plcnextapp": {
        "name": "Full Multipart App",
        "identifier": "00000000000000",
        "version": "Full 20.0 (112.12 DemoVersion)",
        "target": "AXC F 2152",
        "minfirmware_version": "20.0.0",
        "manufacturer": "Phoenix Contact",
        "licensetype": "Full"
     },
     "engineerapp": {
        "folder": "/arp/PCWE"
     },
     "cmdtools":
     [
        {
        "path" : "/bin/DemoCmdTool"
        },
        {
        "path" : "<Path to cmd tool executable binary>"
        }
     ],
     "plcnextextensions" :
     [
        {
           "acfconfigpath" : "/PLCnextRuntimeDaemon.acf.config"
        },
        {
          "acfconfigpath" : "<path to PLCnext extension .acf.config file>"
        }
     ],
     "linuxdaemons" :
     [
        {
        "path" : "/bin/daemon1exe",
        "cmdargs" : "arg1 arg2 … argN",
        "starttime": "40"
        },
        {
        "path" : "<Path to daemon executable binary>",
        "cmdargs" : "<arg1 arg2 … argN>",
        "starttime": "99",
        "initScriptTemplate":"<Path to own template file>"
        }
     ],
     "sharedlibs":
     [
        {
        "libpath" : "/lib/sharedlib1.so"
        },
        {
        "libpath" : "<Path to shared library binary>"
        }
     ],
     "datastorage": {
        "persistentdata": true,
        "temporarydata" : true
     },
     "plcnextservices":
     [
        {
           "service": "<Service ID>",
           "action" : "EXCLUSIVE_ACCESS"
        },
        {
           "service": "WBM",
           "action" : "MUST_HAVE"
        },
        {
           "service" : "OPCUA",
           "action" : "MUST_NOT_HAVE"
        }
     ],
     "updateconfigs": {
           "autoupdate_enabled": <true/false>,
           "keep_persistentdata": <true/false>,
           "keep_temporarydata": <true/false>,
           "post_updatescript": "<Path to app update script>" 
        }
  }

 

Note: As mentioned earlier, these are optional app parts entries, don't use them if there are not needed or if their configured files do not exist in the app-container, otherwise the app installation on the target may be refused because of detected configuration errors.