mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
iOS CI (#1722)
* iOS CI * g2o hard-coded path * bump ios version * Fixed opencv 4.10.0 build on docker resolute
This commit is contained in:
114
.github/workflows/ios.yml
vendored
Normal file
114
.github/workflows/ios.yml
vendored
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
name: iOS
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths: &ios_paths
|
||||||
|
- '.github/workflows/ios.yml'
|
||||||
|
- 'app/ios/**'
|
||||||
|
- 'app/android/jni/**'
|
||||||
|
- 'corelib/**'
|
||||||
|
- 'utilite/**'
|
||||||
|
- 'cmake_modules/**'
|
||||||
|
- 'CMakeLists.txt'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
paths: *ios_paths
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Pre-built iOS dependencies (content of app/ios/RTABMapApp/Libraries, generated by install_deps.sh).
|
||||||
|
# Bump this when the dependency set changes (must match the Xcode toolchain below).
|
||||||
|
DEPS_URL: https://github.com/introlab/rtabmap/releases/download/0.23.1/libraries-ios-xcode26.5.zip
|
||||||
|
XCODE_VERSION: '26.5'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: build-ios
|
||||||
|
# macos-26 (Tahoe) ships Xcode 26.x, matching the toolchain used to build the prebuilt libraries.
|
||||||
|
runs-on: macos-26
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Select Xcode ${{ env.XCODE_VERSION }}
|
||||||
|
uses: maxim-lobanov/setup-xcode@v1
|
||||||
|
with:
|
||||||
|
xcode-version: ${{ env.XCODE_VERSION }}
|
||||||
|
|
||||||
|
- name: Versions
|
||||||
|
run: |
|
||||||
|
xcodebuild -version
|
||||||
|
cmake --version || brew install cmake
|
||||||
|
|
||||||
|
- name: Cache prebuilt dependencies archive
|
||||||
|
id: deps-cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: deps.zip
|
||||||
|
# Keyed on the archive URL (release tag + filename), so the cache is
|
||||||
|
# reused until DEPS_URL is bumped, regardless of other workflow edits.
|
||||||
|
key: ${{ runner.os }}-ios-deps-${{ env.DEPS_URL }}
|
||||||
|
|
||||||
|
- name: Download prebuilt dependencies
|
||||||
|
if: steps.deps-cache.outputs.cache-hit != 'true'
|
||||||
|
run: curl -L "$DEPS_URL" -o deps.zip
|
||||||
|
|
||||||
|
- name: Extract dependencies into Libraries
|
||||||
|
run: |
|
||||||
|
set -eux
|
||||||
|
mkdir -p app/ios/RTABMapApp/Libraries
|
||||||
|
rm -rf deps_extract && mkdir -p deps_extract
|
||||||
|
unzip -q deps.zip -d deps_extract
|
||||||
|
# The archive holds the *content* of the Libraries folder (include/ lib/ share/),
|
||||||
|
# but tolerate an extra top-level Libraries/ wrapper just in case.
|
||||||
|
if [ -d deps_extract/Libraries ]; then
|
||||||
|
SRC=deps_extract/Libraries
|
||||||
|
else
|
||||||
|
SRC=deps_extract
|
||||||
|
fi
|
||||||
|
cp -R "$SRC"/. app/ios/RTABMapApp/Libraries/
|
||||||
|
test -d app/ios/RTABMapApp/Libraries/include
|
||||||
|
test -d app/ios/RTABMapApp/Libraries/lib
|
||||||
|
|
||||||
|
- name: Build rtabmap core (third-party deps are skipped, already provided by the archive)
|
||||||
|
working-directory: app/ios/RTABMapApp
|
||||||
|
run: ./install_deps.sh
|
||||||
|
|
||||||
|
- name: Build RTABMapApp
|
||||||
|
run: |
|
||||||
|
xcodebuild \
|
||||||
|
-project app/ios/RTABMapApp.xcodeproj \
|
||||||
|
-scheme RTABMapApp \
|
||||||
|
-configuration Release \
|
||||||
|
-sdk iphoneos \
|
||||||
|
-destination 'generic/platform=iOS' \
|
||||||
|
-derivedDataPath build \
|
||||||
|
CODE_SIGNING_ALLOWED=NO \
|
||||||
|
CODE_SIGNING_REQUIRED=NO \
|
||||||
|
CODE_SIGN_IDENTITY="" \
|
||||||
|
DEVELOPMENT_TEAM="" \
|
||||||
|
build
|
||||||
|
|
||||||
|
- name: Package app (unsigned .ipa)
|
||||||
|
run: |
|
||||||
|
set -eux
|
||||||
|
APP_DIR="build/Build/Products/Release-iphoneos"
|
||||||
|
rm -rf Payload && mkdir Payload
|
||||||
|
cp -R "$APP_DIR/RTABMapApp.app" Payload/
|
||||||
|
# Unsigned .ipa: not installable as-is, but ready for later (re)signing.
|
||||||
|
zip -q -r RTABMapApp-unsigned.ipa Payload
|
||||||
|
|
||||||
|
- name: Upload app artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: RTABMapApp-ios-unsigned
|
||||||
|
path: RTABMapApp-unsigned.ipa
|
||||||
|
compression-level: 0
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: ${{ github.event_name == 'pull_request' && 1 || 90 }}
|
||||||
@@ -1065,7 +1065,7 @@
|
|||||||
"$(PROJECT_DIR)/RTABMapApp/Libraries/share/OpenCV/3rdparty/lib",
|
"$(PROJECT_DIR)/RTABMapApp/Libraries/share/OpenCV/3rdparty/lib",
|
||||||
"$(PROJECT_DIR)/RTABMapApp/Libraries/lib/opencv4/3rdparty",
|
"$(PROJECT_DIR)/RTABMapApp/Libraries/lib/opencv4/3rdparty",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 0.22.0;
|
MARKETING_VERSION = 0.23.7;
|
||||||
OTHER_CFLAGS = "";
|
OTHER_CFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.introlab.rtabmap;
|
PRODUCT_BUNDLE_IDENTIFIER = com.introlab.rtabmap;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
@@ -1125,7 +1125,7 @@
|
|||||||
"$(PROJECT_DIR)/RTABMapApp/Libraries/share/OpenCV/3rdparty/lib",
|
"$(PROJECT_DIR)/RTABMapApp/Libraries/share/OpenCV/3rdparty/lib",
|
||||||
"$(PROJECT_DIR)/RTABMapApp/Libraries/lib/opencv4/3rdparty",
|
"$(PROJECT_DIR)/RTABMapApp/Libraries/lib/opencv4/3rdparty",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 0.22.0;
|
MARKETING_VERSION = 0.23.7;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
OTHER_CFLAGS = "";
|
OTHER_CFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.introlab.rtabmap;
|
PRODUCT_BUNDLE_IDENTIFIER = com.introlab.rtabmap;
|
||||||
|
|||||||
@@ -175,6 +175,18 @@ cd $pwd
|
|||||||
#rm -rf g2o
|
#rm -rf g2o
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# g2o's installed CMake config hard-codes the absolute build-time prefix of its
|
||||||
|
# external dependencies (e.g. suitesparse) in INTERFACE_INCLUDE_DIRECTORIES. That
|
||||||
|
# path doesn't exist when the prebuilt Libraries archive is unpacked on another
|
||||||
|
# machine (CI), breaking find_package(g2o) with "includes non-existent path".
|
||||||
|
# Rewrite those absolute paths to be relocatable (relative to the config file).
|
||||||
|
# Run unconditionally (outside the build guard above) so it also fixes the prebuilt
|
||||||
|
# archive in CI, where the g2o build step is skipped.
|
||||||
|
find "$prefix/lib" -path '*/cmake/g2o/*.cmake' -print0 | while IFS= read -r -d '' f
|
||||||
|
do
|
||||||
|
sed -i '' -E 's#[^";]*/Libraries#${CMAKE_CURRENT_LIST_DIR}/../../..#g' "$f"
|
||||||
|
done
|
||||||
|
|
||||||
# VTK
|
# VTK
|
||||||
if [ ! -e $prefix/lib/vtk.framework ]
|
if [ ! -e $prefix/lib/vtk.framework ]
|
||||||
then
|
then
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then echo "Installing zed-open-cap
|
|||||||
RUN git clone --branch 4.10.0 https://github.com/opencv/opencv.git && \
|
RUN git clone --branch 4.10.0 https://github.com/opencv/opencv.git && \
|
||||||
git clone --branch 4.10.0 https://github.com/opencv/opencv_contrib.git && \
|
git clone --branch 4.10.0 https://github.com/opencv/opencv_contrib.git && \
|
||||||
cd opencv && \
|
cd opencv && \
|
||||||
|
# FFmpeg 7/8 compatibility (Ubuntu 26.04): avcodec_close / av_stream_get_side_data removed
|
||||||
|
git -c user.email=docker@build -c user.name=docker cherry-pick -x 90c444abd387ffa70b2e72a34922903a2f0f4f5a 443d0ae63fad6dfd8c485d609203db16c8bd0ec3 && \
|
||||||
mkdir build && \
|
mkdir build && \
|
||||||
cd build && \
|
cd build && \
|
||||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TBB=ON -DWITH_ADE=OFF -DWITH_OPENMP=ON -DBUILD_opencv_python3=OFF -DBUILD_opencv_python_bindings_generator=OFF -DBUILD_opencv_python_tests=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DOPENCV_ENABLE_NONFREE=ON -DOPENCV_EXTRA_MODULES_PATH=/root/opencv_contrib/modules .. && \
|
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TBB=ON -DWITH_ADE=OFF -DWITH_OPENMP=ON -DBUILD_opencv_python3=OFF -DBUILD_opencv_python_bindings_generator=OFF -DBUILD_opencv_python_tests=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DOPENCV_ENABLE_NONFREE=ON -DOPENCV_EXTRA_MODULES_PATH=/root/opencv_contrib/modules .. && \
|
||||||
|
|||||||
Reference in New Issue
Block a user