private void addOptionalComponents(Program program, List<Option> options, MessageLog log,
			TaskMonitor monitor) throws Exception {
		boolean addLibobjc =
			OptionUtils.getOption(LIBOBJC_OPTION_NAME, options, LIBOBJC_OPTION_DEFAULT);
		long flags = 0;
		if (OptionUtils.getOption(AUTH_DATA_OPTION_NAME, options, AUTH_DATA_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_MAPPING_AUTH_DATA;
		}
		if (OptionUtils.getOption(DIRTY_DATA_OPTION_NAME, options, DIRTY_DATA_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_MAPPING_DIRTY_DATA;
		}
		if (OptionUtils.getOption(CONST_DATA_OPTION_NAME, options, CONST_DATA_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_MAPPING_CONST_DATA;
		}
		if (OptionUtils.getOption(TEXT_STUBS_OPTION_NAME, options, TEXT_STUBS_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_MAPPING_TEXT_STUBS;
		}
		if (OptionUtils.getOption(CONFIG_DATA_OPTION_NAME, options, CONFIG_DATA_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_DYNAMIC_CONFIG_DATA;
		}
		if (OptionUtils.getOption(READ_ONLY_DATA_OPTION_NAME, options,
			READ_ONLY_DATA_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_READ_ONLY_DATA;
		}
		if (OptionUtils.getOption(CONST_TPRO_DATA_OPTION_NAME, options,
			CONST_TPRO_DATA_OPTION_DEFAULT)) {
			flags |= DyldCacheMappingAndSlideInfo.DYLD_CACHE_MAPPING_CONST_TPRO_DATA;
		}
		if (!addLibobjc && flags == 0) {
			return;
		}
		try (FileSystemRef fsRef = openDyldCache(program, monitor)) {
			DyldCacheFileSystem fs = (DyldCacheFileSystem) fsRef.getFilesystem();
			Set<GFile> files = new HashSet<>();
			if (addLibobjc) {
				Optional.ofNullable(fs.lookup("/usr/lib/libobjc.A.dylib")).ifPresent(files::add);
			}
			files.addAll(fs.getFiles(flags));
			for (GFile file : files) {
				Group[] children = program.getListing().getDefaultRootModule().getChildren();
				if (Arrays.stream(children).anyMatch(e -> e.getName().contains(file.getPath()))) {
					log.appendMsg("%s has already been added".formatted(file.getPath()));
					continue;
				}
				ByteProvider p = fs.getByteProvider(file, monitor);
				FileBytes fileBytes = MemoryBlockUtils.createFileBytes(program, p, monitor);
				MachoExtractProgramBuilder.buildProgram(program, p, fileBytes, true, log,
					monitor);
			}
		}
	}
A {@link Loader} for components extracted by Ghidra from a DYLD Cache
Ghidra/Features/FileFormats/src/main/java/ghidra/app/util/opinion/DyldCacheExtractLoader.java