| #!/bin/bash |
| # Copyright (c) Meta Platforms, Inc. and affiliates. |
| # All rights reserved. |
| # |
| # This source code is licensed under the BSD-style license found in the |
| # LICENSE file in the root directory of this source tree. |
| |
| set -e |
| |
| APP_PATH="examples/demo-apps/apple_ios/ExecuTorchDemo/ExecuTorchDemo" |
| MODEL_NAME="mv3" |
| SIMULATOR_NAME="executorch" |
| |
| # If this is set, copy the build artifacts to this directory |
| ARTIFACTS_DIR_NAME="$1" |
| |
| finish() { |
| EXIT_STATUS=$? |
| if xcrun simctl list | grep -q "$SIMULATOR_NAME"; then |
| say "Deleting Simulator" |
| xcrun simctl delete "$SIMULATOR_NAME" |
| fi |
| if [ $EXIT_STATUS -eq 0 ]; then |
| say "SUCCEEDED" |
| else |
| say "FAILED" |
| fi |
| exit $EXIT_STATUS |
| } |
| |
| trap finish EXIT |
| |
| say() { |
| echo -e "\033[1m\n\t** $1 **\n\033[0m" |
| } |
| |
| say "Installing CoreML Backend Requirements" |
| |
| ./backends/apple/coreml/scripts/install_requirements.sh |
| |
| say "Installing MPS Backend Requirements" |
| |
| ./backends/apple/mps/install_requirements.sh |
| |
| say "Exporting Models" |
| |
| python3 -m examples.portable.scripts.export --model_name="$MODEL_NAME" --segment_alignment=0x4000 |
| python3 -m examples.apple.coreml.scripts.export --model_name="$MODEL_NAME" |
| python3 -m examples.apple.mps.scripts.mps_example --model_name="$MODEL_NAME" |
| python3 -m examples.xnnpack.aot_compiler --model_name="$MODEL_NAME" --delegate |
| |
| mkdir -p "$APP_PATH/Resources/Models/MobileNet/" |
| mv $MODEL_NAME*.pte "$APP_PATH/Resources/Models/MobileNet/" |
| |
| say "Downloading Labels" |
| |
| curl https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt \ |
| -o "$APP_PATH/Resources/Models/MobileNet/imagenet_classes.txt" |
| |
| say "Creating Simulator" |
| |
| xcrun simctl create "$SIMULATOR_NAME" "iPhone 15" |
| |
| say "Running Tests" |
| |
| xcodebuild test \ |
| -project "$APP_PATH.xcodeproj" \ |
| -scheme MobileNetClassifierTest \ |
| -destination name="$SIMULATOR_NAME" |
| |
| # NB: https://docs.aws.amazon.com/devicefarm/latest/developerguide/test-types-ios-xctest-ui.html |
| say "Package The Test Suite" |
| |
| xcodebuild build-for-testing \ |
| -project "$APP_PATH.xcodeproj" \ |
| -scheme MobileNetClassifierTest \ |
| -destination platform="iOS" \ |
| -allowProvisioningUpdates \ |
| DEVELOPMENT_TEAM=78E7V7QP35 \ |
| CODE_SIGN_STYLE=Manual \ |
| PROVISIONING_PROFILE_SPECIFIER=ExecuTorchDemo \ |
| CODE_SIGN_IDENTITY="iPhone Distribution" |
| |
| # The hack to figure out where the xctest package locates |
| BUILD_DIR=$(xcodebuild -showBuildSettings -project "$APP_PATH.xcodeproj" -json | jq -r ".[0].buildSettings.BUILD_DIR") |
| |
| # Prepare the demo app |
| MODE="Debug" |
| PLATFORM="iphoneos" |
| pushd "${BUILD_DIR}/${MODE}-${PLATFORM}" |
| |
| rm -rf Payload && mkdir Payload |
| MOCK_APP_NAME=ExecuTorchDemo |
| |
| ls -lah |
| cp -r "${MOCK_APP_NAME}.app" Payload && zip -vr "${MOCK_APP_NAME}.ipa" Payload |
| |
| popd |
| |
| # Prepare the test suite |
| pushd "${BUILD_DIR}" |
| |
| ls -lah |
| zip -vr "${MOCK_APP_NAME}.xctestrun.zip" *.xctestrun |
| |
| popd |
| |
| if [[ -n "${ARTIFACTS_DIR_NAME}" ]]; then |
| mkdir -p "${ARTIFACTS_DIR_NAME}" |
| # Prepare all the artifacts to upload |
| cp "${BUILD_DIR}/${MODE}-${PLATFORM}/${MOCK_APP_NAME}.ipa" "${ARTIFACTS_DIR_NAME}/" |
| cp "${BUILD_DIR}/${MOCK_APP_NAME}.xctestrun.zip" "${ARTIFACTS_DIR_NAME}/" |
| |
| ls -lah "${ARTIFACTS_DIR_NAME}/" |
| fi |