diff options
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | ios/framework/Info.plist | 2 | ||||
-rwxr-xr-x | platform/ios/scripts/package.sh | 229 | ||||
-rwxr-xr-x | platform/ios/scripts/run.sh | 14 |
4 files changed, 155 insertions, 97 deletions
@@ -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" \ |