diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2016-01-21 16:03:53 -0800 |
---|---|---|
committer | Minh Nguyễn <mxn@1ec5.org> | 2016-01-22 14:45:57 -0800 |
commit | 7338db692d0140b8c02b14656948bb4d193edb21 (patch) | |
tree | c0cb384fb997aa6fcef8e7588d8badc988b39e83 /platform | |
parent | f986417f5c68ae0429537b340576f8002af1c49a (diff) | |
download | qtlocation-mapboxgl-7338db692d0140b8c02b14656948bb4d193edb21.tar.gz |
[ios] Refactored build scripts
package.sh now recognizes several environment variables through make that influence the build settings and targets. Info.plist variables are substituted with the correct values in both the static and dynamic frameworks.
Fixes #3656.
Diffstat (limited to 'platform')
-rwxr-xr-x | platform/ios/scripts/package.sh | 229 | ||||
-rwxr-xr-x | platform/ios/scripts/run.sh | 14 |
2 files changed, 150 insertions, 93 deletions
diff --git a/platform/ios/scripts/package.sh b/platform/ios/scripts/package.sh index 0fda64da89..b46fb479bc 100755 --- a/platform/ios/scripts/package.sh +++ b/platform/ios/scripts/package.sh @@ -8,18 +8,17 @@ NAME=Mapbox OUTPUT=build/ios/pkg LIBUV_VERSION=1.7.5 -if [[ ${#} -eq 0 ]]; then # e.g. "make ipackage" - BUILDTYPE="Release" - BUILD_FOR_DEVICE=true - GCC_GENERATE_DEBUGGING_SYMBOLS="YES" -elif [[ ${1} == "sim" ]]; then # e.g. "make ipackage-sim" - BUILDTYPE="Debug" - BUILD_FOR_DEVICE=false - GCC_GENERATE_DEBUGGING_SYMBOLS="YES" -else # e.g. "make ipackage-strip" - BUILDTYPE="Release" - BUILD_FOR_DEVICE=true - GCC_GENERATE_DEBUGGING_SYMBOLS="NO" +BUILDTYPE=${BUILDTYPE:-Release} +BUILD_FOR_DEVICE=${BUILD_DEVICE:-true} +ENABLE_BITCODE=${BITCODE:-YES} +GCC_GENERATE_DEBUGGING_SYMBOLS=${SYMBOLS:-YES} + +BUILD_DYNAMIC=true +BUILD_STATIC=true +if [[ ${FORMAT} == "static" ]]; then + BUILD_DYNAMIC=false +elif [[ ${FORMAT} == "dynamic" ]]; then + BUILD_STATIC=false fi SDK=iphonesimulator @@ -28,14 +27,20 @@ if [[ ${BUILD_FOR_DEVICE} == true ]]; then fi IOS_SDK_VERSION=`xcrun --sdk ${SDK} --show-sdk-version` +echo "Configuring ${FORMAT:-dynamic and static} ${BUILDTYPE} framework for ${SDK}; symbols: ${GCC_GENERATE_DEBUGGING_SYMBOLS}; Bitcode: ${ENABLE_BITCODE}" + function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } function finish { >&2 echo -en "\033[0m"; } trap finish EXIT rm -rf ${OUTPUT} -mkdir -p "${OUTPUT}"/static -mkdir -p "${OUTPUT}"/dynamic +if [[ ${BUILD_STATIC} == true ]]; then + mkdir -p "${OUTPUT}"/static +fi +if [[ ${BUILD_DYNAMIC} == true ]]; then + mkdir -p "${OUTPUT}"/dynamic +fi step "Recording library version…" @@ -53,119 +58,157 @@ export BUILDTYPE=${BUILDTYPE:-Release} export HOST=ios make Xcode/ios -PROJ_VERSION=${TRAVIS_JOB_NUMBER:-${BITRISE_BUILD_NUMBER:-0}} +PROJ_VERSION=$(git rev-list --count HEAD) if [[ "${BUILD_FOR_DEVICE}" == true ]]; then - step "Building intermediate static libraries for iOS devices (build ${PROJ_VERSION})…" - xcodebuild -sdk iphoneos${IOS_SDK_VERSION} \ - ARCHS="arm64 armv7 armv7s" \ + if [[ ${BUILD_STATIC} == true ]]; then + step "Building intermediate static libraries for iOS devices (build ${PROJ_VERSION})…" + xcodebuild -sdk iphoneos${IOS_SDK_VERSION} \ + ARCHS="arm64 armv7 armv7s" \ + ONLY_ACTIVE_ARCH=NO \ + GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ + ENABLE_BITCODE=${ENABLE_BITCODE} \ + DEPLOYMENT_POSTPROCESSING=YES \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_IDENTITY= \ + -project ./build/ios-all/gyp/mbgl.xcodeproj \ + -configuration ${BUILDTYPE} \ + -target everything \ + -jobs ${JOBS} + fi + + if [[ ${BUILD_DYNAMIC} == true ]]; then + step "Building dynamic framework for iOS devices (build ${PROJ_VERSION})…" + xcodebuild -sdk iphoneos${IOS_SDK_VERSION} \ + ARCHS="arm64 armv7 armv7s" \ + ONLY_ACTIVE_ARCH=NO \ + GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ + ENABLE_BITCODE=${ENABLE_BITCODE} \ + DEPLOYMENT_POSTPROCESSING=YES \ + CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ + CODE_SIGNING_REQUIRED=NO \ + CODE_SIGN_IDENTITY= \ + -project ./build/ios-all/gyp/ios.xcodeproj \ + -configuration ${BUILDTYPE} \ + -target iossdk \ + -jobs ${JOBS} + fi +fi + +if [[ ${BUILD_STATIC} == true ]]; then + step "Building intermediate static libraries for iOS Simulator (build ${PROJ_VERSION})…" + xcodebuild -sdk iphonesimulator${IOS_SDK_VERSION} \ + ARCHS="x86_64 i386" \ ONLY_ACTIVE_ARCH=NO \ GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ - ENABLE_BITCODE=NO \ - DEPLOYMENT_POSTPROCESSING=YES \ -project ./build/ios-all/gyp/mbgl.xcodeproj \ -configuration ${BUILDTYPE} \ -target everything \ -jobs ${JOBS} - - step "Building dynamic framework for iOS devices (build ${PROJ_VERSION})…" - xcodebuild -sdk iphoneos${IOS_SDK_VERSION} \ - ARCHS="arm64 armv7 armv7s" \ +fi + +if [[ ${BUILD_DYNAMIC} == true ]]; then + step "Building dynamic framework for iOS Simulator (build ${PROJ_VERSION})…" + xcodebuild -sdk iphonesimulator${IOS_SDK_VERSION} \ + ARCHS="x86_64 i386" \ ONLY_ACTIVE_ARCH=NO \ GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ - ENABLE_BITCODE=YES \ - DEPLOYMENT_POSTPROCESSING=YES \ + ENABLE_BITCODE=${ENABLE_BITCODE} \ CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ - CODE_SIGNING_REQUIRED=NO \ - CODE_SIGN_IDENTITY= \ -project ./build/ios-all/gyp/ios.xcodeproj \ -configuration ${BUILDTYPE} \ -target iossdk \ -jobs ${JOBS} fi -step "Building intermediate static libraries for iOS Simulator (build ${PROJ_VERSION})…" -xcodebuild -sdk iphonesimulator${IOS_SDK_VERSION} \ - ARCHS="x86_64 i386" \ - ONLY_ACTIVE_ARCH=NO \ - GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ - -project ./build/ios-all/gyp/mbgl.xcodeproj \ - -configuration ${BUILDTYPE} \ - -target everything \ - -jobs ${JOBS} - -step "Building dynamic framework for iOS Simulator (build ${PROJ_VERSION})…" -xcodebuild -sdk iphonesimulator${IOS_SDK_VERSION} \ - ARCHS="x86_64 i386" \ - ONLY_ACTIVE_ARCH=NO \ - GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ - ENABLE_BITCODE=YES \ - CURRENT_PROJECT_VERSION=${PROJ_VERSION} \ - -project ./build/ios-all/gyp/ios.xcodeproj \ - -configuration ${BUILDTYPE} \ - -target iossdk \ - -jobs ${JOBS} - LIBS=(core.a platform-ios.a asset-fs.a http-nsurl.a) # https://medium.com/@syshen/create-an-ios-universal-framework-148eb130a46c if [[ "${BUILD_FOR_DEVICE}" == true ]]; then - step "Assembling static framework for iOS Simulator and devices…" - mkdir -p ${OUTPUT}/static/${NAME}.framework - libtool -static -no_warning_for_no_symbols \ - `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libuv.a` \ - `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libgeojsonvt.a` \ - -o ${OUTPUT}/static/${NAME}.framework/${NAME} \ - ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphoneos/libmbgl-} \ - ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphonesimulator/libmbgl-} - - step "Copying dynamic framework into place for iOS devices" - cp -r \ - gyp/build/${BUILDTYPE}-iphoneos/${NAME}.framework \ - ${OUTPUT}/dynamic/ + if [[ ${BUILD_STATIC} == true ]]; then + step "Assembling static framework for iOS Simulator and devices…" + mkdir -p ${OUTPUT}/static/${NAME}.framework + libtool -static -no_warning_for_no_symbols \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libuv.a` \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libgeojsonvt.a` \ + -o ${OUTPUT}/static/${NAME}.framework/${NAME} \ + ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphoneos/libmbgl-} \ + ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphonesimulator/libmbgl-} + fi - step "Merging simulator dynamic library into device dynamic library…" - lipo \ - gyp/build/${BUILDTYPE}-iphoneos/${NAME}.framework/${NAME} \ - gyp/build/${BUILDTYPE}-iphonesimulator/${NAME}.framework/${NAME} \ - -create -output ${OUTPUT}/dynamic/${NAME}.framework/${NAME} | echo + if [[ ${BUILD_DYNAMIC} == true ]]; then + step "Copying dynamic framework into place for iOS devices" + cp -r \ + gyp/build/${BUILDTYPE}-iphoneos/${NAME}.framework \ + ${OUTPUT}/dynamic/ + + step "Merging simulator dynamic library into device dynamic library…" + lipo \ + gyp/build/${BUILDTYPE}-iphoneos/${NAME}.framework/${NAME} \ + gyp/build/${BUILDTYPE}-iphonesimulator/${NAME}.framework/${NAME} \ + -create -output ${OUTPUT}/dynamic/${NAME}.framework/${NAME} | echo + fi else - step "Assembling static library for iOS Simulator…" - mkdir -p ${OUTPUT}/static/${NAME}.framework - libtool -static -no_warning_for_no_symbols \ - `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libuv.a` \ - `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libgeojsonvt.a` \ - -o ${OUTPUT}/static/${NAME}.framework/${NAME} \ - ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphonesimulator/libmbgl-} + if [[ ${BUILD_STATIC} == true ]]; then + step "Assembling static library for iOS Simulator…" + mkdir -p ${OUTPUT}/static/${NAME}.framework + libtool -static -no_warning_for_no_symbols \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libuv.a` \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libgeojsonvt.a` \ + -o ${OUTPUT}/static/${NAME}.framework/${NAME} \ + ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphonesimulator/libmbgl-} + fi - step "Copying dynamic framework into place for iOS Simulator…" - cp -r \ - gyp/build/${BUILDTYPE}-iphonesimulator/${NAME}.framework \ - ${OUTPUT}/dynamic/${NAME}.framework + if [[ ${BUILD_DYNAMIC} == true ]]; then + step "Copying dynamic framework into place for iOS Simulator…" + cp -r \ + gyp/build/${BUILDTYPE}-iphonesimulator/${NAME}.framework \ + ${OUTPUT}/dynamic/${NAME}.framework + fi fi if [[ "${GCC_GENERATE_DEBUGGING_SYMBOLS}" == false ]]; then step "Stripping binaries…" - strip -Sx "${OUTPUT}/static/${NAME}.framework/${NAME}" - strip -Sx "${OUTPUT}/dynamic/${NAME}.framework/${NAME}" + if [[ ${BUILD_STATIC} == true ]]; then + strip -Sx "${OUTPUT}/static/${NAME}.framework/${NAME}" + fi + if [[ ${BUILD_DYNAMIC} == true ]]; then + strip -Sx "${OUTPUT}/dynamic/${NAME}.framework/${NAME}" + fi fi -stat "${OUTPUT}/static/${NAME}.framework" -stat "${OUTPUT}/dynamic/${NAME}.framework" +if [[ ${BUILD_STATIC} == true ]]; then + stat "${OUTPUT}/static/${NAME}.framework" +fi +if [[ ${BUILD_DYNAMIC} == true ]]; then + stat "${OUTPUT}/dynamic/${NAME}.framework" +fi -step "Copying static library headers…" -mkdir -p "${OUTPUT}/static/${NAME}.framework/Headers" -cp -pv include/mbgl/{darwin,ios}/*.h "${OUTPUT}/static/${NAME}.framework/Headers" +if [[ ${BUILD_STATIC} == true ]]; then + step "Copying static library headers…" + mkdir -p "${OUTPUT}/static/${NAME}.framework/Headers" + cp -pv include/mbgl/{darwin,ios}/*.h "${OUTPUT}/static/${NAME}.framework/Headers" +fi step "Copying library resources…" +SHORT_VERSION=$( git tag -l ios-v* | sed 's/^ios-v//' | sort -r | sed -n '1p' ) cp -pv LICENSE.md "${OUTPUT}" cp -rv ios/app/Settings.bundle "${OUTPUT}" -cp -pv platform/ios/resources/* "${OUTPUT}/static/${NAME}.framework" -cp -pv ios/framework/Info.plist "${OUTPUT}/static/${NAME}.framework/Info.plist" -perl -pi -e "s/(?<=<string>)0(?=<\/string>)/${PROJ_VERSION}/g" "${OUTPUT}/static/${NAME}.framework/Info.plist" -mkdir "${OUTPUT}/static/${NAME}.framework/Modules" -cp -pv ios/framework/modulemap "${OUTPUT}/static/${NAME}.framework/Modules/module.modulemap" -cp -pv ios/framework/strip-frameworks.sh "${OUTPUT}/dynamic/${NAME}.framework/strip-frameworks.sh" +if [[ ${BUILD_STATIC} == true ]]; then + cp -pv platform/ios/resources/* "${OUTPUT}/static/${NAME}.framework" + cp -pv ios/framework/Info.plist "${OUTPUT}/static/${NAME}.framework/Info.plist" + plutil -replace CFBundleExecutable -string ${NAME} "${OUTPUT}/static/${NAME}.framework/Info.plist" + plutil -replace CFBundleIdentifier -string com.mapbox.sdk.ios "${OUTPUT}/static/${NAME}.framework/Info.plist" + plutil -replace CFBundleName -string ${NAME} "${OUTPUT}/static/${NAME}.framework/Info.plist" + plutil -replace CFBundleShortVersionString -string "${SHORT_VERSION}" "${OUTPUT}/static/${NAME}.framework/Info.plist" + plutil -replace CFBundleVersion -string ${PROJ_VERSION} "${OUTPUT}/static/${NAME}.framework/Info.plist" + mkdir "${OUTPUT}/static/${NAME}.framework/Modules" + cp -pv ios/framework/modulemap "${OUTPUT}/static/${NAME}.framework/Modules/module.modulemap" +fi +if [[ ${BUILD_DYNAMIC} == true ]]; then + plutil -replace CFBundleShortVersionString -string "${SHORT_VERSION}" "${OUTPUT}/dynamic/${NAME}.framework/Info.plist" + cp -pv ios/framework/strip-frameworks.sh "${OUTPUT}/dynamic/${NAME}.framework/strip-frameworks.sh" +fi step "Generating API documentation…" if [ -z `which jazzy` ]; then @@ -177,7 +220,7 @@ if [ -z `which jazzy` ]; then fi fi DOCS_OUTPUT="${OUTPUT}/documentation" -DOCS_VERSION=$( git tag | grep ^ios | sed 's/^ios-//' | sort -r | grep -v '\-rc.' | grep -v '\-pre.' | sed -n '1p' | sed 's/^v//' ) +DOCS_VERSION=$( git tag -l ios-v* | sed 's/^ios-//' | sort -r | grep -v '\-rc.' | grep -v '\-pre.' | sed -n '1p' | sed 's/^v//' ) rm -rf /tmp/mbgl mkdir -p /tmp/mbgl/ README=/tmp/mbgl/README.md diff --git a/platform/ios/scripts/run.sh b/platform/ios/scripts/run.sh index 02699f29b6..44c21e7562 100755 --- a/platform/ios/scripts/run.sh +++ b/platform/ios/scripts/run.sh @@ -31,6 +31,20 @@ if [[ ${PUBLISH_PLATFORM} = 'ios' ]]; then mapbox_time "deploy_ios_stripped" ./platform/ios/scripts/publish.sh "${PUBLISH_VERSION}" + + # dynamic, with debug symbols + mapbox_time "package_ios_dynamic" \ + make iframework + + mapbox_time "deploy_ios_dynamic" + ./platform/ios/scripts/publish.sh "${PUBLISH_VERSION}" symbols-dynamic + + # dynamic, without debug symbols + mapbox_time "package_ios_dynamic_stripped" \ + make iframework SYMBOLS=NO + + mapbox_time "deploy_ios_dynamic_stripped" + ./platform/ios/scripts/publish.sh "${PUBLISH_VERSION}" dynamic else # build & test iOS mapbox_time "run_ios_tests" \ |