diff options
Diffstat (limited to 'tests/manual/ios_assets/CMakeLists.txt')
-rw-r--r-- | tests/manual/ios_assets/CMakeLists.txt | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/tests/manual/ios_assets/CMakeLists.txt b/tests/manual/ios_assets/CMakeLists.txt new file mode 100644 index 0000000000..a9abe52b02 --- /dev/null +++ b/tests/manual/ios_assets/CMakeLists.txt @@ -0,0 +1,114 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(ios_assets LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) + +find_package(Qt6 REQUIRED COMPONENTS Core Gui Test) + +qt_add_executable(tst_manual_ios_assets + main.cpp +) + +set_target_properties(tst_manual_ios_assets PROPERTIES + MACOSX_BUNDLE TRUE +) +target_link_libraries(tst_manual_ios_assets PRIVATE + Qt::Core + Qt::Gui + Qt::Test +) + +# Custom Info.plist +if(IOS) + if(XCODE_VERSION AND XCODE_VERSION VERSION_LESS "14") + set(plist_path "${CMAKE_CURRENT_SOURCE_DIR}/Info.ios.cmake.xcode.13.0.plist") + else() + set(plist_path "${CMAKE_CURRENT_SOURCE_DIR}/Info.ios.cmake.xcode.14.3.plist") + endif() + set_target_properties(tst_manual_ios_assets + PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${plist_path}") +endif() + +# Custom resources +file(GLOB_RECURSE text_files CONFIGURE_DEPENDS "*.txt") +if(text_files) + list(FILTER text_files EXCLUDE REGEX CMakeLists.txt) + target_sources(tst_manual_ios_assets PRIVATE ${text_files}) + # On iOS the 'Resources' prefix is removed by Xcode because on iOS app bundles are shallow, + # so the final location of the text file will be + # tst_manual_ios_assets.app/textFiles/foo.txt + # On macOS the location will be + # tst_manual_ios_assets.app/Contents/Resources/textFiles/foo.txt + set_source_files_properties( + ${text_files} + PROPERTIES MACOSX_PACKAGE_LOCATION Resources/textFiles) +endif() + +# App icons +# https://developer.apple.com/library/archive/qa/qa1686/_index.html +# https://help.apple.com/xcode/mac/current/#/dev10510b1f7 +# https://web.archive.org/web/20180124234409/https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/ +# https://doc.qt.io/qt-6/ios-platform-notes.html#icons +# No need to copy the icons into the bundle manually when using Xcode 13+. +# - rely on Xcode 13 to copy the needed icon files that are specified in the asset catalog (all the +# required ones should be specified manually) +# - rely on Xcode 14 to generate the needed icon files based on the 1024x1024 sized image in the +# asset catalog + +# Asset catalog with images and icons. +if(IOS) + enable_language(OBJCXX) + if(XCODE_VERSION AND XCODE_VERSION VERSION_LESS "14") + set(asset_catalog_path "${CMAKE_CURRENT_SOURCE_DIR}/AssetsXcode13.0.xcassets") + else() + set(asset_catalog_path "${CMAKE_CURRENT_SOURCE_DIR}/AssetsXcode14.3.xcassets") + endif() + target_sources(tst_manual_ios_assets PRIVATE "${asset_catalog_path}") + set_source_files_properties( + ${asset_catalog_path} + PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + + # Make sure asset catalog compilation generates the needed app icons image sizes. + # This might not be needed in a future Qt version where qt_add_executable might do it + # automatically. Unclear how to do it cleanly though, because specifying the option when + # the asset catalog doesn't have an AppIcon set will cause a build failure. + set_target_properties(tst_manual_ios_assets PROPERTIES + XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon) + + target_sources(tst_manual_ios_assets PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/utils.mm") +endif() + +# Set custom launch screen. +# iOS has evolved and provides a few ways to handle this. +# - UILaunchImageFile Info.plist key, introduced in iOS 3.2, supposedly deprecated in iOS 10. +# - UILaunchImages, Info.plist keys, introduced in iOS 7, deprecated in iOS 13 +# - UILaunchStoryboardName, Info.plist key, introduced in iOS 9, not deprecated +# - UILaunchScreen / UILaunchScreens, Info.plist dictionaries, introduced in iOS 14, not +# deprecated +# The first two expect images, the third one expects a storyboard / .xib file. +# The last ones expect a dictionary of keys to configure the launch screen. +# At the moment, UILaunchStoryboardName represents the lower bound of what Qt supports, +# so use it here. +# Reference info +# https://developer.apple.com/documentation/xcode/specifying-your-apps-launch-screen/ +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW24 +# https://developer.apple.com/documentation/uikit/uilocalnotification/1616660-alertlaunchimage?language=objc +# https://developer.apple.com/documentation/bundleresources/information_property_list/uilaunchimages?language=objc +# https://developer.apple.com/documentation/bundleresources/information_property_list/uilaunchstoryboardname?language=objc +# https://developer.apple.com/documentation/bundleresources/information_property_list/uilaunchscreen?language=objc +# https://forum.qt.io/topic/106251/use-launch-images-in-ios-project/4 +# https://codereview.qt-project.org/c/qt/qtdoc/+/100846 +if(IOS) + # Because we're not using the automatically generated Info.plist, it needs to be manually + # modified to have the UILaunchStoryboardName key. + set_target_properties(tst_manual_ios_assets PROPERTIES + QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/CustomLaunchScreen.storyboard") +endif() + +# Flip to TRUE to debug +if(FALSE) + target_compile_definitions(tst_manual_ios_assets PRIVATE DEBUG_APP_DATA_LOCATION=1) +endif() |