@Override
  public void initialize(ExtensionContext context) {
    if (initialized) return;

    Monitor monitor = context.getMonitor();

    AppCredentials appCredentials;
    try {
      appCredentials =
          context.getService(AppCredentialStore.class).getAppCredentials(APPLE_KEY, APPLE_SECRET);

    } catch (Exception e) {
      monitor.info(
          () ->
              "Unable to retrieve Apple AppCredentials. Please configure APPLE_KEY and APPLE_SECRET.");
      return;
    }

    importerMap =
        ImmutableMap.<DataVertical, Importer>builder()
            .put(PHOTOS, new ApplePhotosImporter(appCredentials, monitor))
            .put(VIDEOS, new AppleVideosImporter(appCredentials, monitor))
            .put(MEDIA, new AppleMediaImporter(appCredentials, monitor))
            .put(MUSIC, new AppleMusicImporter(appCredentials, monitor))
            .build();

    exporterMap = ImmutableMap.<DataVertical, Exporter>builder().build();

    RetryStrategyLibrary retryStrategyLibrary = context.getSetting("retryLibrary", null);
    signalHandler = new AppleSignalHandler(appCredentials, retryStrategyLibrary, monitor);
    initialized = true;
  }
TransferExtension to kick off the Transfer jobs to/from Apple
extensions/data-transfer/portability-data-transfer-apple/src/main/java/org/datatransferproject/datatransfer/apple/AppleTransferExtension.java