summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2016-01-21 16:03:53 -0800
committerMinh Nguyễn <mxn@1ec5.org>2016-01-22 14:45:57 -0800
commit7338db692d0140b8c02b14656948bb4d193edb21 (patch)
treec0cb384fb997aa6fcef8e7588d8badc988b39e83
parentf986417f5c68ae0429537b340576f8002af1c49a (diff)
downloadqtlocation-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.
-rw-r--r--Makefile7
-rw-r--r--ios/framework/Info.plist2
-rwxr-xr-xplatform/ios/scripts/package.sh229
-rwxr-xr-xplatform/ios/scripts/run.sh14
4 files changed, 155 insertions, 97 deletions
diff --git a/Makefile b/Makefile
index c0d72ed04f..f2d13785c9 100644
--- a/Makefile
+++ b/Makefile
@@ -49,9 +49,10 @@ ibench: export XCODEBUILD_ARGS += -sdk iphoneos ARCHS="arm64"
ibench: ; $(RUN) HOST=ios Xcode/ios-bench
.PHONY: ipackage ipackage-strip ipackage-sim itest
-ipackage: Xcode/ios ; @JOBS=$(JOBS) ./platform/ios/scripts/package.sh
-ipackage-strip: Xcode/ios ; @JOBS=$(JOBS) ./platform/ios/scripts/package.sh strip
-ipackage-sim: Xcode/ios ; @JOBS=$(JOBS) ./platform/ios/scripts/package.sh sim
+ipackage: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=$(FORMAT) BUILD_DEVICE=$(BUILD_DEVICE) SYMBOLS=$(SYMBOLS) ./platform/ios/scripts/package.sh
+ipackage-strip: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=$(FORMAT) BUILD_DEVICE=$(BUILD_DEVICE) SYMBOLS=NO ./platform/ios/scripts/package.sh
+ipackage-sim: Xcode/ios ; @JOBS=$(JOBS) BUILDTYPE=Debug BITCODE=$(BITCODE) FORMAT=dynamic BUILD_DEVICE=false SYMBOLS=$(SYMBOLS) ./platform/ios/scripts/package.sh
+iframework: Xcode/ios ; @JOBS=$(JOBS) BITCODE=$(BITCODE) FORMAT=dynamic BUILD_DEVICE=$(BUILD_DEVICE) SYMBOLS=$(SYMBOLS) ./platform/ios/scripts/package.sh
itest: ipackage-sim ; ./platform/ios/scripts/test.sh
.PHONY: xpackage xpackage-strip xctest
diff --git a/ios/framework/Info.plist b/ios/framework/Info.plist
index 7cb6e1dfd3..3bf250da27 100644
--- a/ios/framework/Info.plist
+++ b/ios/framework/Info.plist
@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
- <string>0</string>
+ <string>0.0.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
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" \