diff --git a/.gitignore b/.gitignore index 666e8447424d..88e132ce6576 100644 --- a/.gitignore +++ b/.gitignore @@ -198,8 +198,5 @@ lefthook.yml ## metro server logs metro-server-logs.log -## debug build time logs -logs/ - ## available iOS simulators ios_simulators_list.json diff --git a/Makefile b/Makefile index c1fc6ca074c4..18ca317c7834 100644 --- a/Makefile +++ b/Makefile @@ -296,11 +296,8 @@ show-ios-devices: ##@other shows connected ios device and its name # TODO: fix IOS_STATUS_GO_TARGETS to be either amd64 or arm64 when RN is upgraded run-ios-device: export TARGET := ios run-ios-device: export IOS_STATUS_GO_TARGETS := ios/arm64;iossimulator/amd64 -run-ios-device: ##@run iOS app and start it on a connected device by its name -ifndef DEVICE_NAME - $(error Usage: make run-ios-device DEVICE_NAME=your-device-name) -endif - react-native run-ios --device "$(DEVICE_NAME)" +run-ios-device: ##@run iOS app and start it on the first connected iPhone + @scripts/run-ios-device.sh #-------------- # Tests diff --git a/nix/mobile/ios/default.nix b/nix/mobile/ios/default.nix index affb530363cf..ca423f50f172 100644 --- a/nix/mobile/ios/default.nix +++ b/nix/mobile/ios/default.nix @@ -20,8 +20,8 @@ in { buildInputs = with pkgs; [ xcodeWrapper watchman procps flock # used in nix/scripts/node_modules.sh - ios-deploy # used in 'make run-ios-device' xcbeautify # used in 'make run-ios' + libimobiledevice # used in `make run-ios-device` ]; # WARNING: Executes shellHook in reverse order. diff --git a/nix/overlay.nix b/nix/overlay.nix index 63875026fd65..b0029f92f7c4 100644 --- a/nix/overlay.nix +++ b/nix/overlay.nix @@ -26,18 +26,6 @@ in { react-native = callPackage ./deps/react-native { }; }; - # Fix for missing libarclite_macosx.a in Xcode 14.3. - # https://github.com/ios-control/ios-deploy/issues/580 - ios-deploy = super.darwin.ios-deploy.overrideAttrs (old: rec { - version = "1.12.2"; - src = super.fetchFromGitHub { - owner = "ios-control"; - repo = "ios-deploy"; - rev = version; - sha256 = "sha256-TVGC+f+1ow3b93CK3PhIL70le5SZxxb2ug5OkIg8XCA"; - }; - }); - # Clojure's linter receives frequent upgrades, and we want to take advantage # of the latest available rules. clj-kondo = super.clj-kondo.override rec { diff --git a/scripts/run-ios-device.sh b/scripts/run-ios-device.sh new file mode 100755 index 000000000000..77b908d06edc --- /dev/null +++ b/scripts/run-ios-device.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +set -euo pipefail +set -m # needed to access jobs + +GIT_ROOT=$(cd "${BASH_SOURCE%/*}" && git rev-parse --show-toplevel) +XCRUN_DEVICE_INSTALL_LOG_DIR="${GIT_ROOT}/logs/xcrun_device_install_log" +XCRUN_DEVICE_PROCESS_LAUNCH_LOG_DIR="${GIT_ROOT}/logs/xcrun_device_process_launch_log" +XCRUN_DEVICE_PROCESS_RESUME_LOG_DIR="${GIT_ROOT}/logs/xcrun_device_process_resume_log" + +# Install on the connected device +installAndLaunchApp() { + xcrun devicectl device install app --device "${DEVICE_UUID}" "${APP_PATH}" --json-output "${XCRUN_DEVICE_INSTALL_LOG_DIR}" 2>&1 + + # Extract installationURL + INSTALLATION_URL=$(jq -r '.result.installedApplications[0].installationURL' "${XCRUN_DEVICE_INSTALL_LOG_DIR}") + + # launch the app and put it in background + xcrun devicectl device process launch --no-activate --verbose --device "${DEVICE_UUID}" "${INSTALLATION_URL}" --json-output "${XCRUN_DEVICE_PROCESS_LAUNCH_LOG_DIR}" + + # Extract background PID of status app + STATUS_PID=$(jq -r '.result.process.processIdentifier' "${XCRUN_DEVICE_PROCESS_LAUNCH_LOG_DIR}") + "${GIT_ROOT}/scripts/wait-for-metro-port.sh" 2>&1 + + # now that metro is ready, resume the app from background + xcrun devicectl device process resume --device "${DEVICE_UUID}" --pid "${STATUS_PID}" > "${XCRUN_DEVICE_PROCESS_RESUME_LOG_DIR}" 2>&1 +} + +showXcrunLogs() { + cat "${XCRUN_DEVICE_INSTALL_LOG_DIR}" >&2; + cat "${XCRUN_DEVICE_PROCESS_LAUNCH_LOG_DIR}" >&2; + cat "${XCRUN_DEVICE_PROCESS_RESUME_LOG_DIR}" >&2; +} + +# find the first connected iPhone's UUID +DEVICE_UUID=$(idevice_id -l) + +# Check if any device is connected +if [ -z "${DEVICE_UUID}" ]; then + echo "No connected iPhone device detected." + exit 1 +else + echo "Connected iPhone UDID: ${DEVICE_UUID}" +fi + +BUILD_DIR="${GIT_ROOT}/build" + +#iOS build of debug scheme +xcodebuild -workspace "ios/StatusIm.xcworkspace" -configuration Debug -scheme StatusIm -destination id="${DEVICE_UUID}" -derivedDataPath "${BUILD_DIR}" -verbose | xcbeautify + +APP_PATH="${BUILD_DIR}/Build/Products/Debug-iphoneos/StatusIm.app" + +trap showXcrunLogs EXIT ERR INT QUIT +installAndLaunchApp & +exec "${GIT_ROOT}/scripts/run-metro.sh" 2>&1 +