class_docstr: Service that controls the FiftyOne app.
class_docstr_tok: ["Service","that","controls","the","FiftyOne","app","."]
code: def find_app(self):
      if foc.DEV_INSTALL:
          return ["yarn", "start-desktop"]
  
      for path in etau.list_files("./"):
          if path.endswith(".tar.gz"):
              logger.info("Installing FiftyOne App")
              etau.extract_tar(path, "./", delete_tar=True)
  
      pre = foc.FIFTYONE_DESKTOP_APP_DIR
      for path in etau.list_files("./"):
          if path.endswith(".AppImage") or path.endswith(".exe"):
              return [os.path.join(pre, path)]
  
      if os.path.isdir("./FiftyOne.app"):
          return [
              os.path.join(
                  pre, "FiftyOne.app", "Contents", "MacOS", "FiftyOne"
              )
          ]
  
      raise RuntimeError(
          "Could not find FiftyOne app in %r"
          % foc.FIFTYONE_DESKTOP_APP_DIR
      )
  
imports: import logging
  import os
  import subprocess
  import sys
  import psutil
  import requests
  from retrying import retry
  import eta.core.utils
  import fiftyone.constants
  import fiftyone.core.config
  import fiftyone.core.context
  import fiftyone.service.util
label_desc: Use image node_id 3 for calling the AppService obj's underlying member method code with example usage: obj.find_app() and returns: list, list, list