Skip to content

Commit 52978ef

Browse files
authored
chore(repo): SPM support for video sdk (#1104)
* SPM support for video sdk * dogfooding SPM * workflow fix * workflow naming fix * flutterfire added to workflow * bumped webrtc * tweak
1 parent 1056c7e commit 52978ef

File tree

75 files changed

+638
-65
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+638
-65
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: iOS Dogfooding — Pods & SPM
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
build-ios:
11+
name: iOS Build (Dogfooding)
12+
runs-on: macos-latest
13+
14+
steps:
15+
- name: 🧰 Setup Checkout
16+
uses: actions/checkout@v4
17+
18+
- name: 🛠️ Setup Flutter
19+
uses: subosito/flutter-action@v2
20+
with:
21+
channel: "stable"
22+
23+
- name: 🛠️ Setup FlutterFire CLI
24+
run: flutter pub global activate flutterfire_cli
25+
26+
- name: 📦 Deps flutter pub get
27+
run: flutter pub get
28+
29+
- name: 🍫 Pods Prepare (Flutter config + deps)
30+
working-directory: dogfooding
31+
run: |
32+
flutter config --no-enable-swift-package-manager
33+
flutter pub get
34+
35+
- name: 🍫 Pods Install
36+
working-directory: dogfooding/ios
37+
run: |
38+
pod repo update
39+
pod install
40+
41+
- name: 🏗️ Pods Build (no codesign)
42+
working-directory: dogfooding
43+
run: flutter build ios --no-codesign --verbose
44+
45+
- name: 🧹 Clean Pods + caches
46+
working-directory: dogfooding
47+
run: |
48+
rm -rf ios/Pods ios/Podfile.lock
49+
flutter clean
50+
51+
- name: 📦 SPM Enable + Resolve
52+
working-directory: dogfooding
53+
run: |
54+
flutter config --enable-swift-package-manager
55+
flutter pub get
56+
57+
- name: 🧱 SPM Build (no codesign)
58+
working-directory: dogfooding
59+
run: flutter build ios --no-codesign --verbose
60+
61+
- name: ✅ Verify
62+
run: |
63+
echo "✅ Both CocoaPods and SPM builds succeeded."

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,9 @@ env.g.dart
141141
# Non-CI golden files and failures
142142
**/test/**/goldens/**/*.*
143143
**/test/**/failures/**/*.*
144-
!**/test/**/goldens/ci/*.*
144+
!**/test/**/goldens/ci/*.*
145+
146+
# Swift
147+
.build/
148+
.swiftpm/
149+
Package.resolved

dogfooding/android/app/google-services.json

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,78 @@
121121
}
122122
}
123123
},
124+
{
125+
"client_info": {
126+
"mobilesdk_app_id": "1:347024607410:android:5ee56741adabf5568c21ab",
127+
"android_client_info": {
128+
"package_name": "io.getstream.flutter.sample.ringing"
129+
}
130+
},
131+
"oauth_client": [
132+
{
133+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
134+
"client_type": 3
135+
}
136+
],
137+
"api_key": [
138+
{
139+
"current_key": "AIzaSyD4FMyTdDv97hJia6YiV1NMgTdJhbnEwQE"
140+
}
141+
],
142+
"services": {
143+
"appinvite_service": {
144+
"other_platform_oauth_client": [
145+
{
146+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
147+
"client_type": 3
148+
},
149+
{
150+
"client_id": "347024607410-48j4atipav0tcr4pesap4elr1u9t11uh.apps.googleusercontent.com",
151+
"client_type": 2,
152+
"ios_info": {
153+
"bundle_id": "io.getstream.iOS.VideoDemoApp"
154+
}
155+
}
156+
]
157+
}
158+
}
159+
},
160+
{
161+
"client_info": {
162+
"mobilesdk_app_id": "1:347024607410:android:02502d00e58227538c21ab",
163+
"android_client_info": {
164+
"package_name": "io.getstream.reactnative.ringingtutorial"
165+
}
166+
},
167+
"oauth_client": [
168+
{
169+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
170+
"client_type": 3
171+
}
172+
],
173+
"api_key": [
174+
{
175+
"current_key": "AIzaSyD4FMyTdDv97hJia6YiV1NMgTdJhbnEwQE"
176+
}
177+
],
178+
"services": {
179+
"appinvite_service": {
180+
"other_platform_oauth_client": [
181+
{
182+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
183+
"client_type": 3
184+
},
185+
{
186+
"client_id": "347024607410-48j4atipav0tcr4pesap4elr1u9t11uh.apps.googleusercontent.com",
187+
"client_type": 2,
188+
"ios_info": {
189+
"bundle_id": "io.getstream.iOS.VideoDemoApp"
190+
}
191+
}
192+
]
193+
}
194+
}
195+
},
124196
{
125197
"client_info": {
126198
"mobilesdk_app_id": "1:347024607410:android:df319f46f747d6e28c21ab",
@@ -381,6 +453,78 @@
381453
}
382454
}
383455
},
456+
{
457+
"client_info": {
458+
"mobilesdk_app_id": "1:347024607410:android:9562ac0b774fada48c21ab",
459+
"android_client_info": {
460+
"package_name": "io.getstream.video.android.e2etesting"
461+
}
462+
},
463+
"oauth_client": [
464+
{
465+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
466+
"client_type": 3
467+
}
468+
],
469+
"api_key": [
470+
{
471+
"current_key": "AIzaSyD4FMyTdDv97hJia6YiV1NMgTdJhbnEwQE"
472+
}
473+
],
474+
"services": {
475+
"appinvite_service": {
476+
"other_platform_oauth_client": [
477+
{
478+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
479+
"client_type": 3
480+
},
481+
{
482+
"client_id": "347024607410-48j4atipav0tcr4pesap4elr1u9t11uh.apps.googleusercontent.com",
483+
"client_type": 2,
484+
"ios_info": {
485+
"bundle_id": "io.getstream.iOS.VideoDemoApp"
486+
}
487+
}
488+
]
489+
}
490+
}
491+
},
492+
{
493+
"client_info": {
494+
"mobilesdk_app_id": "1:347024607410:android:dec99dfec7271a078c21ab",
495+
"android_client_info": {
496+
"package_name": "io.getstream.video.android.e2etesting.debug"
497+
}
498+
},
499+
"oauth_client": [
500+
{
501+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
502+
"client_type": 3
503+
}
504+
],
505+
"api_key": [
506+
{
507+
"current_key": "AIzaSyD4FMyTdDv97hJia6YiV1NMgTdJhbnEwQE"
508+
}
509+
],
510+
"services": {
511+
"appinvite_service": {
512+
"other_platform_oauth_client": [
513+
{
514+
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
515+
"client_type": 3
516+
},
517+
{
518+
"client_id": "347024607410-48j4atipav0tcr4pesap4elr1u9t11uh.apps.googleusercontent.com",
519+
"client_type": 2,
520+
"ios_info": {
521+
"bundle_id": "io.getstream.iOS.VideoDemoApp"
522+
}
523+
}
524+
]
525+
}
526+
}
527+
},
384528
{
385529
"client_info": {
386530
"mobilesdk_app_id": "1:347024607410:android:d51590d07b9f9f3c8c21ab",
@@ -397,6 +541,14 @@
397541
"certificate_hash": "0cebe7750cde7c0cb6817a31aee92e35e13d59c4"
398542
}
399543
},
544+
{
545+
"client_id": "347024607410-jk1jumi1p6mmmna57n02eht693eo2r0o.apps.googleusercontent.com",
546+
"client_type": 1,
547+
"android_info": {
548+
"package_name": "io.getstream.video.flutter.dogfooding",
549+
"certificate_hash": "f8f432e21c1e150a4d10042006b8054574023e35"
550+
}
551+
},
400552
{
401553
"client_id": "347024607410-ett7cjt6ah9aj6s6k20p5fissj80d9la.apps.googleusercontent.com",
402554
"client_type": 3

dogfooding/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
609970142AE95D8E00EAC270 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 609970132AE95D8E00EAC270 /* SampleHandler.swift */; };
1717
609970182AE95D8E00EAC270 /* ScreenSharing.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 6099700F2AE95D8E00EAC270 /* ScreenSharing.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
1818
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
19+
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
1920
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
2021
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
2122
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@@ -79,6 +80,7 @@
7980
609970382AEBE9F500EAC270 /* stream_video_screen_sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = stream_video_screen_sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8081
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
8182
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
83+
78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = "<group>"; };
8284
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
8385
7C972E9BBE104B39F80780CC /* Pods-ScreenSharing.debug-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ScreenSharing.debug-prod.xcconfig"; path = "Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing.debug-prod.xcconfig"; sourceTree = "<group>"; };
8486
80263EDEFD9D05B834F50227 /* Pods-ScreenSharing.release-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ScreenSharing.release-prod.xcconfig"; path = "Target Support Files/Pods-ScreenSharing/Pods-ScreenSharing.release-prod.xcconfig"; sourceTree = "<group>"; };
@@ -119,6 +121,7 @@
119121
isa = PBXFrameworksBuildPhase;
120122
buildActionMask = 2147483647;
121123
files = (
124+
78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */,
122125
108470CE89593F29818B31EC /* Pods_Runner.framework in Frameworks */,
123126
);
124127
runOnlyForDeploymentPostprocessing = 0;
@@ -139,6 +142,7 @@
139142
9740EEB11CF90186004384FC /* Flutter */ = {
140143
isa = PBXGroup;
141144
children = (
145+
78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */,
142146
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
143147
9740EEB21CF90195004384FC /* Debug.xcconfig */,
144148
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
@@ -261,7 +265,6 @@
261265
6099701D2AE95D8E00EAC270 /* Embed Foundation Extensions */,
262266
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
263267
B0C7CCC1D4BA2BE364A3B947 /* [CP] Embed Pods Frameworks */,
264-
69989F34A906B303CD4315A9 /* [firebase_crashlytics] Crashlytics Upload Symbols */,
265268
F3D53FC8035587DC253BE5F4 /* [CP] Copy Pods Resources */,
266269
1F1E64B33B1059FB96103230 /* FlutterFire: "flutterfire upload-crashlytics-symbols" */,
267270
);
@@ -271,6 +274,9 @@
271274
609970172AE95D8E00EAC270 /* PBXTargetDependency */,
272275
);
273276
name = Runner;
277+
packageProductDependencies = (
278+
78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */,
279+
);
274280
productName = Runner;
275281
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
276282
productType = "com.apple.product-type.application";
@@ -303,6 +309,9 @@
303309
Base,
304310
);
305311
mainGroup = 97C146E51CF9000F007C117D;
312+
packageReferences = (
313+
781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */,
314+
);
306315
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
307316
projectDirPath = "";
308317
projectRoot = "";
@@ -352,7 +361,7 @@
352361
);
353362
runOnlyForDeploymentPostprocessing = 0;
354363
shellPath = /bin/sh;
355-
shellScript = "\n#!/bin/bash\nPATH=${PATH}:$FLUTTER_ROOT/bin:$HOME/.pub-cache/bin\nflutterfire upload-crashlytics-symbols --upload-symbols-script-path=$PODS_ROOT/FirebaseCrashlytics/upload-symbols --platform=ios --apple-project-path=${SRCROOT} --env-platform-name=${PLATFORM_NAME} --env-configuration=${CONFIGURATION} --env-project-dir=${PROJECT_DIR} --env-built-products-dir=${BUILT_PRODUCTS_DIR} --env-dwarf-dsym-folder-path=${DWARF_DSYM_FOLDER_PATH} --env-dwarf-dsym-file-name=${DWARF_DSYM_FILE_NAME} --env-infoplist-path=${INFOPLIST_PATH} --default-config=default\n";
364+
shellScript = "\n#!/bin/bash\nPATH=\"${PATH}:$FLUTTER_ROOT/bin:${PUB_CACHE}/bin:$HOME/.pub-cache/bin\"\n\nif [ -z \"$PODS_ROOT\" ] || [ ! -d \"$PODS_ROOT/FirebaseCrashlytics\" ]; then\n # Cannot use \"BUILD_DIR%/Build/*\" as per Firebase documentation, it points to \"flutter-project/build/ios/*\" path which doesn't have run script\n DERIVED_DATA_PATH=$(echo \"$BUILD_ROOT\" | sed -E 's|(.*DerivedData/[^/]+).*|\\1|')\n PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"${DERIVED_DATA_PATH}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\nelse\n PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT=\"$PODS_ROOT/FirebaseCrashlytics/run\"\nfi\n\n# Command to upload symbols script used to upload symbols to Firebase server\nflutterfire upload-crashlytics-symbols --upload-symbols-script-path=\"$PATH_TO_CRASHLYTICS_UPLOAD_SCRIPT\" --platform=ios --apple-project-path=\"${SRCROOT}\" --env-platform-name=\"${PLATFORM_NAME}\" --env-configuration=\"${CONFIGURATION}\" --env-project-dir=\"${PROJECT_DIR}\" --env-built-products-dir=\"${BUILT_PRODUCTS_DIR}\" --env-dwarf-dsym-folder-path=\"${DWARF_DSYM_FOLDER_PATH}\" --env-dwarf-dsym-file-name=\"${DWARF_DSYM_FILE_NAME}\" --env-infoplist-path=\"${INFOPLIST_PATH}\" --default-config=default\n";
356365
};
357366
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
358367
isa = PBXShellScriptBuildPhase;
@@ -370,29 +379,6 @@
370379
shellPath = /bin/sh;
371380
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
372381
};
373-
69989F34A906B303CD4315A9 /* [firebase_crashlytics] Crashlytics Upload Symbols */ = {
374-
isa = PBXShellScriptBuildPhase;
375-
buildActionMask = 2147483647;
376-
files = (
377-
);
378-
inputFileListPaths = (
379-
);
380-
inputPaths = (
381-
"\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}\"",
382-
"\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/\"",
383-
"\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"",
384-
"\"$(BUILT_PRODUCTS_DIR)/$(EXECUTABLE_PATH)\"",
385-
"\"$(PROJECT_DIR)/firebase_app_id_file.json\"",
386-
);
387-
name = "[firebase_crashlytics] Crashlytics Upload Symbols";
388-
outputFileListPaths = (
389-
);
390-
outputPaths = (
391-
);
392-
runOnlyForDeploymentPostprocessing = 0;
393-
shellPath = /bin/sh;
394-
shellScript = "\"$PODS_ROOT/FirebaseCrashlytics/upload-symbols\" --flutter-project \"$PROJECT_DIR/firebase_app_id_file.json\" ";
395-
};
396382
7E2273AC94F90D3FFB9A2399 /* [CP] Check Pods Manifest.lock */ = {
397383
isa = PBXShellScriptBuildPhase;
398384
buildActionMask = 2147483647;
@@ -428,7 +414,7 @@
428414
);
429415
runOnlyForDeploymentPostprocessing = 0;
430416
shellPath = /bin/sh;
431-
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
417+
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
432418
};
433419
B0C7CCC1D4BA2BE364A3B947 /* [CP] Embed Pods Frameworks */ = {
434420
isa = PBXShellScriptBuildPhase;
@@ -2105,6 +2091,20 @@
21052091
defaultConfigurationName = Release;
21062092
};
21072093
/* End XCConfigurationList section */
2094+
2095+
/* Begin XCLocalSwiftPackageReference section */
2096+
781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = {
2097+
isa = XCLocalSwiftPackageReference;
2098+
relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
2099+
};
2100+
/* End XCLocalSwiftPackageReference section */
2101+
2102+
/* Begin XCSwiftPackageProductDependency section */
2103+
78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = {
2104+
isa = XCSwiftPackageProductDependency;
2105+
productName = FlutterGeneratedPluginSwiftPackage;
2106+
};
2107+
/* End XCSwiftPackageProductDependency section */
21082108
};
21092109
rootObject = 97C146E61CF9000F007C117D /* Project object */;
21102110
}

0 commit comments

Comments
 (0)