From 29865acd29953f66dca07fb29f4eea15ad984613 Mon Sep 17 00:00:00 2001 From: Raffi Date: Tue, 3 Nov 2026 16:22:28 +0100 Subject: [PATCH 1/5] ci: publish CocoaPods releases only to the self-hosted specs repo --- .github/workflows/bump-and-release.yml | 67 ++++++++------------------ 1 file changed, 19 insertions(+), 48 deletions(-) diff --git a/.github/workflows/bump-and-release.yml b/.github/workflows/bump-and-release.yml index 10f56502..7f711b10 100644 --- a/.github/workflows/bump-and-release.yml +++ b/.github/workflows/bump-and-release.yml @@ -1,5 +1,5 @@ name: Bump and release -run-name: ${{ (inputs.version == '' && 'Not bumping version') || format('Bumping version to {0}', inputs.version) }} and ${{ (inputs.dryRun == true && 'validating') || 'releasing' }} ${{ inputs.connectors }} on cocoapods trunk ${{ (inputs.cocoapodsTrunk == true && '✅') || '❌' }}, on self hosted spec repo ${{ (inputs.selfHosted == true && '✅') || '❌' }} +run-name: ${{ (inputs.version == '' && 'Not bumping version') || format('Bumping version to {0}', inputs.version) }} and ${{ (inputs.dryRun == true && 'validating') || 'releasing' }} ${{ inputs.connectors }} on the self hosted spec repo on: workflow_dispatch: inputs: @@ -12,16 +12,6 @@ on: required: true default: true type: boolean - cocoapodsTrunk: - description: 'If true, releases on Cocoapods trunk public spec repo.' - required: true - default: true - type: boolean - selfHosted: - description: 'If true, releases on self hosted spec repo.' - required: true - default: true - type: boolean connectors: description: 'Choose the Connector(s)' required: true @@ -79,12 +69,9 @@ jobs: run: | git tag ${{ inputs.version }} git push origin ${{ inputs.version }} - - name: ${{ (inputs.dryRun == true && 'Validate') || 'Release' }} on Cocoapods - env: - COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} + - name: ${{ (inputs.dryRun == true && 'Validate') || 'Release' }} on the self hosted spec repo + shell: bash run: | - # make the command - command="${{ (inputs.dryRun == true && 'spec lint') || 'trunk push' }}" # make the list of connectors prefix="THEOplayer-Connector" connectors=() @@ -115,47 +102,31 @@ jobs: else connectors+=("$prefix-${{ inputs.connectors }}.podspec") fi - if [[ "${{ inputs.selfHosted }}" == "true" && "${{ inputs.dryRun }}" != "true" ]]; then + if [[ "${{ inputs.dryRun }}" == "true" ]]; then + trap 'git checkout -- "${connectors[@]}"' EXIT + else if [ -d "$HOME/.cocoapods/repos/cocoapods-specs" ]; then pod repo remove cocoapods-specs fi pod repo add cocoapods-specs \ https://x-access-token:${{ secrets.PODS_SPEC_REPO_TOKEN }}@github.com/THEOplayer/cocoapods-specs.git fi - for connector in ${connectors[*]} + for connector in "${connectors[@]}" do pod repo update - options="--verbose --allow-warnings" - if [[ "${{ inputs.selfHosted }}" == "true" ]]; then - selfHostedOptions=$options - selfHostedOptions+=" --use-json" - if [[ "${{ inputs.dryRun }}" != "true" ]]; then - sources="--sources=https://cdn.cocoapods.org" - if [[ $connector == *Nielsen.podspec ]]; then - sources+=",https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git" - selfHostedOptions+=" --skip-import-validation" - fi - pod repo push cocoapods-specs $connector $selfHostedOptions $sources - else - echo "dryRun -> skip selfHosted release" - fi + options=(--verbose --allow-warnings) + sources="https://github.com/THEOplayer/cocoapods-specs.git,https://cdn.cocoapods.org" + if [[ $connector == *Nielsen.podspec ]]; then + sources+=",https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git" + options+=(--skip-import-validation) fi - if [[ "${{ inputs.cocoapodsTrunk }}" == "true" ]]; then - if [[ $connector == *Nielsen.podspec ]]; then - echo "Skip Nielsen" - continue - fi - cmd="pod $command $connector $options" - if [ ${{ inputs.dryRun }} == false ]; then - cmd="$cmd --synchronous" - else - branch=$(git rev-parse --abbrev-ref HEAD) - sed -i '' "s|:tag => [^,}]*|:branch => \"$branch\"|g" "$connector" - fi - $cmd - if [ ${{ inputs.dryRun }} == true ]; then - git checkout "$connector" - fi + if [[ "${{ inputs.dryRun }}" == "true" ]]; then + branch=$(git rev-parse --abbrev-ref HEAD) + sed -i '' "s|:tag => [^,}]*|:branch => \"$branch\"|g" "$connector" + pod spec lint "$connector" "${options[@]}" --private --sources="$sources" + git checkout -- "$connector" + else + pod repo push cocoapods-specs "$connector" "${options[@]}" --use-json --sources="$sources" fi done Cleanup: From d226428dc247bdad08c86fcaae3ba2792be6351b Mon Sep 17 00:00:00 2001 From: Raffi Date: Tue, 3 Nov 2026 16:22:28 +0100 Subject: [PATCH 2/5] examples: add OptiView Player specs source to Podfiles --- Code/Comscore-Examples/Cocoapod/Podfile | 3 +++ Code/Conviva-Examples/Cocoapod/Podfile | 1 + Code/Sideloaded-TextTracks-Examples/Cocoapod/Podfile | 3 +++ Code/Uplynk-Examples/Cocoapod/Podfile | 3 +++ 4 files changed, 10 insertions(+) diff --git a/Code/Comscore-Examples/Cocoapod/Podfile b/Code/Comscore-Examples/Cocoapod/Podfile index b5643259..f54b0999 100644 --- a/Code/Comscore-Examples/Cocoapod/Podfile +++ b/Code/Comscore-Examples/Cocoapod/Podfile @@ -1,5 +1,8 @@ platform :ios, '15.0' +source 'https://github.com/THEOplayer/cocoapods-specs.git' +source 'https://cdn.cocoapods.org/' + target 'ComscoreReporter' do # Use the ComscoreConnector that is locally defined in the parent directory pod 'THEOplayer-Connector-Comscore', :path => '../../../' diff --git a/Code/Conviva-Examples/Cocoapod/Podfile b/Code/Conviva-Examples/Cocoapod/Podfile index e6224eca..8b1cf49a 100644 --- a/Code/Conviva-Examples/Cocoapod/Podfile +++ b/Code/Conviva-Examples/Cocoapod/Podfile @@ -1,5 +1,6 @@ platform :ios, '15.0' +source 'https://github.com/THEOplayer/cocoapods-specs.git' source 'https://cdn.cocoapods.org/' target 'ConvivaReporter' do diff --git a/Code/Sideloaded-TextTracks-Examples/Cocoapod/Podfile b/Code/Sideloaded-TextTracks-Examples/Cocoapod/Podfile index 6cf2f97e..2ae5ee58 100644 --- a/Code/Sideloaded-TextTracks-Examples/Cocoapod/Podfile +++ b/Code/Sideloaded-TextTracks-Examples/Cocoapod/Podfile @@ -1,5 +1,8 @@ platform :ios, '15.0' +source 'https://github.com/THEOplayer/cocoapods-specs.git' +source 'https://cdn.cocoapods.org/' + target 'SideloadedTextTracksExample' do # Use the ComscoreConnector that is locally defined in the parent directory pod 'THEOplayer-Connector-SideloadedSubtitle', :path => '../../../' diff --git a/Code/Uplynk-Examples/Cocoapod/Podfile b/Code/Uplynk-Examples/Cocoapod/Podfile index e5346538..ccd39d56 100644 --- a/Code/Uplynk-Examples/Cocoapod/Podfile +++ b/Code/Uplynk-Examples/Cocoapod/Podfile @@ -1,5 +1,8 @@ platform :ios, '15.0' +source 'https://github.com/THEOplayer/cocoapods-specs.git' +source 'https://cdn.cocoapods.org/' + target 'UplynkExample' do # Use the ComscoreConnector that is locally defined in the parent directory pod 'THEOplayer-Connector-Uplynk', :path => '../../../' From 05fb5ed880ca6e4ac11a818217f4e7ee46b7d728 Mon Sep 17 00:00:00 2001 From: Raffi Date: Tue, 3 Nov 2026 16:22:28 +0100 Subject: [PATCH 3/5] docs: add OptiView Player specs source to connector installation guides --- Code/Comscore/README.md | 2 +- Code/Conviva/README.md | 6 +++--- Code/Nielsen/README.md | 2 +- Code/Sideloaded-TextTracks/README.md | 2 +- Code/Uplynk/README.md | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Code/Comscore/README.md b/Code/Comscore/README.md index 6dd9ab61..4e99d12e 100644 --- a/Code/Comscore/README.md +++ b/Code/Comscore/README.md @@ -7,7 +7,7 @@ THEOplayer-Connector-Comscore provides an integration between the THEOplayerSDK ### [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#getting-started) 1. Create a Podfile if you don't already have one. From the root of your project directory, run the following command: `pod init` -2. To your Podfile, add links to the registry of Cocoapods: `source 'https://cdn.cocoapods.org/'`. If this fails, bypass their CDN by using `source 'https://github.com/CocoaPods/Specs.git'` +2. To your Podfile, add the OptiView Player specs source first: `source 'https://github.com/THEOplayer/cocoapods-specs.git'`, followed by the public source for third-party dependencies: `source 'https://cdn.cocoapods.org/'`. 3. To your Podfile, add the connector pods that you want to use in your app: `pod 'THEOplayer-Connector-Comscore'` 4. Install the pods using `pod install` , then open your `.xcworkspace` file to see the project in Xcode. diff --git a/Code/Conviva/README.md b/Code/Conviva/README.md index cffd79d5..77029ef7 100644 --- a/Code/Conviva/README.md +++ b/Code/Conviva/README.md @@ -25,9 +25,10 @@ To support custom feature builds of THEOplayerSDK perform the following steps: ### [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#getting-started) 1. Create a Podfile if you don't already have one. From the root of your project directory, run the following command: `pod init` -2. To your Podfile, add the Conviva connector pods that you want to use in your app: `pod 'THEOplayer-Connector-Conviva'` +2. To your Podfile, add the OptiView Player specs source first: `source 'https://github.com/THEOplayer/cocoapods-specs.git'`, followed by the public source for third-party dependencies: `source 'https://cdn.cocoapods.org/'`. +3. To your Podfile, add the Conviva connector pods that you want to use in your app: `pod 'THEOplayer-Connector-Conviva'` - When using THEOads, also add the THEOads subspec so that failed THEOads ad breaks (e.g. an empty VAST response) are reported to Conviva: `pod 'THEOplayer-Connector-Conviva/THEOads'` -3. Install the pods using `pod install` , then open your `.xcworkspace` file to see the project in Xcode. +4. Install the pods using `pod install` , then open your `.xcworkspace` file to see the project in Xcode. To support custom feature builds of THEOplayerSDK perform the following steps: @@ -80,4 +81,3 @@ connector.setContentInfo(contentInfo) ## Lifecycle Hold a reference to your connector. Once the connector is released from memory it will clean up itself and stop reporting to Conviva. - diff --git a/Code/Nielsen/README.md b/Code/Nielsen/README.md index b383063c..5bdc55cd 100644 --- a/Code/Nielsen/README.md +++ b/Code/Nielsen/README.md @@ -23,7 +23,7 @@ To support custom feature builds of THEOplayerSDK perform the following steps: ### [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#getting-started) 1. Create a Podfile if you don't already have one. From the root of your project directory, run the following command: `pod init` -2. To your Podfile, add links to the registries of Cocoapods and Nielsen: `source 'https://cdn.cocoapods.org/'` and `source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git'` +2. To your Podfile, add the OptiView Player specs source first: `source 'https://github.com/THEOplayer/cocoapods-specs.git'`, followed by the public and Nielsen sources: `source 'https://cdn.cocoapods.org/'` and `source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git'`. 3. To your Podfile, add the connector pods that you want to use in your app: `pod 'THEOplayer-Connector-Nielsen'` 4. Install the pods using `pod install` , then open your `.xcworkspace` file to see the project in Xcode. diff --git a/Code/Sideloaded-TextTracks/README.md b/Code/Sideloaded-TextTracks/README.md index 1f554654..be940b46 100644 --- a/Code/Sideloaded-TextTracks/README.md +++ b/Code/Sideloaded-TextTracks/README.md @@ -13,7 +13,7 @@ This connector is intended to be used for subtitle text tracks specific with the ### [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#getting-started) 1. Create a Podfile if you don't already have one. From the root of your project directory, run the following command: `pod init` -2. To your Podfile, add links to the registry of Cocoapods: `source 'https://cdn.cocoapods.org/'`. If this fails, bypass their CDN by using `source 'https://github.com/CocoaPods/Specs.git'` +2. To your Podfile, add the OptiView Player specs source first: `source 'https://github.com/THEOplayer/cocoapods-specs.git'`, followed by the public source for third-party dependencies: `source 'https://cdn.cocoapods.org/'`. 3. To your Podfile, add the connector pods that you want to use in your app: `pod 'THEOplayer-Connector-SideloadedSubtitle'` 4. Install the pods using `pod install`, then open your `.xcworkspace` file to see the project in Xcode. diff --git a/Code/Uplynk/README.md b/Code/Uplynk/README.md index aeca3431..e4272b03 100644 --- a/Code/Uplynk/README.md +++ b/Code/Uplynk/README.md @@ -27,8 +27,9 @@ To support custom feature builds of THEOplayerSDK perform the following steps: ### [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#getting-started) 1. Create a Podfile if you don't already have one. From the root of your project directory, run the following command: `pod init` -2. To your Podfile, add the Uplynk connector pods that you want to use in your app: `pod 'THEOplayer-Connector-Uplynk'` -3. Install the pods using `pod install` , then open your `.xcworkspace` file to see the project in Xcode. +2. To your Podfile, add the OptiView Player specs source first: `source 'https://github.com/THEOplayer/cocoapods-specs.git'`, followed by the public source for third-party dependencies: `source 'https://cdn.cocoapods.org/'`. +3. To your Podfile, add the Uplynk connector pods that you want to use in your app: `pod 'THEOplayer-Connector-Uplynk'` +4. Install the pods using `pod install` , then open your `.xcworkspace` file to see the project in Xcode. To support custom feature builds of THEOplayerSDK perform the following steps: @@ -44,4 +45,3 @@ Learn more about Uplynk and how to use the connector in the following list of ar - [Preplay](./docs/preplay.md): this article provides information on how to configure a Uplynk source. - [Ads](./docs/ads.md): this article provides information on which APIs can be leveraged to track and enhance the ad-viewing experience. - [Ping](./docs/ping.md): this article provides information on how to leverage the Ping service and which THEOplayer APIs you should use. - From 4f23abab1fd2a1c5c355ae1ff95a493cfa3d17b3 Mon Sep 17 00:00:00 2001 From: Raffi Date: Tue, 3 Nov 2026 16:22:28 +0100 Subject: [PATCH 4/5] docs: document CocoaPods specs repository in main README --- Readme.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index e8b170d0..394e4dba 100644 --- a/Readme.md +++ b/Readme.md @@ -29,9 +29,12 @@ Notes: ### CocoaPods -In your `Podfile` add one or more of the OptiView Player iOS SDK Connectors, for example: +New connector releases are published to the [OptiView Player CocoaPods specs repository](https://github.com/THEOplayer/cocoapods-specs). In your `Podfile`, add this source first and keep the public CocoaPods source for third-party dependencies. Then add one or more of the OptiView Player iOS SDK Connectors, for example: ```ruby +source 'https://github.com/THEOplayer/cocoapods-specs.git' +source 'https://cdn.cocoapods.org/' + pod 'THEOplayer-Connector-Conviva' ``` From 71b9e098d53b4442c69cbf2d88a195af3a23a3cc Mon Sep 17 00:00:00 2001 From: Raffi Date: Tue, 3 Nov 2026 16:24:05 +0100 Subject: [PATCH 5/5] docs: note CocoaPods publishing migration in changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19ced800..da6f42b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed + +- New CocoaPods connector releases are now published exclusively to the [OptiView Player specs repository](https://github.com/THEOplayer/cocoapods-specs). Add `source 'https://github.com/THEOplayer/cocoapods-specs.git'` before `source 'https://cdn.cocoapods.org/'` in your Podfile to receive new releases. Keep the public source for third-party dependencies. + ### Fixed - SideloadedSubtitle