diff --git a/.gitignore b/.gitignore index e7e7fbaffef38057741d56ec413c839d3bfd7841..d06a3278a9fa11b7f62fdcab8e696e1fafcac67b 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,9 @@ gstreamer-1.0-android* *.autosave .settings/ +# iOS Generated files +ios/iOSForAppStore-Info.plist + # Generated files moc_* ui_* diff --git a/build_ios.sh b/build_ios.sh new file mode 100755 index 0000000000000000000000000000000000000000..eb5220b099e25cdc6ff93795fd43d49ffc2e5b05 --- /dev/null +++ b/build_ios.sh @@ -0,0 +1,16 @@ +#!/bin/bash +if [ ! -d /Volumes/RAMDisk ] ; then + echo 'RAM Disk not found' + echo 'Only used for App Store builds. It will not work on your computer.' + exit 1 +fi +#-- Set to my local installation +QMAKE=/Applications/Qt/5.5/ios/bin/qmake +#-- Using Travis variables as this will eventually live there +SHADOW_BUILD_DIR=/Volumes/RAMDisk/build-qgroundcontrol-iOS-Release +TRAVIS_BUILD_DIR=/Users/gus/github/work/qgroundcontrol +#-- Build it +mkdir -p ${SHADOW_BUILD_DIR} && +cd ${SHADOW_BUILD_DIR} && +${QMAKE} -r ${TRAVIS_BUILD_DIR}/qgroundcontrol.pro CONFIG+=WarningsAsErrorsOn CONFIG-=debug_and_release CONFIG+=release CONFIG+=ForAppStore && +xcodebuild -configuration Release -xcconfig ${TRAVIS_BUILD_DIR}/ios/qgroundcontrol_appstore.xcconfig diff --git a/ios/iOS-Info.plist b/ios/iOS-Info.plist index 82db8a4b994f85f6633ea07afdca46713df08c2f..315ff57a53ac20cf2a1bf9a80beb60a1e361e2cf 100644 --- a/ios/iOS-Info.plist +++ b/ios/iOS-Info.plist @@ -6,26 +6,24 @@ QGroundControl CFBundleExecutable qgroundcontrol - CFBundleGetInfoString - Created by Qt/QMake + NSHumanReadableCopyright + Open Source Flight Systems GmbH - Internal Build CFBundleIconFile CFBundleIdentifier - org.mavlink.qgroundcontrol + org.QGroundControl.QGCiOS CFBundleName QGroundControl CFBundlePackageType APPL CFBundleShortVersionString - #.#.# + 0.0.0 CFBundleSignature ???? CFBundleVersion - ### + 1 LSRequiresIPhoneOS - NOTE - This file was generated by Qt/QMake. UILaunchStoryboardName QGCLaunchScreen UIRequiresFullScreen diff --git a/ios/iOSForAppStore-Info.plist b/ios/iOSForAppStore-Info-Source.plist similarity index 91% rename from ios/iOSForAppStore-Info.plist rename to ios/iOSForAppStore-Info-Source.plist index 0312e0bbf60b3933b1198586932674747df649a5..3b449300ce42a6d733db09ebb9e19d4a9bd6482e 100644 --- a/ios/iOSForAppStore-Info.plist +++ b/ios/iOSForAppStore-Info-Source.plist @@ -1,48 +1,15 @@ - + CFBundleDisplayName QGroundControl CFBundleExecutable qgroundcontrol - CFBundleGetInfoString - Created by Qt/QMake + NSHumanReadableCopyright + Open Source Flight Systems GmbH CFBundleIconFile - CFBundleIdentifier - com.grubba.qgroundcontrol - CFBundleName - QGroundControl - CFBundlePackageType - APPL - CFBundleShortVersionString - #.#.# - CFBundleSignature - ???? - CFBundleVersion - ### - LSRequiresIPhoneOS - - NOTE - This file was generated by Qt/QMake. - UILaunchStoryboardName - QGCLaunchScreen - UIRequiresFullScreen - - CFBundleInfoDictionaryVersion - 6.0 - ForAppStore - Yes - NSLocationUsageDescription - Ground Station Location - NSLocationWhenInUseUsageDescription - Ground Station Location - UISupportedInterfaceOrientations - - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - CFBundleIcons CFBundlePrimaryIcon @@ -83,5 +50,36 @@ + CFBundleIdentifier + org.QGroundControl.QGCiOS + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + QGroundControl + CFBundlePackageType + APPL + CFBundleShortVersionString + ###VERSION### + CFBundleSignature + ???? + CFBundleVersion + ###BUILD### + ForAppStore + Yes + LSRequiresIPhoneOS + + NSLocationUsageDescription + Ground Station Location + NSLocationWhenInUseUsageDescription + Ground Station Location + UILaunchStoryboardName + QGCLaunchScreen + UIRequiresFullScreen + + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + diff --git a/ios/qgroundcontrol.xcconfig b/ios/qgroundcontrol.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..646c6ddd0b12f321763673538dd9d4aec6502ed6 --- /dev/null +++ b/ios/qgroundcontrol.xcconfig @@ -0,0 +1,17 @@ +CODE_SIGN_IDENTITY = ""; +CODE_SIGNING_REQUIRED = NO; +CLANG_WARN_BOOL_CONVERSION = YES; +CLANG_WARN_CONSTANT_CONVERSION = YES; +CLANG_WARN_EMPTY_BODY = YES; +CLANG_WARN_ENUM_CONVERSION = YES; +CLANG_WARN_INT_CONVERSION = YES; +CLANG_WARN_UNREACHABLE_CODE = YES; +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; +ENABLE_STRICT_OBJC_MSGSEND = YES; +GCC_NO_COMMON_BLOCKS = YES; +GCC_WARN_64_TO_32_BIT_CONVERSION = YES; +GCC_WARN_ABOUT_RETURN_TYPE = YES; +GCC_WARN_UNDECLARED_SELECTOR = YES; +GCC_WARN_UNINITIALIZED_AUTOS = YES; +GCC_WARN_UNUSED_FUNCTION = YES; +GCC_WARN_UNUSED_VARIABLE = YES; diff --git a/ios/qgroundcontrol_appstore.xcconfig b/ios/qgroundcontrol_appstore.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..4ad27bc371f855f88d48a017a9a5a0533a0f9a10 --- /dev/null +++ b/ios/qgroundcontrol_appstore.xcconfig @@ -0,0 +1,17 @@ +CODE_SIGN_IDENTITY = "iPhone Distribution"; +PROVISIONING_PROFILE = 11a5f941-2284-40f1-95ad-50005b648377; +CLANG_WARN_BOOL_CONVERSION = YES; +CLANG_WARN_CONSTANT_CONVERSION = YES; +CLANG_WARN_EMPTY_BODY = YES; +CLANG_WARN_ENUM_CONVERSION = YES; +CLANG_WARN_INT_CONVERSION = YES; +CLANG_WARN_UNREACHABLE_CODE = YES; +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; +ENABLE_STRICT_OBJC_MSGSEND = YES; +GCC_NO_COMMON_BLOCKS = YES; +GCC_WARN_64_TO_32_BIT_CONVERSION = YES; +GCC_WARN_ABOUT_RETURN_TYPE = YES; +GCC_WARN_UNDECLARED_SELECTOR = YES; +GCC_WARN_UNINITIALIZED_AUTOS = YES; +GCC_WARN_UNUSED_FUNCTION = YES; +GCC_WARN_UNUSED_VARIABLE = YES; diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 20e79d2cf2c84d944a136a0ad3babc059865b98a..74b6dc98c1f3e73149888e4adf795b03a4dea4d2 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -117,6 +117,12 @@ iOSBuild { #-- Info.plist (need an "official" one for the App Store) ForAppStore { message(App Store Build) + #-- Create official, versioned Info.plist + APP_STORE = $$system(cd $${BASEDIR} && $${BASEDIR}/tools/update_ios_version.sh $${BASEDIR}/ios/iOSForAppStore-Info-Source.plist $${BASEDIR}/ios/iOSForAppStore-Info.plist) + APP_ERROR = $$find(APP_STORE, "Error") + count(APP_ERROR, 1) { + error("Error building .plist file. 'ForAppStore' builds are only possible through the official build system.") + } QMAKE_INFO_PLIST = $${BASEDIR}/ios/iOSForAppStore-Info.plist OTHER_FILES += $${BASEDIR}/ios/iOSForAppStore-Info.plist } else { diff --git a/tools/update_ios_version.sh b/tools/update_ios_version.sh new file mode 100755 index 0000000000000000000000000000000000000000..3d5b79a7e456bbdf96cc3828f435645460f1e529 --- /dev/null +++ b/tools/update_ios_version.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# this requires `master` in the git tree +# travis-ci branch builds are unable to set the version properly + +PLIST_FILE_SRC=$1 +PLIST_FILE_DST=$2 + +BUILD_CODE=`git rev-list master --first-parent --count` +VERSION_CODE=`git describe --always --tags | sed -e 's/[^0-9.]*\([0-9.]*\).*/\1/'` + +if [ -z "$BUILD_CODE" -o -z "$VERSION_CODE" ]; then + echo "Error: Version and/or build empty." + exit 1 # Cause the build to fail +else + echo "Version: ${VERSION_CODE}" + echo "Build: ${BUILD_CODE}" +fi + +sed -e "s/\###BUILD###/${BUILD_CODE}/" -e "s/\###VERSION###/${VERSION_CODE}/" $PLIST_FILE_SRC > $PLIST_FILE_DST