diff --git a/DocumentationAssets/Setup_Permissions_Camera_Usage.png b/DocumentationAssets/Setup_Permissions_Camera_Usage.png
new file mode 100644
index 0000000..5cae4ab
Binary files /dev/null and b/DocumentationAssets/Setup_Permissions_Camera_Usage.png differ
diff --git a/DocumentationAssets/Setup_Permissions_Photo_Library_Additions.png b/DocumentationAssets/Setup_Permissions_Photo_Library_Additions.png
new file mode 100644
index 0000000..fff25be
Binary files /dev/null and b/DocumentationAssets/Setup_Permissions_Photo_Library_Additions.png differ
diff --git a/DualCameraDemo/DualCameraDemo.xcodeproj/project.pbxproj b/DualCameraDemo/DualCameraDemo.xcodeproj/project.pbxproj
index d687b40..9efa2f1 100644
--- a/DualCameraDemo/DualCameraDemo.xcodeproj/project.pbxproj
+++ b/DualCameraDemo/DualCameraDemo.xcodeproj/project.pbxproj
@@ -462,6 +462,7 @@
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_NSCameraUsageDescription = "This app uses your cameras to demo dual camera capture functionality";
+ INFOPLIST_KEY_NSPhotoLibraryAddUsageDescription = "Allow this app to save photos to your library so you can view them later.";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
diff --git a/README.md b/README.md
index 17cb2c5..dbab593 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,11 @@
# DualCameraKit
-





-
Simultaneous front & back iOS camera capture made simple.
@@ -92,10 +90,22 @@ targets: [
## OS/Requirements:
-- Add camera permissions to your app's `Info.plist` - `Privacy - Camera Usage Description`
-
+### Permissions
+
+- [Required] Add camera permissions to your app's `Info.plist` - `Privacy - Camera Usage Description`
+
+ - This camera permission is required because this library needs to access cameras in order to be useful.
+- [Optional] Add photo library permissions to your app's `Info.plist` - `Privacy - Photo Library Additions Usage Description`
+
+ - This photo library addition permission is optional because you don't need to save to the user's media library after capture.
+ - See `videoSaveStrategy` and `photoSaveStrategy` for customizing this behavior.
-- Live, nonsimulator device, iOS 17+ for camera usage (simulator uses mocked camera).
+### Device
+
+- Live, nonsimulator device, iOS 17+ for camera usage.
+- The simulator uses a mocked camera.
+
+## Importing DualCameraKit
After installation, you can import the library in your Swift files:
@@ -175,19 +185,19 @@ struct ContentView: View {
## `DualCameraScreen` - Parameters
-| Parameter | Type | Default | Description |
-|-----------|------|---------|-------------|
+| Parameter | Type | Default | Description |
+| ----------- | --------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `viewModel` | `DualCameraViewModel` | `.default()` | Provides complete configuration for the camera screen including layout, video recording options, and media saving strategies. |
## `DualCameraViewModel` Configuration
-| Parameter | Type | Default | Description |
-|-----------|------|---------|-------------|
-| `dualCameraController` | `DualCameraControlling` | Device-specific controller | Core camera controller. Uses `DualCameraMockController` on simulator and `DualCameraController` on device. |
-| `layout` | `DualCameraLayout` | `.piP(miniCamera: .front, miniCameraPosition: .bottomTrailing)` | Determines how cameras are displayed (picture-in-picture, side-by-side, or stacked). |
-| `videoRecorderMode` | `DualCameraVideoRecordingMode` | `.cpuBased(.init(photoCaptureMode: .fullScreen))` | Configures video recording strategy and quality. |
-| `videoSaveStrategy` | `VideoSaveStrategy` | `.videoLibrary(service: CurrentDualCameraEnvironment.mediaLibraryService)` | Strategy for saving recorded videos. |
-| `photoSaveStrategy` | `PhotoSaveStrategy` | `.photoLibrary(service: CurrentDualCameraEnvironment.mediaLibraryService)` | Strategy for saving captured photos. |
+| Parameter | Type | Default | Description |
+| ---------------------- | ------------------------------ | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `dualCameraController` | `DualCameraControlling` | Device-specific controller | Core camera controller. Uses `DualCameraMockController` on simulator and `DualCameraController` on device. |
+| `layout` | `DualCameraLayout` | `.piP(miniCamera: .front, miniCameraPosition: .bottomTrailing)` | Determines how cameras are displayed (picture-in-picture, side-by-side, or stacked). |
+| `videoRecorderMode` | `DualCameraVideoRecordingMode` | `.cpuBased(.init(photoCaptureMode: .fullScreen))` | Configures video recording strategy and quality. |
+| `videoSaveStrategy` | `VideoSaveStrategy` | `.videoLibrary(service: CurrentDualCameraEnvironment.mediaLibraryService)` | Strategy for saving recorded videos. |
+| `photoSaveStrategy` | `PhotoSaveStrategy` | `.photoLibrary(service: CurrentDualCameraEnvironment.mediaLibraryService)` | Strategy for saving captured photos. |
> Note on Default Media Handling: By default, all photos and videos are saved to the device's photo library. This requires the user to grant permission when first capturing media. The default implementation handles permission requests, file cleanup, and provides success feedback. When using custom strategies, you'll need to implement these aspects yourself if needed.
@@ -260,6 +270,7 @@ public enum DualCameraLayout {
- iOS only. iPad support is a future enhancement. Other platforms only have one camera
# API Reference
+
🚧
# References