The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
### Bug Fixes
- Fixed a crash that would occur on the "iOSOnMac" environment on Apple Silicon when searching for USB devices. Running CascableCore in this mode is currently experimental — please report any problems you find.
### Bug Fixes
- Fixed a crash that could occur on macOS when disconnecting from a USB camera on macOS 13 Ventura. [CORE-399]
- Improved internal protection around the handling of messages on USB cameras on iOS. [CORE-400]
### Other
- CascableCore now requires macOS 10.13 High Sierra or later.
### Bug Fixes
- Fixed a bug that could cause live view to not start again after it'd been stopped on some Canon cameras. [CORE-394]
### Camera Compatibility
- Added support for the Canon EOS R7 and EOS R10. [CORE-392]
### Other
- CascableCore now requires iOS 11.0 or higher.
### Improvements
- Improved support for HEIF images when shooting with Sony cameras. This includes correct property display values when the camera is in HEIF mode, and camera-initiated transfers from these cameras may now report an original representation UTI of `public.heic` and a suggested filename extension of `HEIC`.
**Note:** Sony cameras use the extension `.HIF` for HEIF images, which isn't recognised by macOS or iOS as a valid extension for these files — it should be `.HEIC`. CascableCore currently exposes these filenames as-is — for example, a camera-initiated transfer of a HEIF image from a Sony camera would report a suggested filename extension of `HEIC`, but the `fileNameHint` will report a value like `DSCXXXXX.HIF`.
### Bug Fixes
- Fixed the reported display values of some shutter speeds faster than 1/8000 via an updated StopKit.
- Fixed a bug that would cause camera-initiated transfers to fail from the Sony α1 when connected via USB. [CORE-376]
This release backports the bug fixes from 12.1 and 12.2 without including the API changes from 12.1.
### API Changes
- Methods for streaming files (`-streamItemWithPreflightBlock:…`) now return an `NSProgress` object for easier progress reporting.
### Documentation Changes
- Clarified that file streaming (`-streamItemWithPreflightBlock:…`, etc) can, in some circumstances, deliver empty data objects during streaming. This is not an error — client code should handle this circumstance correctly and return the desired streaming instruction.
### Bug Fixes
- Fixed "Delegate Updated" messages flooding the system console when connected to a camera via USB.
- Fixed a crash when serialising certain exposure property values from some cameras via `NSCoding`. [CORE-378]
### Increased Compatibility with Sony Cameras
CascableCore 12 greatly expands support for Sony cameras. USB remote control via **PC Remote (USB)** has been added for the following already-supported models:
- α7 II, α7 III
- α7R II, α7R III
- α7S, α7S II
- α6000, α6300, α6500
In addition, USB remote control via **PC Remote (USB)** and network remote control via **Control with Smartphone**, and **PC Remote (WiFi)** (where available) has been added for these newly-supported models:
- α7 IV
- α7R IV
- α7S III
- α7C
- α9, α9 II
- α1
- α6100, α6400, α6600
- ZV-E10, ZV-1
- RX100 V, RX100 VI, RX100 VII
### Other Camera Compatibility
- Added support for the OM System OM-1. This camera is identified as an Olympus camera (`CBLCameraFamilyOlympus`) by CascableCore.
### New API: Camera-Initiated Transfer
Shot preview (`id <CBLCameraShotPreviewDelivery>`) has been removed and replaced by a more powerful API that's more suited to the fact that original images can be transferred as well as previews.
The new API uses the terminology of "camera-initiated transfers", and is designed to handle both previews of shots added to a memory card as well as the transfer of full image files — including cameras set to "Host Only" saving – i.e., the full image needs to be transferred to the host to avoid data loss. The new API can handle simple cases ("I just want a preview") and more complex ones ("I want a preview, and if the image would otherwise be lost, the original image too").
This new API is defined in `CBLCameraInitiatedTransfer.h`. The flow is as follows:
- The client receives a callback from the camera notifying it of a new camera-initiated transfer request. This will be an object of type `id <CBLCameraInitiatedTransferRequest>`, which contains some metadata about the incoming image, whether or not transferring it is required to avoid data loss (i.e., "Host Only" saving), and which representations the request contains.
- The client then executes the request, informing it which representations are wanted. Current representations are "preview" and "original". The image transfer is then performed, optimising data transfer if possible (for instance, if the client only requests the preview representation of a RAW image, CascableCore will try to avoid transferring the entire RAW image).
- When the request is complete, a result object of type `id <CBLCameraInitiatedTransferResult>` will be delivered. The result object contains additional metadata about the transferred image, as well as helpers for writing representations to disk, getting them as in-memory data, and getting preview images.
Previous uses of the shot preview API can be migrated to camera-initiated transfers with no loss in functionality by transferring preview representations (`CBLCameraInitiatedTransferRepresentationPreview`), then using either `-generatePreviewImage:` or `-generateDataForRepresentation:completionHandler:` on the result.
### New API: Stepped Properties
CascableCore now supports "stepped properties" — properties that don't have a list of valid values, and are instead changed by adjusting the property "up" or "down" in steps.
This change has been implemented in a backwards-compatible way, and with no code changes stepped properties will appear read-only (i.e., will have an empty `validSettableValues` value).
To implement stepped properties, see the new `valueSetType` property on `id <CBLCameraProperty>`. If that returns `CBLPropertyValueSetTypeStepping`, you can use the `incrementValue:` and `decrementValue:` methods to change that property's value.
### Other API Changes
- Added the `CBLPropertyIdentifierImageDestination` property. Values are typically along the lines of "Host", "Camera", and "Camera & Host". Common values are of type `CBLPropertyCommonValueImageDestination`.
- Added the error code `CBLErrorCodeIncorrectCommunicationMode`, of which connections will fail on a Sony USB camera not in PC Remote mode.
- Added the error code `CBLErrorCodeObjectTooLarge`, which can be returned when requesting very large assets as in-memory data objects from an `id <CBLCameraInitiatedTransferResult>` object.
### Known Issues
- There is no video timer on some Sony cameras when being controlled via USB. Video recording still works, if available.
- Live view zoom is not yet implemented for newly-supported Sony cameras.
- Extremely new cameras (such as the α7 IV) support touch AF via remote control, but this is not yet supported in CascableCore.
### Video Recording
Added an initial, basic API for working with video recording. This API has currently been implemented for Canon EOS and Nikon cameras.
To see if a camera supports video recording, check for `CBLCameraSupportedFunctionalityVideoRecording`. To switch a camera into a mode that allows video recording, use `CBLCameraAvailableCommandCategoryVideoRecording`.
Once the camera is in a mode in which video recording can go ahead, start and stop video recording with `-startVideoRecording:` and `-endVideoRecording:`. Whether or not the camera is currently recording video can be observed with `-isRecordingVideo`.
Video recording has ramifications across the entire API surface of a camera, and particularly changes a number of assumptions you may have been making when working with Canon and Nikon cameras. In particular:
- A number of APIs are unavailable while video is recording, including all filesystem access. See the new error code `CBLErrorCodeVideoRecordingInProgress`.
- Canon EOS and Nikon cameras can now be placed into a mode where taking photos isn't allowed. Previously, these cameras always allowed both stills shooting and filesystem access.
- Older Canon EOS cameras don't allow video recording while WiFi is active. If you try to start recording video via a WiFi connection, the `CBLErrorCodeDisallowedOnCurrentTransport` error will be returned.
- Some cameras require moving a physical switch to move the camera in or out of video mode. If that's the case, attempting to switch the available command categories to or from `CBLCameraAvailableCommandCategoryVideoRecording` may produce the error `CBLErrorCodeRequiresPhysicalInteraction`. If this happens, instruct the user to flip the relavent switch manually. The `-currentCommandCategories` property is observable with Key-Value Observing, and will change automatically when the video mode is changed by the user.
#### New API
- Added `CBLCameraSupportedFunctionalityVideoRecording` to enable checks to see if video recording is supported by a particular camera.
- Added `CBLCameraAvailableCommandCategoryVideoRecording` to put a camera into video recording mode.
- Added the `-isRecordingVideo` and `-currentVideoTimerValue` properties to `id <CBLCamera>`, which are observable with Key-Value Observing.
- Added `-startVideoRecording:` and `endVideoRecording:` to `id <CBLCamera>` to start and stop video recording.
- Added the error codes `CBLErrorCodeVideoRecordingInProgress`, `CBLErrorCodeRequiresPhysicalInteraction`, `CBLErrorCodeDisallowedOnCurrentTransport`, `CBLErrorCodeRequiresLiveView`, `CBLErrorCodeCardError`, and `CBLErrorCodeStorageFull`.
#### Breaking API changes:
- `CBLCameraAvailableCommandCategoryRemoteShooting` has been renamed to `CBLCameraAvailableCommandCategoryStillsShooting`.
- A number of existing situations where a camera would return a `CBLErrorCodeNotAvailable` error code have been changed so a more accurate error code is returned instead. Particularly, `CBLErrorCodeRequiresLiveView` and `CBLErrorCodeVideoRecordingInProgress` have replaced a number of more generic existing error paths.
#### Known Issues
- Some older Canon cameras will automatically terminate live view when exiting video mode. If this happens, re-start live view.
- Newer Nikon cameras have separate properties for video exposure settings, which aren't currently exposed by CascableCore. They will be added in a future release.
### Camera Compatibility
- Added support for the Canon EOS R3.
- Added `CBLCameraSupportedFunctionalityRemoteControlWithoutLiveView` to the Canon EOS 5D Mark II. [CORE-363]
- Greatly improved file transfer performance from a number of Nikon cameras. [CORE-354]
### Bug Fixes
- CascableCore will no longer attempt to deliver shot preview callbacks for video or other non-image file types from Canon or Nikon cameras.
- Improved the accuracy of the `focused` and `active` properties of `id <CBLCameraLiveViewAFArea>` objects from Canon cameras.
- Fixed some missing autoexposure mode localized display values for certain Nikon cameras. [CORE-347]
### Camera Compatibility
- Added support for "focusless half-press" for the EOS M6 Mark II (i.e., photos can be taken without autofocus even if the camera is set to autofocus). [CORE-353]