docs: def new(self, **kwargs):
          '''
          :param initializeFrom: ID of an existing app object from which to initialize the app
          :type initializeFrom: string
          :param applet: ID of the applet that the app will be created from
          :type applet: string
          :param name: Name of the app (inherits from *initializeFrom* if possible)
          :type name: string
          :param title: Title or brand name of the app (optional)
          :type title: string
          :param summary: A short description of the app (optional)
          :type summary: string
          :param description: An extended description of the app (optional)
          :type description: string
          :param details: Arbitrary JSON to be associated with the app (optional)
          :type details: dict or list
          :param version: Version number
          :type version: string
          :param bill_to: ID of the user or organization who will own the app and be billed for its space usage (optional if an app with this name already exists)
          :type bill_to: string
          :param access: Access specification (optional)
          :type access: dict
          :param resources: Specifies what is to be put into the app's resources container. Must be a string containing a project ID, or a list containing object IDs. (optional)
          :type resources: string or list
  
          .. note:: It is highly recommended that the higher-level module
             :mod:`dxpy.app_builder` or (preferably) its frontend `dx build --create-app
             <https://wiki.dnanexus.com/Command-Line-Client/Index-of-dx-Commands#build>`_
             be used instead for app creation.
  
          Creates an app with the given parameters by using the specified
          applet or app as a base and overriding its attributes. See the
          API documentation for the `/app/new
          <https://wiki.dnanexus.com/API-Specification-v1.0.0/Apps#API-method%3A-%2Fapp%2Fnew>`_
          method for more info.
  
          Exactly one of *initializeFrom* and *applet* must be provided.
  
          The app is only available to its developers until
          :meth:`publish()` is called, and is not run until :meth:`run()`
          is called.
  
          '''
          #TODO: add support for regionalOptions (and deprecate top-level applet and resources)
          dx_hash = {}
          if 'applet' not in kwargs and 'initializeFrom' not in kwargs:
              raise DXError("%s: One of the keyword arguments %s and %s is required" % (self.__class__.__name__, 'applet', 'initializeFrom'))
  
          for field in ['version']:
              if field not in kwargs:
                  raise DXError("%s: Keyword argument %s is required" % (self.__class__.__name__, field))
              dx_hash[field] = kwargs[field]
              del kwargs[field]
  
          for field in 'initializeFrom', 'applet', 'name', 'title', 'summary', 'description', 'billing', 'access', 'resources':
              if field in kwargs:
                  dx_hash[field] = kwargs[field]
                  del kwargs[field]
  
          if "bill_to" in kwargs:
              dx_hash['billTo'] = kwargs['bill_to']
              del kwargs["bill_to"]
  
          resp = dxpy.api.app_new(dx_hash, **kwargs)
          self.set_id(dxid=resp["id"])