From 3551a692fea92a5131baf2adc63a3b99df86837c Mon Sep 17 00:00:00 2001 From: James Ballard Date: Tue, 14 Jan 2025 14:03:24 -0800 Subject: [PATCH 1/4] Workaround for iOS. --- .../Layers/PlayAKmlTour/PlayAKmlTour.pro | 19 ++++++++++++++ SampleViewer/SampleViewer.pro | 25 ++++++++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro b/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro index 7bd5877463..9dec1462a3 100644 --- a/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro +++ b/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro @@ -56,6 +56,25 @@ ios { $$PWD/Info.plist QMAKE_INFO_PLIST = $$PWD/Info.plist + + # workaround for https://bugreports.qt.io/browse/QTBUG-129651 + # ArcGIS Maps SDK for Qt adds 'QMAKE_RPATHDIR = @executable_path/Frameworks' + # and ffmpeg frameworks have embedded '@rpath/Frameworks' path. + # so in order for them to be found, we need to add @executable_path to the + # search path. + QMAKE_LFLAGS += -F$$(QTDIR)/lib/ffmpeg -Wl,-rpath,@executable_path + LIBS += -framework libavcodec \ + -framework libavformat \ + -framework libavutil \ + -framework libswresample \ + -framework libswscale + ffmpeg.files = $$(QTDIR)/lib/ffmpeg/libavcodec.framework \ + $$(QTDIR)/lib/ffmpeg/libavformat.framework \ + $$(QTDIR)/lib/ffmpeg/libavutil.framework \ + $$(QTDIR)/lib/ffmpeg/libswresample.framework \ + $$(QTDIR)/lib/ffmpeg/libswscale.framework + ffmpeg.path = Frameworks + QMAKE_BUNDLE_DATA += ffmpeg } android { diff --git a/SampleViewer/SampleViewer.pro b/SampleViewer/SampleViewer.pro index 97a31b817b..c600c9faa5 100644 --- a/SampleViewer/SampleViewer.pro +++ b/SampleViewer/SampleViewer.pro @@ -37,7 +37,7 @@ exists($$PWD/../../../DevBuildCpp.pri) { # use the Esri dev build script include ($$PWD/../../../DevBuildCpp.pri) # include the toolkitcpp.pri, which contains all the toolkit resources - include($$PWD/../../toolkit/uitools/toolkitcpp.pri) + include($$PWD/../../toolkit/uitools/toolkitcpp/toolkitcpp.pri) INCLUDEPATH += \ $$SAMPLEPATHCPP \ @@ -52,8 +52,8 @@ exists($$PWD/../../../DevBuildCpp.pri) { CONFIG += c++17 # include the toolkitcpp.pri, which contains all the toolkit resources - !include($$PWD/../arcgis-maps-sdk-toolkit-qt/uitools/toolkitcpp.pri) { - message("ERROR: Cannot find toolkitcpp.pri at path:" $$PWD/../arcgis-maps-sdk-toolkit-qt/uitools/toolkitcpp.pri) + !include($$PWD/../arcgis-maps-sdk-toolkit-qt/uitools/toolkitcpp/toolkitcpp.pri) { + message("ERROR: Cannot find toolkitcpp.pri at path:" $$PWD/../arcgis-maps-sdk-toolkit-qt/uitools/toolkitcpp/toolkitcpp.pri) message("Please ensure the Qt Toolkit repository is cloned and the path above is correct.") } @@ -246,6 +246,25 @@ android { } ios { + # workaround for https://bugreports.qt.io/browse/QTBUG-129651 + # ArcGIS Maps SDK for Qt adds 'QMAKE_RPATHDIR = @executable_path/Frameworks' + # and ffmpeg frameworks have embedded '@rpath/Frameworks' path. + # so in order for them to be found, we need to add @executable_path to the + # search path. + QMAKE_LFLAGS += -F$$(QTDIR)/lib/ffmpeg -Wl,-rpath,@executable_path + LIBS += -framework libavcodec \ + -framework libavformat \ + -framework libavutil \ + -framework libswresample \ + -framework libswscale + ffmpeg.files = $$(QTDIR)/lib/ffmpeg/libavcodec.framework \ + $$(QTDIR)/lib/ffmpeg/libavformat.framework \ + $$(QTDIR)/lib/ffmpeg/libavutil.framework \ + $$(QTDIR)/lib/ffmpeg/libswresample.framework \ + $$(QTDIR)/lib/ffmpeg/libswscale.framework + ffmpeg.path = Frameworks + QMAKE_BUNDLE_DATA += ffmpeg + ios_icon.files = $$files($$PWD/iOS/Images.xcassets/AppIcon.appiconset/iOS_*.png) QMAKE_BUNDLE_DATA += ios_icon From a6c18bea13cd9e4c4aa7865e2d7cdf02bb9266d4 Mon Sep 17 00:00:00 2001 From: James Ballard Date: Tue, 14 Jan 2025 15:42:29 -0800 Subject: [PATCH 2/4] Don't use QTDIR since it's only available with Qt Creator. With command line builds, we need to find the lib directly the hard way. It's actually qmake in the macOS dir, and then the build might be using either qmake or qmake6. --- CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro | 4 +++- SampleViewer/SampleViewer.pro | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro b/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro index 9dec1462a3..6574e3642b 100644 --- a/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro +++ b/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro @@ -62,7 +62,9 @@ ios { # and ffmpeg frameworks have embedded '@rpath/Frameworks' path. # so in order for them to be found, we need to add @executable_path to the # search path. - QMAKE_LFLAGS += -F$$(QTDIR)/lib/ffmpeg -Wl,-rpath,@executable_path + FFMPEG_LIB_DIR = $$absolute_path($$replace(QMAKE_QMAKE, "qmake6", "../../ios/lib/ffmpeg")) + FFMPEG_LIB_DIR = $$absolute_path($$replace(FFMPEG_LIB_DIR, "qmake", "../../ios/lib/ffmpeg")) + QMAKE_LFLAGS += -F$${FFMPEG_LIB_DIR} -Wl,-rpath,@executable_path LIBS += -framework libavcodec \ -framework libavformat \ -framework libavutil \ diff --git a/SampleViewer/SampleViewer.pro b/SampleViewer/SampleViewer.pro index c600c9faa5..e58e00b341 100644 --- a/SampleViewer/SampleViewer.pro +++ b/SampleViewer/SampleViewer.pro @@ -251,7 +251,9 @@ ios { # and ffmpeg frameworks have embedded '@rpath/Frameworks' path. # so in order for them to be found, we need to add @executable_path to the # search path. - QMAKE_LFLAGS += -F$$(QTDIR)/lib/ffmpeg -Wl,-rpath,@executable_path + FFMPEG_LIB_DIR = $$absolute_path($$replace(QMAKE_QMAKE, "qmake6", "../../ios/lib/ffmpeg")) + FFMPEG_LIB_DIR = $$absolute_path($$replace(FFMPEG_LIB_DIR, "qmake", "../../ios/lib/ffmpeg")) + QMAKE_LFLAGS += -F$${FFMPEG_LIB_DIR} -Wl,-rpath,@executable_path LIBS += -framework libavcodec \ -framework libavformat \ -framework libavutil \ From 300e17e13572258ee89013043570c25e9ae556ba Mon Sep 17 00:00:00 2001 From: James Ballard Date: Tue, 14 Jan 2025 15:49:48 -0800 Subject: [PATCH 3/4] Whoops --- CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro | 10 +++++----- SampleViewer/SampleViewer.pro | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro b/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro index 6574e3642b..13b5361961 100644 --- a/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro +++ b/CppSamples/Layers/PlayAKmlTour/PlayAKmlTour.pro @@ -70,11 +70,11 @@ ios { -framework libavutil \ -framework libswresample \ -framework libswscale - ffmpeg.files = $$(QTDIR)/lib/ffmpeg/libavcodec.framework \ - $$(QTDIR)/lib/ffmpeg/libavformat.framework \ - $$(QTDIR)/lib/ffmpeg/libavutil.framework \ - $$(QTDIR)/lib/ffmpeg/libswresample.framework \ - $$(QTDIR)/lib/ffmpeg/libswscale.framework + ffmpeg.files = $${FFMPEG_LIB_DIR}/libavcodec.framework \ + $${FFMPEG_LIB_DIR}/libavformat.framework \ + $${FFMPEG_LIB_DIR}/libavutil.framework \ + $${FFMPEG_LIB_DIR}/libswresample.framework \ + $${FFMPEG_LIB_DIR}/libswscale.framework ffmpeg.path = Frameworks QMAKE_BUNDLE_DATA += ffmpeg } diff --git a/SampleViewer/SampleViewer.pro b/SampleViewer/SampleViewer.pro index e58e00b341..679a453b40 100644 --- a/SampleViewer/SampleViewer.pro +++ b/SampleViewer/SampleViewer.pro @@ -259,11 +259,11 @@ ios { -framework libavutil \ -framework libswresample \ -framework libswscale - ffmpeg.files = $$(QTDIR)/lib/ffmpeg/libavcodec.framework \ - $$(QTDIR)/lib/ffmpeg/libavformat.framework \ - $$(QTDIR)/lib/ffmpeg/libavutil.framework \ - $$(QTDIR)/lib/ffmpeg/libswresample.framework \ - $$(QTDIR)/lib/ffmpeg/libswscale.framework + ffmpeg.files = $${FFMPEG_LIB_DIR}/libavcodec.framework \ + $${FFMPEG_LIB_DIR}/libavformat.framework \ + $${FFMPEG_LIB_DIR}/libavutil.framework \ + $${FFMPEG_LIB_DIR}/libswresample.framework \ + $${FFMPEG_LIB_DIR}/libswscale.framework ffmpeg.path = Frameworks QMAKE_BUNDLE_DATA += ffmpeg From dc5848c6105d71488d01f14a86d92c3563cb54cc Mon Sep 17 00:00:00 2001 From: James Ballard Date: Wed, 15 Jan 2025 14:58:26 -0800 Subject: [PATCH 4/4] Do not apply the workaround for internal Esri iOS builds. We have our own version of this workaround for all internal iOS builds. --- SampleViewer/SampleViewer.pro | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/SampleViewer/SampleViewer.pro b/SampleViewer/SampleViewer.pro index 679a453b40..4cef622899 100644 --- a/SampleViewer/SampleViewer.pro +++ b/SampleViewer/SampleViewer.pro @@ -120,6 +120,27 @@ exists($$PWD/../../../DevBuildCpp.pri) { ios { PLATFORM = "iOS" + + # workaround for https://bugreports.qt.io/browse/QTBUG-129651 + # ArcGIS Maps SDK for Qt adds 'QMAKE_RPATHDIR = @executable_path/Frameworks' + # and ffmpeg frameworks have embedded '@rpath/Frameworks' path. + # so in order for them to be found, we need to add @executable_path to the + # search path. + FFMPEG_LIB_DIR = $$absolute_path($$replace(QMAKE_QMAKE, "qmake6", "../../ios/lib/ffmpeg")) + FFMPEG_LIB_DIR = $$absolute_path($$replace(FFMPEG_LIB_DIR, "qmake", "../../ios/lib/ffmpeg")) + QMAKE_LFLAGS += -F$${FFMPEG_LIB_DIR} -Wl,-rpath,@executable_path + LIBS += -framework libavcodec \ + -framework libavformat \ + -framework libavutil \ + -framework libswresample \ + -framework libswscale + ffmpeg.files = $${FFMPEG_LIB_DIR}/libavcodec.framework \ + $${FFMPEG_LIB_DIR}/libavformat.framework \ + $${FFMPEG_LIB_DIR}/libavutil.framework \ + $${FFMPEG_LIB_DIR}/libswresample.framework \ + $${FFMPEG_LIB_DIR}/libswscale.framework + ffmpeg.path = Frameworks + QMAKE_BUNDLE_DATA += ffmpeg } DEFINES += BUILD_FROM_SETUP @@ -246,27 +267,6 @@ android { } ios { - # workaround for https://bugreports.qt.io/browse/QTBUG-129651 - # ArcGIS Maps SDK for Qt adds 'QMAKE_RPATHDIR = @executable_path/Frameworks' - # and ffmpeg frameworks have embedded '@rpath/Frameworks' path. - # so in order for them to be found, we need to add @executable_path to the - # search path. - FFMPEG_LIB_DIR = $$absolute_path($$replace(QMAKE_QMAKE, "qmake6", "../../ios/lib/ffmpeg")) - FFMPEG_LIB_DIR = $$absolute_path($$replace(FFMPEG_LIB_DIR, "qmake", "../../ios/lib/ffmpeg")) - QMAKE_LFLAGS += -F$${FFMPEG_LIB_DIR} -Wl,-rpath,@executable_path - LIBS += -framework libavcodec \ - -framework libavformat \ - -framework libavutil \ - -framework libswresample \ - -framework libswscale - ffmpeg.files = $${FFMPEG_LIB_DIR}/libavcodec.framework \ - $${FFMPEG_LIB_DIR}/libavformat.framework \ - $${FFMPEG_LIB_DIR}/libavutil.framework \ - $${FFMPEG_LIB_DIR}/libswresample.framework \ - $${FFMPEG_LIB_DIR}/libswscale.framework - ffmpeg.path = Frameworks - QMAKE_BUNDLE_DATA += ffmpeg - ios_icon.files = $$files($$PWD/iOS/Images.xcassets/AppIcon.appiconset/iOS_*.png) QMAKE_BUNDLE_DATA += ios_icon