From 6a1960dc20bdd956c7fab357080de4c17e16b800 Mon Sep 17 00:00:00 2001 From: Mauro <34335419+Velin92@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:32:29 +0200 Subject: [PATCH] [iOS] Improved XCFramework generation script (#1018) --- build_xcframework.sh | 41 +++--------------- .../example/Wysiwyg.xcodeproj/project.pbxproj | 8 ++-- .../xcshareddata/swiftpm/Package.resolved | 13 +++++- .../ios/lib/WysiwygComposer/Package.resolved | 41 ++++++++++++++++++ .../ios/lib/WysiwygComposer/Package.swift | 2 +- platforms/ios/tools/Framework-Info.plist | Bin 320 -> 0 bytes platforms/ios/tools/XCFramework-Info.plist | 40 ----------------- platforms/ios/tools/module.modulemap | 4 -- 8 files changed, 62 insertions(+), 87 deletions(-) create mode 100644 platforms/ios/lib/WysiwygComposer/Package.resolved delete mode 100644 platforms/ios/tools/Framework-Info.plist delete mode 100644 platforms/ios/tools/XCFramework-Info.plist delete mode 100644 platforms/ios/tools/module.modulemap diff --git a/build_xcframework.sh b/build_xcframework.sh index abaf11894..8199b93ec 100755 --- a/build_xcframework.sh +++ b/build_xcframework.sh @@ -2,28 +2,17 @@ GENERATION_PATH=.generated/ios -UNIFFI_CONFIG_FILE_PATH=bindings/wysiwyg-ffi/uniffi.toml - ARM64_LIB_PATH=target/aarch64-apple-ios/release/libuniffi_wysiwyg_composer.a ARM64_SIM_LIB_PATH=target/aarch64-apple-ios-sim/release/libuniffi_wysiwyg_composer.a X86_LIB_PATH=target/x86_64-apple-ios/release/libuniffi_wysiwyg_composer.a SIM_LIB_PATH=target/ios-simulator/libuniffi_wysiwyg_composer.a IOS_PATH=platforms/ios -TOOLS_PATH="${IOS_PATH}/tools" SWIFT_PACKAGE_PATH="${IOS_PATH}/lib/WysiwygComposer" SWIFT_BINDINGS_FILE_PATH="${SWIFT_PACKAGE_PATH}/Sources/WysiwygComposer/WysiwygComposer.swift" XCFRAMEWORK_PATH="${SWIFT_PACKAGE_PATH}/WysiwygComposerFFI.xcframework" -XCFRAMEWORK_SIM_PATH="${XCFRAMEWORK_PATH}/ios-arm64_x86_64-simulator/WysiwygComposerFFI.framework" -XCFRAMEWORK_SIM_HEADERS_PATH="${XCFRAMEWORK_SIM_PATH}/Headers" -XCFRAMEWORK_SIM_MODULES_PATH="${XCFRAMEWORK_SIM_PATH}/Modules" -XCFRAMEWORK_SIM_LIBRARY_PATH="${XCFRAMEWORK_SIM_PATH}/WysiwygComposerFFI" -XCFRAMEWORK_ARM64_PATH="${XCFRAMEWORK_PATH}/ios-arm64/WysiwygComposerFFI.framework" -XCFRAMEWORK_ARM64_HEADERS_PATH="${XCFRAMEWORK_ARM64_PATH}/Headers" -XCFRAMEWORK_ARM64_MODULES_PATH="${XCFRAMEWORK_ARM64_PATH}/Modules" -XCFRAMEWORK_ARM64_LIBRARY_PATH="${XCFRAMEWORK_ARM64_PATH}/WysiwygComposerFFI" # Build libraries for all platforms cargo build -p uniffi-wysiwyg-composer --release --target aarch64-apple-ios --target aarch64-apple-ios-sim --target x86_64-apple-ios @@ -57,28 +46,8 @@ mv "${GENERATION_PATH}/WysiwygComposer.swift" $SWIFT_BINDINGS_FILE_PATH sed -i "" -e '1h;2,$H;$!d;g' -e 's/) -> ComposerUpdate {\n return try! FfiConverterTypeComposerUpdate.lift(\n try!/) throws -> ComposerUpdate {\n return try FfiConverterTypeComposerUpdate.lift(\n try/g' $SWIFT_BINDINGS_FILE_PATH sed -i "" -e '1h;2,$H;$!d;g' -e 's/) -> ComposerUpdate/) throws -> ComposerUpdate/g' $SWIFT_BINDINGS_FILE_PATH -# Create xcframework hierarchy -mkdir -p $XCFRAMEWORK_SIM_HEADERS_PATH -mkdir $XCFRAMEWORK_SIM_MODULES_PATH -mkdir -p $XCFRAMEWORK_ARM64_HEADERS_PATH -mkdir $XCFRAMEWORK_ARM64_MODULES_PATH - -# Copy/move files to expected locations -# -# Note: this and the hierarchy created above are actually -# replacing the call to xcodebuild's create-xcframework because -# it doesn't build up the hierarchy in a way that would avoid -# conflicts between multiple Rust libraries imported into the same -# hosting application. This does, because .framework objects -# have their own directory in DerivedData, whereas root headers -# directory module.modulemap files tend to conflict with each other -# as Xcode blindly moves them all to the same include folder. -mv $ARM64_LIB_PATH $XCFRAMEWORK_ARM64_LIBRARY_PATH -mv $SIM_LIB_PATH $XCFRAMEWORK_SIM_LIBRARY_PATH -cp ${GENERATION_PATH}/*.h $XCFRAMEWORK_SIM_HEADERS_PATH -mv ${GENERATION_PATH}/*.h $XCFRAMEWORK_ARM64_HEADERS_PATH -cp "${TOOLS_PATH}/Framework-Info.plist" "${XCFRAMEWORK_SIM_PATH}/Info.plist" -cp "${TOOLS_PATH}/Framework-Info.plist" "${XCFRAMEWORK_ARM64_PATH}/Info.plist" -cp "${TOOLS_PATH}/XCFramework-Info.plist" "${XCFRAMEWORK_PATH}/Info.plist" -cp "${TOOLS_PATH}/module.modulemap" $XCFRAMEWORK_SIM_MODULES_PATH -cp "${TOOLS_PATH}/module.modulemap" $XCFRAMEWORK_ARM64_MODULES_PATH +# Making this directory is required to not have conflicts with other FFI generated xcframeworks. +mkdir $GENERATION_PATH/WysiwygComposerFFI +mv ${GENERATION_PATH}/WysiwygComposerFFI.modulemap ${GENERATION_PATH}/WysiwygComposerFFI/module.modulemap +mv ${GENERATION_PATH}/*.h ${GENERATION_PATH}/WysiwygComposerFFI +xcodebuild -create-xcframework -library $ARM64_LIB_PATH -headers $GENERATION_PATH -library $SIM_LIB_PATH -headers $GENERATION_PATH -output $XCFRAMEWORK_PATH diff --git a/platforms/ios/example/Wysiwyg.xcodeproj/project.pbxproj b/platforms/ios/example/Wysiwyg.xcodeproj/project.pbxproj index f546764fa..5475af6e1 100644 --- a/platforms/ios/example/Wysiwyg.xcodeproj/project.pbxproj +++ b/platforms/ios/example/Wysiwyg.xcodeproj/project.pbxproj @@ -37,7 +37,6 @@ A6E13E5129A8F06E00A85A55 /* SerializationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6E13E5029A8F06E00A85A55 /* SerializationService.swift */; }; A6E13E5329A8F0DD00A85A55 /* WysiwygTextAttachmentData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6E13E5229A8F0DD00A85A55 /* WysiwygTextAttachmentData.swift */; }; A6E13E5529A8F1C400A85A55 /* WysiwygAttachmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6E13E5429A8F1C400A85A55 /* WysiwygAttachmentView.swift */; }; - A6E6B26F2886D9AA009596F2 /* WysiwygComposer in Frameworks */ = {isa = PBXBuildFile; productRef = A6E6B26E2886D9AA009596F2 /* WysiwygComposer */; }; A6F3FC0128D4658000C170E8 /* AlertHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F3FC0028D4658000C170E8 /* AlertHelper.swift */; }; A6F3FC0428D465AF00C170E8 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F3FC0328D465AF00C170E8 /* View.swift */; }; A6F3FC0628DA123900C170E8 /* UIAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F3FC0528DA123900C170E8 /* UIAlertController.swift */; }; @@ -45,6 +44,7 @@ A6F4D0CF29AE0C1500087A3E /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F4D0CE29AE0C1500087A3E /* Users.swift */; }; A6F4D0D129AE0C3200087A3E /* Rooms.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F4D0D029AE0C3200087A3E /* Rooms.swift */; }; A6F4D0D329AE0C5100087A3E /* Commands.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F4D0D229AE0C5100087A3E /* Commands.swift */; }; + A74D33FE2C468E1500A40BB5 /* WysiwygComposer in Frameworks */ = {isa = PBXBuildFile; productRef = A74D33FD2C468E1500A40BB5 /* WysiwygComposer */; }; A75C6AD22C3E989D0096D3A4 /* WysiwygUITests+Keyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75C6AD12C3E989D0096D3A4 /* WysiwygUITests+Keyboard.swift */; }; /* End PBXBuildFile section */ @@ -106,7 +106,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A6E6B26F2886D9AA009596F2 /* WysiwygComposer in Frameworks */, + A74D33FE2C468E1500A40BB5 /* WysiwygComposer in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -273,7 +273,7 @@ ); name = Wysiwyg; packageProductDependencies = ( - A6E6B26E2886D9AA009596F2 /* WysiwygComposer */, + A74D33FD2C468E1500A40BB5 /* WysiwygComposer */, ); productName = Wysiwyg; productReference = A6472CA72886CF830021A0E8 /* Wysiwyg.app */; @@ -721,7 +721,7 @@ /* End XCConfigurationList section */ /* Begin XCSwiftPackageProductDependency section */ - A6E6B26E2886D9AA009596F2 /* WysiwygComposer */ = { + A74D33FD2C468E1500A40BB5 /* WysiwygComposer */ = { isa = XCSwiftPackageProductDependency; productName = WysiwygComposer; }; diff --git a/platforms/ios/example/Wysiwyg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/platforms/ios/example/Wysiwyg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9081498f6..8928aba42 100644 --- a/platforms/ios/example/Wysiwyg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/platforms/ios/example/Wysiwyg.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -23,8 +23,17 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/pointfreeco/swift-snapshot-testing", "state" : { - "revision" : "f29e2014f6230cf7d5138fc899da51c7f513d467", - "version" : "1.10.0" + "revision" : "c097f955b4e724690f0fc8ffb7a6d4b881c9c4e3", + "version" : "1.17.2" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax", + "state" : { + "revision" : "4c6cc0a3b9e8f14b3ae2307c5ccae4de6167ac2c", + "version" : "600.0.0-prerelease-2024-06-12" } } ], diff --git a/platforms/ios/lib/WysiwygComposer/Package.resolved b/platforms/ios/lib/WysiwygComposer/Package.resolved new file mode 100644 index 000000000..8928aba42 --- /dev/null +++ b/platforms/ios/lib/WysiwygComposer/Package.resolved @@ -0,0 +1,41 @@ +{ + "pins" : [ + { + "identity" : "dtcoretext", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Cocoanetics/DTCoreText", + "state" : { + "revision" : "b664664825da565b4c2b7a17dbe2369f68ae43d9", + "version" : "1.6.26" + } + }, + { + "identity" : "dtfoundation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Cocoanetics/DTFoundation.git", + "state" : { + "revision" : "76062513434421cb6c8a1ae1d4f8368a7ebc2da3", + "version" : "1.7.18" + } + }, + { + "identity" : "swift-snapshot-testing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-snapshot-testing", + "state" : { + "revision" : "c097f955b4e724690f0fc8ffb7a6d4b881c9c4e3", + "version" : "1.17.2" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax", + "state" : { + "revision" : "4c6cc0a3b9e8f14b3ae2307c5ccae4de6167ac2c", + "version" : "600.0.0-prerelease-2024-06-12" + } + } + ], + "version" : 2 +} diff --git a/platforms/ios/lib/WysiwygComposer/Package.swift b/platforms/ios/lib/WysiwygComposer/Package.swift index 04588bd69..e697a3f20 100644 --- a/platforms/ios/lib/WysiwygComposer/Package.swift +++ b/platforms/ios/lib/WysiwygComposer/Package.swift @@ -19,7 +19,7 @@ let package = Package( dependencies: [ .package( url: "https://github.com/pointfreeco/swift-snapshot-testing", - from: "1.17.1" + from: "1.17.2" ), .package( url: "https://github.com/Cocoanetics/DTCoreText", diff --git a/platforms/ios/tools/Framework-Info.plist b/platforms/ios/tools/Framework-Info.plist deleted file mode 100644 index a368919aa7055bab5b4e4c0df1680ba6f52d7a16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmYc)$jK}&F)+B!$i&RT%Er#Y$;HjX%NH*okEs7VAg$w4T<-24imjE>+7F9yEB5881NKGy+NleN~jTaDx zX$nY8&Q45E4XG>uit@um;hF_}GxIWYOLP5$VNNmBGXUC|UzDzwn+SAPg - - - - AvailableLibraries - - - LibraryIdentifier - ios-arm64 - LibraryPath - WysiwygComposerFFI.framework - SupportedArchitectures - - arm64 - - SupportedPlatform - ios - - - LibraryIdentifier - ios-arm64_x86_64-simulator - LibraryPath - WysiwygComposerFFI.framework - SupportedArchitectures - - arm64 - x86_64 - - SupportedPlatform - ios - SupportedPlatformVariant - simulator - - - CFBundlePackageType - XFWK - XCFrameworkFormatVersion - 1.0 - - diff --git a/platforms/ios/tools/module.modulemap b/platforms/ios/tools/module.modulemap deleted file mode 100644 index 0917806b7..000000000 --- a/platforms/ios/tools/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -framework module WysiwygComposerFFI { - umbrella header "WysiwygComposerFFI.h" - export * -}