unified-video-framework 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/.github/workflows/ci.yml +253 -0
  2. package/ANDROID_TV_IMPLEMENTATION.md +313 -0
  3. package/COMPLETION_STATUS.md +165 -0
  4. package/CONTRIBUTING.md +376 -0
  5. package/FINAL_STATUS_REPORT.md +170 -0
  6. package/FRAMEWORK_REVIEW.md +247 -0
  7. package/IMPROVEMENTS_SUMMARY.md +168 -0
  8. package/LICENSE +21 -0
  9. package/NATIVE_APP_INTEGRATION_GUIDE.md +903 -0
  10. package/PAYWALL_RENTAL_FLOW.md +499 -0
  11. package/PLATFORM_SETUP_GUIDE.md +1636 -0
  12. package/README.md +315 -0
  13. package/RUN_LOCALLY.md +151 -0
  14. package/apps/demo/cast-sender-min.html +173 -0
  15. package/apps/demo/custom-player.html +883 -0
  16. package/apps/demo/demo.html +990 -0
  17. package/apps/demo/enhanced-player.html +3556 -0
  18. package/apps/demo/index.html +159 -0
  19. package/apps/rental-api/.env.example +24 -0
  20. package/apps/rental-api/README.md +23 -0
  21. package/apps/rental-api/migrations/001_init.sql +35 -0
  22. package/apps/rental-api/migrations/002_videos.sql +10 -0
  23. package/apps/rental-api/migrations/003_add_gateway_subref.sql +4 -0
  24. package/apps/rental-api/migrations/004_update_gateways.sql +4 -0
  25. package/apps/rental-api/migrations/005_seed_demo_video.sql +5 -0
  26. package/apps/rental-api/package-lock.json +2045 -0
  27. package/apps/rental-api/package.json +33 -0
  28. package/apps/rental-api/scripts/run-migration.js +42 -0
  29. package/apps/rental-api/scripts/update-video-currency.js +21 -0
  30. package/apps/rental-api/scripts/update-video-price.js +19 -0
  31. package/apps/rental-api/src/config.ts +14 -0
  32. package/apps/rental-api/src/db.ts +10 -0
  33. package/apps/rental-api/src/routes/cashfree.ts +167 -0
  34. package/apps/rental-api/src/routes/pesapal.ts +92 -0
  35. package/apps/rental-api/src/routes/rentals.ts +242 -0
  36. package/apps/rental-api/src/routes/webhooks.ts +73 -0
  37. package/apps/rental-api/src/server.ts +41 -0
  38. package/apps/rental-api/src/services/entitlements.ts +45 -0
  39. package/apps/rental-api/src/services/payments.ts +22 -0
  40. package/apps/rental-api/tsconfig.json +17 -0
  41. package/check-urls.ps1 +74 -0
  42. package/comparison-report.md +181 -0
  43. package/docs/PAYWALL.md +95 -0
  44. package/docs/PLAYER_UI_VISIBILITY.md +431 -0
  45. package/docs/README.md +7 -0
  46. package/docs/SYSTEM_ARCHITECTURE.md +612 -0
  47. package/docs/VDOCIPHER_CLONE_REQUIREMENTS.md +403 -0
  48. package/examples/android/JavaSampleApp/MainActivity.java +641 -0
  49. package/examples/android/JavaSampleApp/activity_main.xml +226 -0
  50. package/examples/android/SampleApp/MainActivity.kt +430 -0
  51. package/examples/ios/SampleApp/ViewController.swift +337 -0
  52. package/examples/ios/SwiftUISampleApp/ContentView.swift +304 -0
  53. package/iOS_IMPLEMENTATION_OPTIONS.md +470 -0
  54. package/ios/UnifiedVideoPlayer/UnifiedVideoPlayer.podspec +33 -0
  55. package/jest.config.js +33 -0
  56. package/jitpack.yml +5 -0
  57. package/lerna.json +35 -0
  58. package/package.json +69 -0
  59. package/packages/PLATFORM_STATUS.md +163 -0
  60. package/packages/android/build.gradle +135 -0
  61. package/packages/android/src/main/AndroidManifest.xml +36 -0
  62. package/packages/android/src/main/java/com/unifiedvideo/player/PlayerConfiguration.java +221 -0
  63. package/packages/android/src/main/java/com/unifiedvideo/player/UnifiedVideoPlayer.java +1037 -0
  64. package/packages/android/src/main/java/com/unifiedvideo/player/UnifiedVideoPlayer.kt +707 -0
  65. package/packages/android/src/main/java/com/unifiedvideo/player/analytics/AnalyticsProvider.java +9 -0
  66. package/packages/android/src/main/java/com/unifiedvideo/player/cast/CastManager.java +141 -0
  67. package/packages/android/src/main/java/com/unifiedvideo/player/cast/CastOptionsProvider.java +29 -0
  68. package/packages/android/src/main/java/com/unifiedvideo/player/overlay/WatermarkOverlayView.java +88 -0
  69. package/packages/android/src/main/java/com/unifiedvideo/player/pip/PipActionReceiver.java +33 -0
  70. package/packages/android/src/main/java/com/unifiedvideo/player/services/PlaybackService.java +110 -0
  71. package/packages/android/src/main/java/com/unifiedvideo/player/services/PlayerHolder.java +19 -0
  72. package/packages/core/package.json +34 -0
  73. package/packages/core/src/BasePlayer.ts +250 -0
  74. package/packages/core/src/VideoPlayer.ts +237 -0
  75. package/packages/core/src/VideoPlayerFactory.ts +145 -0
  76. package/packages/core/src/index.ts +20 -0
  77. package/packages/core/src/interfaces/IVideoPlayer.ts +184 -0
  78. package/packages/core/src/interfaces.ts +240 -0
  79. package/packages/core/src/utils/EventEmitter.ts +66 -0
  80. package/packages/core/src/utils/PlatformDetector.ts +300 -0
  81. package/packages/core/tsconfig.json +20 -0
  82. package/packages/enact/package.json +51 -0
  83. package/packages/enact/src/VideoPlayer.js +365 -0
  84. package/packages/enact/src/adapters/TizenAdapter.js +354 -0
  85. package/packages/enact/src/index.js +82 -0
  86. package/packages/ios/BUILD_INSTRUCTIONS.md +108 -0
  87. package/packages/ios/FIX_EMBED_ISSUE.md +142 -0
  88. package/packages/ios/GETTING_STARTED.md +100 -0
  89. package/packages/ios/Package.swift +35 -0
  90. package/packages/ios/README.md +84 -0
  91. package/packages/ios/Sources/UnifiedVideoPlayer/Analytics/AnalyticsEmitter.swift +26 -0
  92. package/packages/ios/Sources/UnifiedVideoPlayer/DRM/FairPlayDRMManager.swift +102 -0
  93. package/packages/ios/Sources/UnifiedVideoPlayer/Info.plist +24 -0
  94. package/packages/ios/Sources/UnifiedVideoPlayer/Remote/RemoteCommandCenter.swift +109 -0
  95. package/packages/ios/Sources/UnifiedVideoPlayer/UnifiedVideoPlayer.swift +811 -0
  96. package/packages/ios/Sources/UnifiedVideoPlayer/UnifiedVideoPlayerView.swift +640 -0
  97. package/packages/ios/Sources/UnifiedVideoPlayer/Utilities/Color+Hex.swift +36 -0
  98. package/packages/ios/UnifiedVideoPlayer.podspec +27 -0
  99. package/packages/ios/UnifiedVideoPlayer.xcodeproj/project.pbxproj +385 -0
  100. package/packages/ios/build_framework.sh +55 -0
  101. package/packages/react-native/android/src/main/java/com/unifiedvideo/UnifiedVideoPlayerModule.kt +482 -0
  102. package/packages/react-native/ios/UnifiedVideoPlayer.swift +436 -0
  103. package/packages/react-native/package.json +51 -0
  104. package/packages/react-native/src/ReactNativePlayer.tsx +423 -0
  105. package/packages/react-native/src/VideoPlayer.tsx +224 -0
  106. package/packages/react-native/src/index.ts +28 -0
  107. package/packages/react-native/src/utils/EventEmitter.ts +66 -0
  108. package/packages/react-native/tsconfig.json +31 -0
  109. package/packages/roku/components/UnifiedVideoPlayer.brs +400 -0
  110. package/packages/roku/package.json +44 -0
  111. package/packages/roku/source/VideoPlayer.brs +231 -0
  112. package/packages/roku/source/main.brs +28 -0
  113. package/packages/web/GETTING_STARTED.md +292 -0
  114. package/packages/web/jest.config.js +28 -0
  115. package/packages/web/jest.setup.ts +110 -0
  116. package/packages/web/package.json +50 -0
  117. package/packages/web/src/SecureVideoPlayer.ts +1164 -0
  118. package/packages/web/src/WebPlayer.ts +3110 -0
  119. package/packages/web/src/__tests__/WebPlayer.test.ts +314 -0
  120. package/packages/web/src/index.ts +14 -0
  121. package/packages/web/src/paywall/PaywallController.ts +215 -0
  122. package/packages/web/src/react/WebPlayerView.tsx +177 -0
  123. package/packages/web/tsconfig.json +23 -0
  124. package/packages/web/webpack.config.js +45 -0
  125. package/server.js +131 -0
  126. package/server.py +84 -0
  127. package/test-urls.ps1 +97 -0
  128. package/test-video-urls.ps1 +87 -0
  129. package/tsconfig.json +39 -0
@@ -0,0 +1,385 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 56;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ 8A1234561234567890ABCDEF /* UnifiedVideoPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A1234551234567890ABCDEF /* UnifiedVideoPlayer.swift */; };
11
+ 8A1234581234567890ABCDEF /* UnifiedVideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A1234571234567890ABCDEF /* UnifiedVideoPlayerView.swift */; };
12
+ /* End PBXBuildFile section */
13
+
14
+ /* Begin PBXFileReference section */
15
+ 8A1234501234567890ABCDEF /* UnifiedVideoPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UnifiedVideoPlayer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
16
+ 8A1234551234567890ABCDEF /* UnifiedVideoPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnifiedVideoPlayer.swift; sourceTree = "<group>"; };
17
+ 8A1234571234567890ABCDEF /* UnifiedVideoPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnifiedVideoPlayerView.swift; sourceTree = "<group>"; };
18
+ 8A1234591234567890ABCDEF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
19
+ /* End PBXFileReference section */
20
+
21
+ /* Begin PBXFrameworksBuildPhase section */
22
+ 8A12344D1234567890ABCDEF /* Frameworks */ = {
23
+ isa = PBXFrameworksBuildPhase;
24
+ buildActionMask = 2147483647;
25
+ files = (
26
+ );
27
+ runOnlyForDeploymentPostprocessing = 0;
28
+ };
29
+ /* End PBXFrameworksBuildPhase section */
30
+
31
+ /* Begin PBXGroup section */
32
+ 8A1234461234567890ABCDEF = {
33
+ isa = PBXGroup;
34
+ children = (
35
+ 8A1234521234567890ABCDEF /* Sources */,
36
+ 8A1234511234567890ABCDEF /* Products */,
37
+ );
38
+ sourceTree = "<group>";
39
+ };
40
+ 8A1234511234567890ABCDEF /* Products */ = {
41
+ isa = PBXGroup;
42
+ children = (
43
+ 8A1234501234567890ABCDEF /* UnifiedVideoPlayer.framework */,
44
+ );
45
+ name = Products;
46
+ sourceTree = "<group>";
47
+ };
48
+ 8A1234521234567890ABCDEF /* Sources */ = {
49
+ isa = PBXGroup;
50
+ children = (
51
+ 8A1234531234567890ABCDEF /* UnifiedVideoPlayer */,
52
+ );
53
+ path = Sources;
54
+ sourceTree = "<group>";
55
+ };
56
+ 8A1234531234567890ABCDEF /* UnifiedVideoPlayer */ = {
57
+ isa = PBXGroup;
58
+ children = (
59
+ 8A1234551234567890ABCDEF /* UnifiedVideoPlayer.swift */,
60
+ 8A1234571234567890ABCDEF /* UnifiedVideoPlayerView.swift */,
61
+ 8A1234591234567890ABCDEF /* Info.plist */,
62
+ );
63
+ path = UnifiedVideoPlayer;
64
+ sourceTree = "<group>";
65
+ };
66
+ /* End PBXGroup section */
67
+
68
+ /* Begin PBXHeadersBuildPhase section */
69
+ 8A12344B1234567890ABCDEF /* Headers */ = {
70
+ isa = PBXHeadersBuildPhase;
71
+ buildActionMask = 2147483647;
72
+ files = (
73
+ );
74
+ runOnlyForDeploymentPostprocessing = 0;
75
+ };
76
+ /* End PBXHeadersBuildPhase section */
77
+
78
+ /* Begin PBXNativeTarget section */
79
+ 8A12344F1234567890ABCDEF /* UnifiedVideoPlayer */ = {
80
+ isa = PBXNativeTarget;
81
+ buildConfigurationList = 8A12345D1234567890ABCDEF /* Build configuration list for PBXNativeTarget "UnifiedVideoPlayer" */;
82
+ buildPhases = (
83
+ 8A12344B1234567890ABCDEF /* Headers */,
84
+ 8A12344C1234567890ABCDEF /* Sources */,
85
+ 8A12344D1234567890ABCDEF /* Frameworks */,
86
+ 8A12344E1234567890ABCDEF /* Resources */,
87
+ );
88
+ buildRules = (
89
+ );
90
+ dependencies = (
91
+ );
92
+ name = UnifiedVideoPlayer;
93
+ productName = UnifiedVideoPlayer;
94
+ productReference = 8A1234501234567890ABCDEF /* UnifiedVideoPlayer.framework */;
95
+ productType = "com.apple.product-type.framework";
96
+ };
97
+ /* End PBXNativeTarget section */
98
+
99
+ /* Begin PBXProject section */
100
+ 8A1234471234567890ABCDEF /* Project object */ = {
101
+ isa = PBXProject;
102
+ attributes = {
103
+ BuildIndependentTargetsInParallel = 1;
104
+ LastUpgradeCheck = 1500;
105
+ TargetAttributes = {
106
+ 8A12344F1234567890ABCDEF = {
107
+ CreatedOnToolsVersion = 15.0;
108
+ LastSwiftMigration = 1500;
109
+ };
110
+ };
111
+ };
112
+ buildConfigurationList = 8A12344A1234567890ABCDEF /* Build configuration list for PBXProject "UnifiedVideoPlayer" */;
113
+ compatibilityVersion = "Xcode 14.0";
114
+ developmentRegion = en;
115
+ hasScannedForEncodings = 0;
116
+ knownRegions = (
117
+ en,
118
+ Base,
119
+ );
120
+ mainGroup = 8A1234461234567890ABCDEF;
121
+ productRefGroup = 8A1234511234567890ABCDEF /* Products */;
122
+ projectDirPath = "";
123
+ projectRoot = "";
124
+ targets = (
125
+ 8A12344F1234567890ABCDEF /* UnifiedVideoPlayer */,
126
+ );
127
+ };
128
+ /* End PBXProject section */
129
+
130
+ /* Begin PBXResourcesBuildPhase section */
131
+ 8A12344E1234567890ABCDEF /* Resources */ = {
132
+ isa = PBXResourcesBuildPhase;
133
+ buildActionMask = 2147483647;
134
+ files = (
135
+ );
136
+ runOnlyForDeploymentPostprocessing = 0;
137
+ };
138
+ /* End PBXResourcesBuildPhase section */
139
+
140
+ /* Begin PBXSourcesBuildPhase section */
141
+ 8A12344C1234567890ABCDEF /* Sources */ = {
142
+ isa = PBXSourcesBuildPhase;
143
+ buildActionMask = 2147483647;
144
+ files = (
145
+ 8A1234561234567890ABCDEF /* UnifiedVideoPlayer.swift in Sources */,
146
+ 8A1234581234567890ABCDEF /* UnifiedVideoPlayerView.swift in Sources */,
147
+ );
148
+ runOnlyForDeploymentPostprocessing = 0;
149
+ };
150
+ /* End PBXSourcesBuildPhase section */
151
+
152
+ /* Begin XCBuildConfiguration section */
153
+ 8A12345B1234567890ABCDEF /* Debug */ = {
154
+ isa = XCBuildConfiguration;
155
+ buildSettings = {
156
+ ALWAYS_SEARCH_USER_PATHS = NO;
157
+ ARCHS = "$(ARCHS_STANDARD)";
158
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
159
+ CLANG_ANALYZER_NONNULL = YES;
160
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
161
+ CLANG_ENABLE_MODULES = YES;
162
+ CLANG_ENABLE_OBJC_ARC = YES;
163
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
164
+ CLANG_WARN_BOOL_CONVERSION = YES;
165
+ CLANG_WARN_COMMA = YES;
166
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
167
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
168
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
169
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
170
+ CLANG_WARN_EMPTY_BODY = YES;
171
+ CLANG_WARN_ENUM_CONVERSION = YES;
172
+ CLANG_WARN_INFINITE_RECURSION = YES;
173
+ CLANG_WARN_INT_CONVERSION = YES;
174
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
175
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
176
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
177
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
178
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
179
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
180
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
181
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
182
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
183
+ CLANG_WARN_UNREACHABLE_CODE = YES;
184
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
185
+ COPY_PHASE_STRIP = NO;
186
+ CURRENT_PROJECT_VERSION = 1;
187
+ DEBUG_INFORMATION_FORMAT = dwarf;
188
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
189
+ ENABLE_TESTABILITY = YES;
190
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
191
+ GCC_C_LANGUAGE_STANDARD = gnu11;
192
+ GCC_DYNAMIC_NO_PIC = NO;
193
+ GCC_NO_COMMON_BLOCKS = YES;
194
+ GCC_OPTIMIZATION_LEVEL = 0;
195
+ GCC_PREPROCESSOR_DEFINITIONS = (
196
+ "DEBUG=1",
197
+ "$(inherited)",
198
+ );
199
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
200
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
201
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
202
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
203
+ GCC_WARN_UNUSED_FUNCTION = YES;
204
+ GCC_WARN_UNUSED_VARIABLE = YES;
205
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
206
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
207
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
208
+ MTL_FAST_MATH = YES;
209
+ ONLY_ACTIVE_ARCH = YES;
210
+ SDKROOT = iphoneos;
211
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator xros xrsimulator";
212
+ SUPPORTS_MACCATALYST = YES;
213
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
214
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
215
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
216
+ VERSIONING_SYSTEM = "apple-generic";
217
+ VERSION_INFO_PREFIX = "";
218
+ };
219
+ name = Debug;
220
+ };
221
+ 8A12345C1234567890ABCDEF /* Release */ = {
222
+ isa = XCBuildConfiguration;
223
+ buildSettings = {
224
+ ALWAYS_SEARCH_USER_PATHS = NO;
225
+ ARCHS = "$(ARCHS_STANDARD)";
226
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
227
+ CLANG_ANALYZER_NONNULL = YES;
228
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
229
+ CLANG_ENABLE_MODULES = YES;
230
+ CLANG_ENABLE_OBJC_ARC = YES;
231
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
232
+ CLANG_WARN_BOOL_CONVERSION = YES;
233
+ CLANG_WARN_COMMA = YES;
234
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
235
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
236
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
237
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
238
+ CLANG_WARN_EMPTY_BODY = YES;
239
+ CLANG_WARN_ENUM_CONVERSION = YES;
240
+ CLANG_WARN_INFINITE_RECURSION = YES;
241
+ CLANG_WARN_INT_CONVERSION = YES;
242
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
243
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
244
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
245
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
246
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
247
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
248
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
249
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
250
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
251
+ CLANG_WARN_UNREACHABLE_CODE = YES;
252
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
253
+ COPY_PHASE_STRIP = NO;
254
+ CURRENT_PROJECT_VERSION = 1;
255
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
256
+ ENABLE_NS_ASSERTIONS = NO;
257
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
258
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
259
+ GCC_C_LANGUAGE_STANDARD = gnu11;
260
+ GCC_NO_COMMON_BLOCKS = YES;
261
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
262
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
263
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
264
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
265
+ GCC_WARN_UNUSED_FUNCTION = YES;
266
+ GCC_WARN_UNUSED_VARIABLE = YES;
267
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
268
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
269
+ MTL_ENABLE_DEBUG_INFO = NO;
270
+ MTL_FAST_MATH = YES;
271
+ SDKROOT = iphoneos;
272
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator xros xrsimulator";
273
+ SUPPORTS_MACCATALYST = YES;
274
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
275
+ SWIFT_COMPILATION_MODE = wholemodule;
276
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
277
+ VALIDATE_PRODUCT = YES;
278
+ VERSIONING_SYSTEM = "apple-generic";
279
+ VERSION_INFO_PREFIX = "";
280
+ };
281
+ name = Release;
282
+ };
283
+ 8A12345E1234567890ABCDEF /* Debug */ = {
284
+ isa = XCBuildConfiguration;
285
+ buildSettings = {
286
+ ARCHS = "$(ARCHS_STANDARD)";
287
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
288
+ CODE_SIGN_STYLE = Automatic;
289
+ CURRENT_PROJECT_VERSION = 1;
290
+ DEFINES_MODULE = YES;
291
+ DYLIB_COMPATIBILITY_VERSION = 1;
292
+ DYLIB_CURRENT_VERSION = 1;
293
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
294
+ ENABLE_MODULE_VERIFIER = YES;
295
+ EXCLUDED_ARCHS = "";
296
+ GENERATE_INFOPLIST_FILE = YES;
297
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
298
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
299
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
300
+ LD_RUNPATH_SEARCH_PATHS = (
301
+ "$(inherited)",
302
+ "@executable_path/Frameworks",
303
+ "@loader_path/Frameworks",
304
+ );
305
+ MARKETING_VERSION = 1.0;
306
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
307
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20";
308
+ ONLY_ACTIVE_ARCH = NO;
309
+ PRODUCT_BUNDLE_IDENTIFIER = com.unified.UnifiedVideoPlayer;
310
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
311
+ SKIP_INSTALL = YES;
312
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
313
+ SUPPORTS_MACCATALYST = YES;
314
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
315
+ SWIFT_EMIT_LOC_STRINGS = YES;
316
+ SWIFT_VERSION = 5.0;
317
+ TARGETED_DEVICE_FAMILY = "1,2";
318
+ VALID_ARCHS = "arm64 arm64e x86_64";
319
+ };
320
+ name = Debug;
321
+ };
322
+ 8A12345F1234567890ABCDEF /* Release */ = {
323
+ isa = XCBuildConfiguration;
324
+ buildSettings = {
325
+ ARCHS = "$(ARCHS_STANDARD)";
326
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
327
+ CODE_SIGN_STYLE = Automatic;
328
+ CURRENT_PROJECT_VERSION = 1;
329
+ DEFINES_MODULE = YES;
330
+ DYLIB_COMPATIBILITY_VERSION = 1;
331
+ DYLIB_CURRENT_VERSION = 1;
332
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
333
+ ENABLE_MODULE_VERIFIER = YES;
334
+ EXCLUDED_ARCHS = "";
335
+ GENERATE_INFOPLIST_FILE = YES;
336
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
337
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
338
+ IPHONEOS_DEPLOYMENT_TARGET = 13.0;
339
+ LD_RUNPATH_SEARCH_PATHS = (
340
+ "$(inherited)",
341
+ "@executable_path/Frameworks",
342
+ "@loader_path/Frameworks",
343
+ );
344
+ MARKETING_VERSION = 1.0;
345
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
346
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++20";
347
+ ONLY_ACTIVE_ARCH = NO;
348
+ PRODUCT_BUNDLE_IDENTIFIER = com.unified.UnifiedVideoPlayer;
349
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
350
+ SKIP_INSTALL = YES;
351
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
352
+ SUPPORTS_MACCATALYST = YES;
353
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
354
+ SWIFT_EMIT_LOC_STRINGS = YES;
355
+ SWIFT_VERSION = 5.0;
356
+ TARGETED_DEVICE_FAMILY = "1,2";
357
+ VALID_ARCHS = "arm64 arm64e x86_64";
358
+ };
359
+ name = Release;
360
+ };
361
+ /* End XCBuildConfiguration section */
362
+
363
+ /* Begin XCConfigurationList section */
364
+ 8A12344A1234567890ABCDEF /* Build configuration list for PBXProject "UnifiedVideoPlayer" */ = {
365
+ isa = XCConfigurationList;
366
+ buildConfigurations = (
367
+ 8A12345B1234567890ABCDEF /* Debug */,
368
+ 8A12345C1234567890ABCDEF /* Release */,
369
+ );
370
+ defaultConfigurationIsVisible = 0;
371
+ defaultConfigurationName = Release;
372
+ };
373
+ 8A12345D1234567890ABCDEF /* Build configuration list for PBXNativeTarget "UnifiedVideoPlayer" */ = {
374
+ isa = XCConfigurationList;
375
+ buildConfigurations = (
376
+ 8A12345E1234567890ABCDEF /* Debug */,
377
+ 8A12345F1234567890ABCDEF /* Release */,
378
+ );
379
+ defaultConfigurationIsVisible = 0;
380
+ defaultConfigurationName = Release;
381
+ };
382
+ /* End XCConfigurationList section */
383
+ };
384
+ rootObject = 8A1234471234567890ABCDEF /* Project object */;
385
+ }
@@ -0,0 +1,55 @@
1
+ #!/bin/bash
2
+
3
+ # Build Universal Framework for iOS
4
+ # Supports arm64 (device) and x86_64 (simulator)
5
+
6
+ set -e
7
+
8
+ FRAMEWORK_NAME="UnifiedVideoPlayer"
9
+ BUILD_DIR="build"
10
+ OUTPUT_DIR="Output"
11
+
12
+ echo "🔨 Building UnifiedVideoPlayer Framework..."
13
+
14
+ # Clean previous builds
15
+ rm -rf $BUILD_DIR
16
+ rm -rf $OUTPUT_DIR
17
+
18
+ # Build for iOS Device (arm64)
19
+ echo "📱 Building for iOS Device (arm64)..."
20
+ xcodebuild archive \
21
+ -scheme $FRAMEWORK_NAME \
22
+ -archivePath "$BUILD_DIR/ios_device.xcarchive" \
23
+ -sdk iphoneos \
24
+ -configuration Release \
25
+ SKIP_INSTALL=NO \
26
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
27
+ ARCHS="arm64" \
28
+ ONLY_ACTIVE_ARCH=NO
29
+
30
+ # Build for iOS Simulator (x86_64 and arm64 for Apple Silicon)
31
+ echo "💻 Building for iOS Simulator (x86_64 & arm64)..."
32
+ xcodebuild archive \
33
+ -scheme $FRAMEWORK_NAME \
34
+ -archivePath "$BUILD_DIR/ios_simulator.xcarchive" \
35
+ -sdk iphonesimulator \
36
+ -configuration Release \
37
+ SKIP_INSTALL=NO \
38
+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES \
39
+ ARCHS="x86_64 arm64" \
40
+ ONLY_ACTIVE_ARCH=NO \
41
+ EXCLUDED_ARCHS=""
42
+
43
+ # Create XCFramework
44
+ echo "📦 Creating XCFramework..."
45
+ xcodebuild -create-xcframework \
46
+ -framework "$BUILD_DIR/ios_device.xcarchive/Products/Library/Frameworks/$FRAMEWORK_NAME.framework" \
47
+ -framework "$BUILD_DIR/ios_simulator.xcarchive/Products/Library/Frameworks/$FRAMEWORK_NAME.framework" \
48
+ -output "$OUTPUT_DIR/$FRAMEWORK_NAME.xcframework"
49
+
50
+ echo "✅ Build complete! Framework available at: $OUTPUT_DIR/$FRAMEWORK_NAME.xcframework"
51
+ echo ""
52
+ echo "To use in your project:"
53
+ echo "1. Drag $FRAMEWORK_NAME.xcframework into your Xcode project"
54
+ echo "2. Make sure it's added to your target's 'Frameworks, Libraries, and Embedded Content'"
55
+ echo "3. Set 'Embed & Sign' for the framework"