diff --git a/isideload/src/sideload/bundle.rs b/isideload/src/sideload/bundle.rs index 7b1fb69..5c7547d 100644 --- a/isideload/src/sideload/bundle.rs +++ b/isideload/src/sideload/bundle.rs @@ -45,23 +45,27 @@ impl Bundle { "Failed to parse Info.plist".to_string(), ))?; - // Load app extensions from PlugIns directory - let plug_ins_dir = bundle_path.join("PlugIns"); - let app_extensions = if isideload_vfs::fs::metadata(&plug_ins_dir).is_ok() { - isideload_vfs::fs::read_dir(&plug_ins_dir) - .context(SideloadError::InvalidBundle( - "Failed to read PlugIns directory".to_string(), - ))? + // Load app extensions from both supported extension directories. + let mut app_extensions = Vec::new(); + for directory in ["PlugIns", "Extensions"] { + let extensions_dir = bundle_path.join(directory); + if isideload_vfs::fs::metadata(&extensions_dir).is_err() { + continue; + } + + let extensions = isideload_vfs::fs::read_dir(&extensions_dir) + .context(SideloadError::InvalidBundle(format!( + "Failed to read {directory} directory" + )))? .filter_map(|entry| entry.ok()) .filter(|entry| { entry.file_type().map(|ft| ft.is_dir()).unwrap_or(false) && isideload_vfs::fs::metadata(&entry.path().join("Info.plist")).is_ok() }) - .filter_map(|entry| Bundle::new(entry.path()).ok()) - .collect() - } else { - Vec::new() - }; + .filter_map(|entry| Bundle::new(entry.path()).ok()); + + app_extensions.extend(extensions); + } // Load frameworks from Frameworks directory let frameworks_dir = bundle_path.join("Frameworks");