blob: f44e7b08c936f1cfcc5760c516260780bf7dea95 [file] [view]
# Matter TV Casting Darwin (iOS/macOS) App Example
This is a Matter TV Casting app for iOS and macOS that can be used to cast
content to a TV. This app discovers TVs on the local network that act as
commissioners, lets the user select one, sends the TV a User Directed
Commissioning request, enters commissioning mode, advertises itself as a
Commissionable Node and gets commissioned. Then it allows the user to send
Matter commands to the TV.
Refer to the
[Matter Casting APIs documentation](https://project-chip.github.io/connectedhomeip-doc/examples/tv-casting-app/APIs.html)
to build the Matter "Casting Client" into your consumer-facing mobile app.
## Requirements
- Xcode 15.0 or later
- macOS with Apple Silicon or Intel processor
- iOS Simulator or physical iOS device for testing
## Building the App
### Using Xcode
1. Open the workspace:
```bash
cd examples/tv-casting-app/darwin
open TvCastingDarwin.xcworkspace
```
2. Select the appropriate scheme:
- `TvCasting` - Main iOS app
- `MatterTvCastingBridge` - Framework/library
3. Select your target device (simulator or physical device)
4. Build and run: `Cmd+R`
### Using Command Line
Build the framework:
```bash
cd examples/tv-casting-app/darwin
xcodebuild -workspace TvCastingDarwin.xcworkspace \
-scheme MatterTvCastingBridge \
-destination 'platform=iOS Simulator,name=iPhone 16' \
build
```
## Running Unit Tests
The Darwin TV Casting app includes unit tests for the SendUDC functionality and
other features.
### Prerequisites
The test files have been created but require one-time setup in Xcode to add them
to the project:
1. **Open the project in Xcode**:
```bash
cd examples/tv-casting-app/darwin
open MatterTvCastingBridge/MatterTvCastingBridge.xcodeproj
```
2. **Add a test target** (if not already present):
- File New Target
- Choose "Unit Testing Bundle" under iOS
- Name it `MatterTvCastingBridgeTests`
- Set the target to be tested to `MatterTvCastingBridge`
- Click Finish
3. **Add the test file to the test target**:
- In the Project Navigator, right-click on `MatterTvCastingBridgeTests`
folder
- Choose "Add Files to MatterTvCastingBridge..."
- Navigate to `MatterTvCastingBridgeTests/MCCastingPlayerSendUDCTests.m`
- Ensure it's added to the `MatterTvCastingBridgeTests` target
- Click Add
4. **Add OCMock dependency**:
- Select the project in Project Navigator
- Select the `MatterTvCastingBridgeTests` target
- Go to "Build Phases" → "Link Binary With Libraries"
- Add OCMock framework (install via CocoaPods or Swift Package Manager if
needed)
### Running Tests in Xcode
Once the test target is configured:
1. Open the project in Xcode
2. Press `Cmd+U` to run all tests
3. Or click the diamond icon next to individual test methods to run specific
tests
4. Or use the Test Navigator (`Cmd+6`) to browse and run tests
### Running Tests from Command Line
After the test target is properly configured in Xcode:
```bash
cd examples/tv-casting-app/darwin
xcodebuild test \
-project MatterTvCastingBridge/MatterTvCastingBridge.xcodeproj \
-scheme MatterTvCastingBridge \
-destination 'platform=iOS Simulator,name=iPhone 16'
```
### Test Coverage
The SendUDC test suite (`MCCastingPlayerSendUDCTests.m`) includes 10 test cases
covering:
1. Basic sendUDCWithCallbacks invocation
2. NoPasscode flag handling for app detection
3. CancelPasscode flag for ending UDC sessions
4. InstanceName management with UUID-based identifiers
5. MCTargetAppInfo handling with vendor/product IDs
6. CommissionerDeclarationCallback registration
7. Complete app detection workflow simulation
8. Multiple target apps support
9. Error handling with NSError responses
10. Callback validation requirements
### Reviewing Test Code Without Running
If you prefer to review the test structure without setting up the test target:
```bash
cd examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridgeTests
cat MCCastingPlayerSendUDCTests.m
```
The test file is complete and demonstrates proper usage of the SendUDC API with
OCMock for mocking dependencies.
### Troubleshooting Tests
**Issue**: "Scheme is not currently configured for the test action"
- **Solution**: The test target needs to be added to the Xcode project (see
Prerequisites above)
**Issue**: Build errors when running tests
- **Solution**: Ensure all dependencies are properly linked and the project
builds successfully before running tests
**Issue**: OCMock not found
- **Solution**: Install OCMock via CocoaPods or Swift Package Manager and link
it to the test target
For more details on the test implementation, see the
[test documentation](../tv-casting-common/core/tests/README.md).
## Running the App
This example Matter TV Casting Darwin app can be tested with the
[example Matter tv-app](https://github.com/project-chip/connectedhomeip/tree/master/examples/tv-app)
running on a Raspberry Pi or other supported platform.