diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2017-07-05 08:37:27 +0200 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2017-07-05 08:37:27 +0200 |
commit | 14c221fce77ce5041e16db8a40081cbcc54a1902 (patch) | |
tree | e887d5d690893f7fcb5001a926e6f41a9fb06c41 /platform/ios/scripts/validate-framework-zip.sh | |
parent | 60eae41549cec18dfeed5175fe1d6c327060a8de (diff) | |
parent | d2d8a575be2d4f28894c0c1f845cbb464869d97c (diff) | |
download | qtlocation-mapboxgl-14c221fce77ce5041e16db8a40081cbcc54a1902.tar.gz |
Merge branch 'release-ios-v3.6.0-android-v5.1.0'
# Conflicts:
# .travis.yml
# circle.yml
# cmake/core-files.cmake
# include/mbgl/style/function/composite_function.hpp
# platform/android/CHANGELOG.md
# platform/android/MapboxGLAndroidSDK/build.gradle
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MyBearingTracking.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MyLocationTracking.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraChangeDispatcher.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/light/Light.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/light/Position.java
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/light/light.java.ejs
# platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/BitmapUtils.java
# platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LightTest.java
# platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/light.junit.ejs
# platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java
# platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MockLocationEngine.java
# platform/android/dependencies.gradle
# platform/android/src/native_map_view.cpp
# platform/darwin/scripts/generate-style-code.js
# platform/darwin/src/MGLGeometry_Private.h
# platform/darwin/src/MGLLight.h
# platform/darwin/src/MGLLight.mm
# platform/darwin/src/MGLSource.h
# platform/darwin/src/MGLStyle.h
# platform/darwin/src/MGLStyle.mm
# platform/darwin/test/MGLLightTest.mm
# platform/default/default_file_source.cpp
# platform/ios/CHANGELOG.md
# platform/ios/Mapbox-iOS-SDK-symbols.podspec
# platform/ios/Mapbox-iOS-SDK.podspec
# platform/ios/resources/Images.xcassets/default_marker.imageset/default_marker.pdf
# platform/macos/CHANGELOG.md
# scripts/generate-shaders.js
# src/mbgl/layout/symbol_layout.cpp
# src/mbgl/programs/program.hpp
# src/mbgl/programs/symbol_program.hpp
# src/mbgl/programs/uniforms.hpp
# src/mbgl/renderer/frame_history.cpp
# src/mbgl/renderer/paint_property_binder.hpp
# src/mbgl/shaders/line.cpp
# src/mbgl/shaders/line_pattern.cpp
# src/mbgl/shaders/line_sdf.cpp
# src/mbgl/sprite/sprite_atlas.hpp
# src/mbgl/style/layers/line_layer_properties.hpp
# src/mbgl/style/sources/geojson_source.cpp
# src/mbgl/style/style.cpp
# src/mbgl/text/glyph_atlas.hpp
# src/mbgl/tile/geometry_tile.cpp
# src/mbgl/tile/geometry_tile.hpp
# test/style/style.test.cpp
Diffstat (limited to 'platform/ios/scripts/validate-framework-zip.sh')
-rwxr-xr-x | platform/ios/scripts/validate-framework-zip.sh | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/platform/ios/scripts/validate-framework-zip.sh b/platform/ios/scripts/validate-framework-zip.sh new file mode 100755 index 0000000000..2cd1e90ee7 --- /dev/null +++ b/platform/ios/scripts/validate-framework-zip.sh @@ -0,0 +1,131 @@ +#!/usr/bin/env bash +# Created by Cory Dolphin on 03/21/16. +# Copyright (c) 2016 Twitter. All rights reserved. + +# Verifies a zip archive submission of SDKs passes basic static checks for format and contents. +# This test is likely to generate false positives, e.g. even if your SDK passes this, you still must +# test integration of your code fully. + +# Usage: $ ./validate_zip.sh <path to zip> + +set -e + +if [ ! -f "$1" ]; then + printf "No file found at ${1}\n" + printf "Usage: $ ./validate_zip.sh <path to zip>\n"; exit 1; +fi + +function verifyFramework() { + # set -x + local FRAMEWORK_PATH=$1 + local FRAMEWORK_NAME=$(basename $FRAMEWORK_PATH) + local PRODUCT="${FRAMEWORK_NAME%.*}" + local BINARY_PATH="${FRAMEWORK_PATH}/${PRODUCT}" + local HEADER_PATH="${FRAMEWORK_PATH}/Headers" + printf "Found $FRAMEWORK_NAME. Verifying...\n" + + local MODULE_MAP=( $(find $FRAMEWORK_PATH -name "*.modulemap") ) + if [[ -z "$MODULE_MAP" ]]; then + printf "ERROR: No modulemap found in $FRAMEWORK_NAME\n"; + exit 3; + fi + printf "$FRAMEWORK_NAME contains modulemap: ✓\n" + + # Verify there is a modulemap so Swift can use the framework + if grep -q "link" "$MODULE_MAP"; then + printf "$FRAMEWORK_NAME modulemap contains dependent system frameworks ✓\n" + else + printf "Warning: ${FRAMEWORK_NAME} does not list any system library dependencies. Double check all dependent frameworks and libraries are listed. \n"; + fi + + # Verify there is at least one header listed in the module map + if grep -q ".*.h" "$MODULE_MAP"; then + printf "$FRAMEWORK_NAME modulemap contains headers ✓\n"; + else + printf "Error: ${FRAMEWORK_NAME} does not list any headers in the modulemap\n"; + exit 4; + fi + + # Verify there is at least a headers folder + if [[ ! -d "$HEADER_PATH" ]]; then + printf "ERROR: Headers not not found in ${FRAMEWORK_NAME}\n"; + exit 5; + fi + + # Verify the static lib at least has simulator and the two common ARM architectures + local PRESENT_ARCHITECTURES=$( xcrun lipo -info "${BINARY_PATH}" ) + for arch in "armv7" "arm64" "i386" "x86_64"; do + if [[ ! $PRESENT_ARCHITECTURES == *$arch* ]]; then + printf "ERROR: Architecture ${arch} not found in ${FRAMEWORK_NAME}\n"; + exit 6; + fi + done + printf "$FRAMEWORK_NAME contains simulator and device architectures: ✓\n" + + # Verify there are at least some bitcode segments in the rmv7 and arm64 slices + # Note, this is not conclusive, it is possible some symbols are missing the segment + for arch in "armv7" "arm64"; do + local SYMBOLS=$(otool -l -arch "${arch}" "${BINARY_PATH}") + if [[ ! $SYMBOLS == *"LLVM"* ]]; then + printf "ERROR: Bitcode segments not found in ${FRAMEWORK_NAME}. Users will fail to archive their builds \n"; + exit 7; + fi + done + printf "$FRAMEWORK_NAME contains bitcode: ✓\n" + + # Verify there is a plist file + local PLIST_PATH=( $(find $FRAMEWORK_PATH -name Info.plist) ) + if [[ -z "$PLIST_PATH" ]]; then + printf "ERROR: No Info.plist found in $FRAMEWORK_NAME\n" + exit 8; + fi + printf "$FRAMEWORK_NAME contains Info.plist: ✓\n" + + # Verify there is a bundle identifier in Info.plist + # And verify it does not contain any vestigial string templating + local BUNDLE_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${PLIST_PATH}") + if [[ -z "$BUNDLE_NAME" ]]; then + printf "ERROR: Info.plist not found in $FRAMEWORK_NAME or CFBundleIdentifier not set\n"; + exit 9; + elif [[ "$BUNDLE_NAME" == *"$"* ]]; then + printf "ERROR: CFBundleIdentifier is invalid: $BUNDLE_NAME\n"; + exit 10; + else + printf "$FRAMEWORK_NAME has bundle: $BUNDLE_NAME ✓\n" + fi + + # Verify there is a bundle version in the Info.plist + local BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PLIST_PATH}") + if [[ -z "$BUNDLE_VERSION" ]]; then + printf "ERROR: No CFBundleShortVersionString found in $FRAMEWORK_NAME\n"; + exit 11; + else + printf "$FRAMEWORK_NAME has version: $BUNDLE_VERSION ✓\n" + fi + + printf "===========================================\n" + printf "Analyzed $PRODUCT version $BUNDLE_VERSION. \n" + printf "Basic static verifications passed. 🚀🚀🚀 \n" + printf "Please perform final verification testing \n\n" +} + +# Extract the zip archive to a temporary location +TEMP_DIR=$(mktemp -d /tmp/fabric_framework_validation.XXXXX) +printf "Unzipping $(basename "$1") to $TEMP_DIR\n" +unzip "$1" -d "$TEMP_DIR" &> /dev/null + +# Find frameworks and ensure they are at the top level, e.g. NOT nested within a sub directory +printf "Scanning for frameworks...\n" +FRAMEWORKS=( $(find "$TEMP_DIR" -name "*.framework" -maxdepth 1) ) +if [ -z "$FRAMEWORKS" ]; then + printf "ERROR: No frameworks found at the top level within the zip archive."; + exit 2; +fi + +# Verify each framework found individually +for framework in "${FRAMEWORKS[@]}"; do + verifyFramework "$framework" + printf "" +done + +rm -r "$TEMP_DIR" |