diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09346f7..ad59571 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,27 +36,9 @@ jobs: cache-dependency-path: WebSocketServer/package-lock.json - run: npm ci - spm: - runs-on: macos-14 - steps: - - uses: actions/checkout@v4 - - name: Build via Swift Package Manager - run: ./scripts/build-spm-package.sh - ios: runs-on: macos-14 steps: - uses: actions/checkout@v4 - - name: Install Carthage - run: brew install carthage - - name: Build dependencies - run: make setup-ci - - name: Build RIBsTreeViewerClient (Simulator) - run: | - xcodebuild build \ - -project RIBsTreeViewerClient.xcodeproj \ - -scheme RIBsTreeViewerClient \ - -destination 'generic/platform=iOS Simulator' \ - -configuration Release \ - BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ - CODE_SIGNING_ALLOWED=NO + - name: Verify usable state (SPM + Xcode + Browser + WebSocket) + run: ./scripts/verify.sh diff --git a/Makefile b/Makefile index e5ee2f7..b68f621 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,13 @@ .PHONY: help .DEFAULT_GOAL := help - + help: @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -CARTHAGE_BUILD_FLAGS = --platform iOS --no-use-binaries --use-xcframeworks - -setup: ## Fetch and build Carthage dependencies (RIBs, RxSwift). - carthage update --platform iOS --no-build - @./scripts/patch_carthage_checkouts.sh - carthage build $(CARTHAGE_BUILD_FLAGS) RxSwift RxRelay - carthage build $(CARTHAGE_BUILD_FLAGS) RIBs - -setup-ci: ## Carthage bootstrap for CI (uses Cartfile.resolved). - carthage bootstrap --platform iOS --no-build --cache-builds - @./scripts/patch_carthage_checkouts.sh - carthage build $(CARTHAGE_BUILD_FLAGS) --cache-builds RxSwift RxRelay - carthage build $(CARTHAGE_BUILD_FLAGS) --cache-builds RIBs +verify: ## Run full usability checks (./scripts/verify.sh). + @./scripts/verify.sh -generate_xcframeworks: ## Generate XCFrameworks. +generate_xcframeworks: ## Regenerate Products/RIBsTreeViewerClient.xcframework (SPM deps). @./scripts/generate_xcframeworks.sh websocket-server: ## Start the WebSocket relay (port 8080). diff --git a/Products/RIBsTreeViewerClient.xcframework/Info.plist b/Products/RIBsTreeViewerClient.xcframework/Info.plist index 342e764..0c9c258 100644 --- a/Products/RIBsTreeViewerClient.xcframework/Info.plist +++ b/Products/RIBsTreeViewerClient.xcframework/Info.plist @@ -8,32 +8,32 @@ BinaryPath RIBsTreeViewerClient.framework/RIBsTreeViewerClient LibraryIdentifier - ios-arm64_x86_64-simulator + ios-arm64 LibraryPath RIBsTreeViewerClient.framework SupportedArchitectures arm64 - x86_64 SupportedPlatform ios - SupportedPlatformVariant - simulator BinaryPath RIBsTreeViewerClient.framework/RIBsTreeViewerClient LibraryIdentifier - ios-arm64 + ios-arm64_x86_64-simulator LibraryPath RIBsTreeViewerClient.framework SupportedArchitectures arm64 + x86_64 SupportedPlatform ios + SupportedPlatformVariant + simulator CFBundlePackageType diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Info.plist b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Info.plist index 80f69a4..a47d7fd 100644 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Info.plist and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Info.plist differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.abi.json b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.abi.json index a6c0211..080730e 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.abi.json +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.abi.json @@ -386,7 +386,7 @@ "usr": "s:20RIBsTreeViewerClient0abC4ImplC", "mangledName": "$s20RIBsTreeViewerClient0abC4ImplC", "moduleName": "RIBsTreeViewerClient", - "intro_iOS": "13.0", + "intro_iOS": "15.0", "declAttributes": [ "AccessControl", "Available" diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.private.swiftinterface b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.private.swiftinterface index 1920048..c600a2b 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.private.swiftinterface +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.private.swiftinterface @@ -1,6 +1,6 @@ // swift-interface-format-version: 1.0 // swift-compiler-version: Apple Swift version 6.2 effective-5.10 (swiftlang-6.2.0.19.9 clang-1700.3.19.1) -// swift-module-flags: -target arm64-apple-ios13.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient +// swift-module-flags: -target arm64-apple-ios15.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient // swift-module-flags-ignorable: -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2 import Foundation import RIBs @@ -22,7 +22,7 @@ public enum RIBsTreeViewerOption { case webSocketURL(Swift.String) case monitoringIntervalMillis(Swift.Int) } -@available(iOS 13.0, *) +@available(iOS 15.0, *) public class RIBsTreeViewerImpl : RIBsTreeViewerClient.RIBsTreeViewer { #if compiler(>=5.3) && $NonescapableTypes required public init(router: any RIBs.Routing, options: [RIBsTreeViewerClient.RIBsTreeViewerOption]?) diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftdoc b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftdoc index 0cdf31d..4a33fcd 100644 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftdoc and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftdoc differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftinterface b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftinterface index 1920048..c600a2b 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftinterface +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios.swiftinterface @@ -1,6 +1,6 @@ // swift-interface-format-version: 1.0 // swift-compiler-version: Apple Swift version 6.2 effective-5.10 (swiftlang-6.2.0.19.9 clang-1700.3.19.1) -// swift-module-flags: -target arm64-apple-ios13.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient +// swift-module-flags: -target arm64-apple-ios15.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient // swift-module-flags-ignorable: -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2 import Foundation import RIBs @@ -22,7 +22,7 @@ public enum RIBsTreeViewerOption { case webSocketURL(Swift.String) case monitoringIntervalMillis(Swift.Int) } -@available(iOS 13.0, *) +@available(iOS 15.0, *) public class RIBsTreeViewerImpl : RIBsTreeViewerClient.RIBsTreeViewer { #if compiler(>=5.3) && $NonescapableTypes required public init(router: any RIBs.Routing, options: [RIBsTreeViewerClient.RIBsTreeViewerOption]?) diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/RIBsTreeViewerClient b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/RIBsTreeViewerClient index 6b8e6be..e8a2b8d 100755 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/RIBsTreeViewerClient and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64/RIBsTreeViewerClient.framework/RIBsTreeViewerClient differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Info.plist b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Info.plist index 11d2660..8d921e0 100644 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Info.plist and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Info.plist differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.abi.json b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.abi.json index a6c0211..080730e 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.abi.json +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.abi.json @@ -386,7 +386,7 @@ "usr": "s:20RIBsTreeViewerClient0abC4ImplC", "mangledName": "$s20RIBsTreeViewerClient0abC4ImplC", "moduleName": "RIBsTreeViewerClient", - "intro_iOS": "13.0", + "intro_iOS": "15.0", "declAttributes": [ "AccessControl", "Available" diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface index 66df82f..98ffdc5 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface @@ -1,6 +1,6 @@ // swift-interface-format-version: 1.0 // swift-compiler-version: Apple Swift version 6.2 effective-5.10 (swiftlang-6.2.0.19.9 clang-1700.3.19.1) -// swift-module-flags: -target arm64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient +// swift-module-flags: -target arm64-apple-ios15.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient // swift-module-flags-ignorable: -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2 import Foundation import RIBs @@ -22,7 +22,7 @@ public enum RIBsTreeViewerOption { case webSocketURL(Swift.String) case monitoringIntervalMillis(Swift.Int) } -@available(iOS 13.0, *) +@available(iOS 15.0, *) public class RIBsTreeViewerImpl : RIBsTreeViewerClient.RIBsTreeViewer { #if compiler(>=5.3) && $NonescapableTypes required public init(router: any RIBs.Routing, options: [RIBsTreeViewerClient.RIBsTreeViewerOption]?) diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftdoc b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftdoc index 3e6e108..e12b3fd 100644 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftdoc and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftdoc differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftinterface b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftinterface index 66df82f..98ffdc5 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftinterface +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftinterface @@ -1,6 +1,6 @@ // swift-interface-format-version: 1.0 // swift-compiler-version: Apple Swift version 6.2 effective-5.10 (swiftlang-6.2.0.19.9 clang-1700.3.19.1) -// swift-module-flags: -target arm64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient +// swift-module-flags: -target arm64-apple-ios15.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient // swift-module-flags-ignorable: -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2 import Foundation import RIBs @@ -22,7 +22,7 @@ public enum RIBsTreeViewerOption { case webSocketURL(Swift.String) case monitoringIntervalMillis(Swift.Int) } -@available(iOS 13.0, *) +@available(iOS 15.0, *) public class RIBsTreeViewerImpl : RIBsTreeViewerClient.RIBsTreeViewer { #if compiler(>=5.3) && $NonescapableTypes required public init(router: any RIBs.Routing, options: [RIBsTreeViewerClient.RIBsTreeViewerOption]?) diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.abi.json b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.abi.json index a6c0211..080730e 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.abi.json +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.abi.json @@ -386,7 +386,7 @@ "usr": "s:20RIBsTreeViewerClient0abC4ImplC", "mangledName": "$s20RIBsTreeViewerClient0abC4ImplC", "moduleName": "RIBsTreeViewerClient", - "intro_iOS": "13.0", + "intro_iOS": "15.0", "declAttributes": [ "AccessControl", "Available" diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface index b160ec8..4bf709f 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface @@ -1,6 +1,6 @@ // swift-interface-format-version: 1.0 // swift-compiler-version: Apple Swift version 6.2 effective-5.10 (swiftlang-6.2.0.19.9 clang-1700.3.19.1) -// swift-module-flags: -target x86_64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient +// swift-module-flags: -target x86_64-apple-ios15.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient // swift-module-flags-ignorable: -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2 import Foundation import RIBs @@ -22,7 +22,7 @@ public enum RIBsTreeViewerOption { case webSocketURL(Swift.String) case monitoringIntervalMillis(Swift.Int) } -@available(iOS 13.0, *) +@available(iOS 15.0, *) public class RIBsTreeViewerImpl : RIBsTreeViewerClient.RIBsTreeViewer { #if compiler(>=5.3) && $NonescapableTypes required public init(router: any RIBs.Routing, options: [RIBsTreeViewerClient.RIBsTreeViewerOption]?) diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftdoc b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftdoc index 06fe47a..2f4c125 100644 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftdoc and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftdoc differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftinterface b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftinterface index b160ec8..4bf709f 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftinterface @@ -1,6 +1,6 @@ // swift-interface-format-version: 1.0 // swift-compiler-version: Apple Swift version 6.2 effective-5.10 (swiftlang-6.2.0.19.9 clang-1700.3.19.1) -// swift-module-flags: -target x86_64-apple-ios13.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient +// swift-module-flags: -target x86_64-apple-ios15.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-experimental-feature DebugDescriptionMacro -enable-bare-slash-regex -module-name RIBsTreeViewerClient // swift-module-flags-ignorable: -no-verify-emitted-module-interface -formal-cxx-interoperability-mode=off -interface-compiler-version 6.2 import Foundation import RIBs @@ -22,7 +22,7 @@ public enum RIBsTreeViewerOption { case webSocketURL(Swift.String) case monitoringIntervalMillis(Swift.Int) } -@available(iOS 13.0, *) +@available(iOS 15.0, *) public class RIBsTreeViewerImpl : RIBsTreeViewerClient.RIBsTreeViewer { #if compiler(>=5.3) && $NonescapableTypes required public init(router: any RIBs.Routing, options: [RIBsTreeViewerClient.RIBsTreeViewerOption]?) diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/RIBsTreeViewerClient b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/RIBsTreeViewerClient index ea7ceae..5470bec 100755 Binary files a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/RIBsTreeViewerClient and b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/RIBsTreeViewerClient differ diff --git a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/_CodeSignature/CodeResources b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/_CodeSignature/CodeResources index e72293d..ffade11 100644 --- a/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/_CodeSignature/CodeResources +++ b/Products/RIBsTreeViewerClient.xcframework/ios-arm64_x86_64-simulator/RIBsTreeViewerClient.framework/_CodeSignature/CodeResources @@ -14,47 +14,47 @@ Info.plist - H94fkPqXB41T4AezCDV8qa3ceWw= + D6asmWDkXcskZokn4kWVvf2JMl4= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.abi.json - Qml/PWH5GgqSv1EHmPh9gV6cSIc= + I5CRo3J/gkgmldEirZcoI//qgAs= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface - KsAMQQXP8TNfvYkxjRfEXhrlLXw= + 6HSV4ex8GCcv0XfOmhWKaTAy8B4= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftdoc - Z7OeThwM4pCIbyjPXTB2mgm5d3M= + bTdmD6PhEfEqvTOZB0xYGyhOWDw= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftinterface - KsAMQQXP8TNfvYkxjRfEXhrlLXw= + 6HSV4ex8GCcv0XfOmhWKaTAy8B4= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftmodule - mmAJB3lx8NbSMzDT2W0xQXA/NiI= + 7PTJvRQDV1HNdLgfluf9N7NOx/0= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.abi.json - Qml/PWH5GgqSv1EHmPh9gV6cSIc= + I5CRo3J/gkgmldEirZcoI//qgAs= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface - UqPdP2+CrXrnvHKwPDy/P3gyUSg= + rGfOHXt03lnzrPtBtxeyNLhF90o= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftdoc - rcxsJ8W9koN7G0EmTZsEcqqR5RE= + a2OwEA/SDCOP0Bl5GiYA/VexZ6M= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftinterface - UqPdP2+CrXrnvHKwPDy/P3gyUSg= + rGfOHXt03lnzrPtBtxeyNLhF90o= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftmodule - j/ZxCmJvulUkiiW5igveLr5JVm0= + WtDuLx+RnNPdFaqx81Em3bblLr4= Modules/module.modulemap @@ -81,70 +81,70 @@ hash2 - ugcySCvrF/m6HMnU1Lx2OGoGNNftNqHi+YtlT20vF14= + ZTLEjOQN42UKTACyBuQN03/IyRLJ/TT4UFeP3HNgxk4= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface hash2 - dU2kH5Iq+R3Q7SHBGeD1Oh3/egLz+DImA/pbmqqvZUU= + /6RlLiVLFxp9vHsKRox6meSymo/Es5+E+4uPY9w+7O4= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftdoc hash2 - CxwcBWMAjoDVFjO58ps4UoUrxL/unzuI1cxDHvSpRbw= + AUZ7OD4KACpsqEdq1dqAVbSd8d01fFAMKnRjmD5WLvc= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftinterface hash2 - dU2kH5Iq+R3Q7SHBGeD1Oh3/egLz+DImA/pbmqqvZUU= + /6RlLiVLFxp9vHsKRox6meSymo/Es5+E+4uPY9w+7O4= Modules/RIBsTreeViewerClient.swiftmodule/arm64-apple-ios-simulator.swiftmodule hash2 - JW07oPzo5h/ve4FDh9HSkDIgJi1XqTc9YcFGvb1xbKU= + e2kAmGdSaQOCFoqJfCKpA1jc8uXxUxzbsLZjCDXM7Ag= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.abi.json hash2 - ugcySCvrF/m6HMnU1Lx2OGoGNNftNqHi+YtlT20vF14= + ZTLEjOQN42UKTACyBuQN03/IyRLJ/TT4UFeP3HNgxk4= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface hash2 - xGQLWfqQp+pSmkkf8tkJEVGRskCuTDm97qi1wUgnHLY= + zw0HyQvJn4GggJx0DkMTViIv8pckq6r3w+TVbEUsVXQ= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftdoc hash2 - YgrIz2dqyNMxL06T1EI2t3nvLjVQiHqMM8uEpq0YSNU= + EW6p9HPhVvDASuMALKHpyJSn4Z1BB0L1to75anZ9xw0= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftinterface hash2 - xGQLWfqQp+pSmkkf8tkJEVGRskCuTDm97qi1wUgnHLY= + zw0HyQvJn4GggJx0DkMTViIv8pckq6r3w+TVbEUsVXQ= Modules/RIBsTreeViewerClient.swiftmodule/x86_64-apple-ios-simulator.swiftmodule hash2 - pF13kxt1ZagQYSYLYu/G0LAYaJ3+88z11muA5u1FvoU= + DX3kmjsw7UY1f0VJySqEp+dp9MJFwZzoe6Z6P+cs0M0= Modules/module.modulemap diff --git a/README.md b/README.md index bb28d9c..3fd9f00 100644 --- a/README.md +++ b/README.md @@ -1,134 +1,119 @@ -![](https://img.shields.io/github/license/srea/RIBsTreeViewerClient.svg) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +![](https://img.shields.io/github/license/srea/RIBsTreeViewerClient.svg) + # RIBsTreeViewer -![](./docs/logo.png) +![](./docs/logo.png) Real Time viewing attached RIBs Tree on Browser ## Demo -![](./docs/demo.gif) +![](./docs/demo.gif) -## Using the Libraries +## Requirements -### XCFramework +- **iOS 15+** (aligned with [RIBs-iOS](https://github.com/uber/RIBs-iOS) 1.0) +- Xcode 15+ +- Node.js 20+ (WebSocket relay and browser viewer) -Add the xcframework to your project。 +## Quick start (local tooling) -``` -./Products/RIBsTreeViewerClient.xcframework +From a clean clone — **no Carthage**: + +```shell +./scripts/verify.sh ``` -### Swift Package Manager (in progress) +Then run the viewer stack in three terminals: -SPM integration is being rolled out in [#38](https://github.com/srea/RIBsTreeViewerClient/issues/38). For local development of this repo: +```shell +# 1. WebSocket relay (port 8080) +cd WebSocketServer && npm install && npm start -```swift -// Package.swift dependency (consumer apps) -.package(url: "https://github.com/srea/RIBsTreeViewerClient.git", from: "1.0.7"), -``` +# 2. Browser tree UI +cd Browser && yarn install && yarn build && open ./public/index.html -Or add this package in Xcode via **File → Add Package Dependencies** (once a tagged release includes SPM support). +# 3. Your iOS app (DEBUG): attach RIBsTreeViewer to the launch router — see below +``` -Requirements when using SPM: **iOS 15+**, [RIBs-iOS](https://github.com/uber/RIBs-iOS) 1.0+, RxSwift 6.x. +## Using the library in your app -### CocoaPods +### Swift Package Manager (recommended) -This is not supported because the RIBs do not provide an up-to-date PodSpec, making it difficult to resolve dependencies. +In Xcode: **File → Add Package Dependencies** → `https://github.com/srea/RIBsTreeViewerClient.git` -### Carthage +Or in `Package.swift`: -```shell -github "srea/RIBsTreeViewerClient" +```swift +dependencies: [ + .package(url: "https://github.com/srea/RIBsTreeViewerClient.git", branch: "master"), +], +targets: [ + .target( + name: "YourApp", + dependencies: [ + .product(name: "RIBsTreeViewerClient", package: "RIBsTreeViewerClient"), + ] + ), +] ``` -``` -$ make setup -``` +This pulls [RIBs-iOS](https://github.com/uber/RIBs-iOS) 1.0+ and RxSwift 6.x automatically. -Requires Xcode 15+ and [Carthage](https://github.com/Carthage/Carthage). Dependencies are built as XCFrameworks (Apple Silicon–compatible). Minimum iOS: **13.0** (library source targets **15.0+** when using SPM — see [#38](https://github.com/srea/RIBsTreeViewerClient/issues/38)). +### XCFramework -To regenerate the prebuilt `Products/RIBsTreeViewerClient.xcframework` after source changes: +Add the prebuilt binary (no Carthage required for consumers): ``` -$ make generate_xcframeworks +./Products/RIBsTreeViewerClient.xcframework ``` -#### Build Phase - -![](./docs/Carthage_BuildPhase.png) -![](./docs/Carthage_Embedded.png) - -Carthage CopyFrameworks (ONLY DEBUG) +Regenerate after changing library sources: ```shell - if [ ${CONFIGURATION%%-*} == "Debug" ]; then - /usr/local/bin/carthage copy-frameworks - fi +make generate_xcframeworks ``` -## Basic setup +### Carthage (legacy) -```swift -@UIApplicationMain -public class AppDelegate: UIResponder, UIApplicationDelegate { - - private var ribsTreeViewer: RIBsTreeViewer? = nil - - public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - let window = UIWindow(frame: UIScreen.main.bounds) - self.window = window - - let result = RootBuilder(dependency: AppComponent()).build() - let launchRouter = result.launchRouter - self.launchRouter = launchRouter - urlHandler = result.urlHandler - launchRouter.launch(from: window) - startRIBsTreeViewer(launchRouter: launchRouter) - return true - } -} -``` +Carthage is **deprecated** for this repo ([#38](https://github.com/srea/RIBsTreeViewerClient/issues/38)). Prefer SPM or the XCFramework above. -```swift -// MARK: - RIBsTreeViewer +## Basic setup (iOS app, DEBUG) +```swift #if DEBUG import RIBsTreeViewerClient extension AppDelegate { private func startRIBsTreeViewer(launchRouter: Routing) { if #available(iOS 15.0, *) { - ribsTreeViewer = RIBsTreeViewerImpl.init(router: launchRouter, - options: [.webSocketURL("ws://0.0.0.0:8080"), - .monitoringIntervalMillis(1000)]) - ribsTreeViewer?.start() - } else { - // RIBsTreeViewer is not supported OS version. + let viewer = RIBsTreeViewerImpl( + router: launchRouter, + options: [ + .webSocketURL("ws://127.0.0.1:8080"), + .monitoringIntervalMillis(1000), + ] + ) + viewer.start() } } } #endif ``` -### Starting the WebSocket relay server +Use `127.0.0.1` when running the simulator on the same Mac as the WebSocket relay. -```shell -cd WebSocketServer -npm install -npm start -``` +## Development commands -The server listens on port `8080` by default. Override with `PORT=9090 npm start`. +| Command | Description | +|---------|-------------| +| `./scripts/verify.sh` | Full usability check (SPM, Xcode, Browser, WebSocket) | +| `./scripts/build-spm-package.sh` | Build library via SwiftPM only | +| `make generate_xcframeworks` | Rebuild `Products/*.xcframework` | +| `make browser-build` | Build browser bundle | +| `make websocket-server` | Start WebSocket relay | -### Build and open the browser viewer - -```shell -cd Browser -yarn install -yarn build -open ./public/index.html -``` +## Migration notes -For development, run `yarn watch` in `Browser/` to rebuild on source changes. \ No newline at end of file +- RIBs iOS now lives at [uber/RIBs-iOS](https://github.com/uber/RIBs-iOS) (not `uber/RIBs`). +- Minimum iOS is **15** for SPM / current sources; older XCFrameworks may still show iOS 13 in metadata until regenerated. diff --git a/RIBsTreeViewerClient.xcodeproj/project.pbxproj b/RIBsTreeViewerClient.xcodeproj/project.pbxproj index 362111e..4e60e98 100644 --- a/RIBsTreeViewerClient.xcodeproj/project.pbxproj +++ b/RIBsTreeViewerClient.xcodeproj/project.pbxproj @@ -9,9 +9,6 @@ /* Begin PBXBuildFile section */ C555E16421EF16520060A7B0 /* RIBsTreeViewerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = C555E16221EF16520060A7B0 /* RIBsTreeViewerClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; C555E16B21EF16790060A7B0 /* RIBsTreeViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C555E16A21EF16790060A7B0 /* RIBsTreeViewer.swift */; }; - C555E18821EF244C0060A7B0 /* RIBs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C555E18421EF20F10060A7B0 /* RIBs.framework */; platformFilter = ios; }; - C555E18921EF245A0060A7B0 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C555E18621EF20FF0060A7B0 /* RxSwift.framework */; platformFilter = ios; }; - C555E18E21EF28000060A7B0 /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C555E18D21EF28000060A7B0 /* RxRelay.framework */; platformFilter = ios; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -19,11 +16,6 @@ C555E16221EF16520060A7B0 /* RIBsTreeViewerClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RIBsTreeViewerClient.h; sourceTree = ""; }; C555E16321EF16520060A7B0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C555E16A21EF16790060A7B0 /* RIBsTreeViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RIBsTreeViewer.swift; sourceTree = ""; }; - C555E18421EF20F10060A7B0 /* RIBs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RIBs.xcframework; path = Carthage/Build/RIBs.xcframework; sourceTree = ""; }; - C555E18621EF20FF0060A7B0 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxSwift.xcframework; path = Carthage/Build/RxSwift.xcframework; sourceTree = ""; }; - C555E18D21EF28000060A7B0 /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = RxRelay.xcframework; path = Carthage/Build/RxRelay.xcframework; sourceTree = ""; }; - C555E18A21EF27150060A7B0 /* SocketIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SocketIO.framework; path = Carthage/Build/iOS/SocketIO.framework; sourceTree = ""; }; - C555E18C21EF271F0060A7B0 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/iOS/Starscream.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -31,9 +23,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C555E18E21EF28000060A7B0 /* RxRelay.framework in Frameworks */, - C555E18921EF245A0060A7B0 /* RxSwift.framework in Frameworks */, - C555E18821EF244C0060A7B0 /* RIBs.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -45,7 +34,6 @@ children = ( C555E16121EF16520060A7B0 /* RIBsTreeViewerClient */, C555E16021EF16520060A7B0 /* Products */, - C555E18321EF20F00060A7B0 /* Frameworks */, ); sourceTree = ""; }; @@ -75,18 +63,6 @@ path = Sources; sourceTree = ""; }; - C555E18321EF20F00060A7B0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C555E18C21EF271F0060A7B0 /* Starscream.framework */, - C555E18A21EF27150060A7B0 /* SocketIO.framework */, - C555E18D21EF28000060A7B0 /* RxRelay.framework */, - C555E18621EF20FF0060A7B0 /* RxSwift.framework */, - C555E18421EF20F10060A7B0 /* RIBs.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -115,6 +91,10 @@ dependencies = ( ); name = RIBsTreeViewerClient; + packageProductDependencies = ( + C555E19221EF30020060A7B0 /* RIBs */, + C555E19321EF30030060A7B0 /* RxSwift */, + ); productName = RIBsTreeViewerClient; productReference = C555E15F21EF16520060A7B0 /* RIBsTreeViewerClient.framework */; productType = "com.apple.product-type.framework"; @@ -145,6 +125,10 @@ Base, ); mainGroup = C555E15521EF16520060A7B0; + packageReferences = ( + C555E19021EF30000060A7B0 /* XCRemoteSwiftPackageReference "RIBs-iOS" */, + C555E19121EF30010060A7B0 /* XCRemoteSwiftPackageReference "RxSwift" */, + ); productRefGroup = C555E16021EF16520060A7B0 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -228,7 +212,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -287,7 +271,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -310,28 +294,15 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build", - ); INFOPLIST_FILE = RIBsTreeViewerClient/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.0.7; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - RIBs, - "-framework", - RxRelay, - "-framework", - RxSwift, - ); + MARKETING_VERSION = 1.0.8; PRODUCT_BUNDLE_IDENTIFIER = co.minipro.app.RIBsTreeViewerClient; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -353,28 +324,15 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Carthage/Build", - ); INFOPLIST_FILE = RIBsTreeViewerClient/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.0.7; - OTHER_LDFLAGS = ( - "$(inherited)", - "-framework", - RIBs, - "-framework", - RxRelay, - "-framework", - RxSwift, - ); + MARKETING_VERSION = 1.0.8; PRODUCT_BUNDLE_IDENTIFIER = co.minipro.app.RIBsTreeViewerClient; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; @@ -386,6 +344,38 @@ }; /* End XCBuildConfiguration section */ +/* Begin XCRemoteSwiftPackageReference section */ + C555E19021EF30000060A7B0 /* XCRemoteSwiftPackageReference "RIBs-iOS" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/uber/RIBs-iOS.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; + C555E19121EF30010060A7B0 /* XCRemoteSwiftPackageReference "RxSwift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ReactiveX/RxSwift.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 6.9.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + C555E19221EF30020060A7B0 /* RIBs */ = { + isa = XCSwiftPackageProductDependency; + package = C555E19021EF30000060A7B0 /* XCRemoteSwiftPackageReference "RIBs-iOS" */; + productName = RIBs; + }; + C555E19321EF30030060A7B0 /* RxSwift */ = { + isa = XCSwiftPackageProductDependency; + package = C555E19121EF30010060A7B0 /* XCRemoteSwiftPackageReference "RxSwift" */; + productName = RxSwift; + }; +/* End XCSwiftPackageProductDependency section */ + /* Begin XCConfigurationList section */ C555E15921EF16520060A7B0 /* Build configuration list for PBXProject "RIBsTreeViewerClient" */ = { isa = XCConfigurationList; diff --git a/scripts/build-xcode-project.sh b/scripts/build-xcode-project.sh new file mode 100755 index 0000000..91b8de0 --- /dev/null +++ b/scripts/build-xcode-project.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +xcodebuild -resolvePackageDependencies \ + -project RIBsTreeViewerClient.xcodeproj \ + -scheme RIBsTreeViewerClient + +xcodebuild build \ + -project RIBsTreeViewerClient.xcodeproj \ + -scheme RIBsTreeViewerClient \ + -destination 'generic/platform=iOS Simulator' \ + -configuration Release \ + BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ + CODE_SIGNING_ALLOWED=NO \ + "$@" diff --git a/scripts/generate_xcframeworks.sh b/scripts/generate_xcframeworks.sh index d645c6e..5e24916 100755 --- a/scripts/generate_xcframeworks.sh +++ b/scripts/generate_xcframeworks.sh @@ -4,13 +4,12 @@ set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" -if [[ ! -d Carthage/Build/RIBs.xcframework ]]; then - echo "Run 'make setup' before generating XCFrameworks." - exit 1 -fi - rm -rf ./Products/RIBsTreeViewerClient.xcframework build +xcodebuild -resolvePackageDependencies \ + -project RIBsTreeViewerClient.xcodeproj \ + -scheme RIBsTreeViewerClient + COMMON_FLAGS=( BUILD_LIBRARY_FOR_DISTRIBUTION=YES SKIP_INSTALL=NO diff --git a/scripts/verify.sh b/scripts/verify.sh new file mode 100755 index 0000000..0cbc128 --- /dev/null +++ b/scripts/verify.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# Verify RIBsTreeViewerClient is in a usable state (no Carthage required). +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +echo "==> Swift Package Manager library build" +./scripts/build-spm-package.sh + +echo "==> Xcode project (SPM dependencies, iOS Simulator)" +xcodebuild -resolvePackageDependencies \ + -project RIBsTreeViewerClient.xcodeproj \ + -scheme RIBsTreeViewerClient +xcodebuild build \ + -project RIBsTreeViewerClient.xcodeproj \ + -scheme RIBsTreeViewerClient \ + -destination 'generic/platform=iOS Simulator' \ + -configuration Release \ + BUILD_LIBRARY_FOR_DISTRIBUTION=YES \ + CODE_SIGNING_ALLOWED=NO \ + -derivedDataPath .build/DerivedData-verify + +echo "==> Prebuilt XCFramework" +test -f Products/RIBsTreeViewerClient.xcframework/Info.plist + +echo "==> WebSocket relay" +(cd WebSocketServer && npm ci) + +echo "==> Browser viewer" +(cd Browser && yarn install --frozen-lockfile && yarn build) + +echo "" +echo "All checks passed. Usable workflow:" +echo " 1. cd WebSocketServer && npm start" +echo " 2. cd Browser && yarn build && open ./public/index.html" +echo " 3. Link Products/RIBsTreeViewerClient.xcframework or add SPM package in your app (# DEBUG)"