目前關于ios qt的開發資料比較少,這里整理了幾個比較重要的開發要點,基于MacOS14 + Xcode15 + Qt15.5 + cmake + iphone真機。
- cmake報錯,報錯信息如下
CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (message):
Library not found: MobileCoreServices
Call Stack (most recent call first):
/Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:263
(_qt5_Core_process_prl_file)
/Users/user/Qt/5.15.5/ios/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
CMakeLists.txt:28 (find_package)
解決方法:添加cmake參數
-DCMAKE_FIND_ROOT_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_SYSTEM_NAME=iOS
-DCMAKE_OSX_SYSROOT=iphoneos
-DCMAKE_OSX_ARCHITECTURES=arm64
并在CMakeLists.txt中添加
if(IOS)target_link_options(${user_project_target_name} PRIVATE "-Wl,-e,_qt_main_wrapper")
endif()
參考來源:https://bugreports.qt.io/browse/QTCREATORBUG-26121
- 找不到openssl,報錯如下
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in thesystem variable OPENSSL_ROOT_DIR (missing: OPENSSL_INCLUDE_DIR)
實測設置OPENSSL_ROOT_DIR無效,這里可以手動指定相應的cmake變量,在FindOpenSSL.cmake做相應的修改。
FIND_PATH(OPENSSL_INCLUDE_DIRNAMESopenssl/ssl.hPATH_SUFFIXES"include"HINTS${_OPENSSL_INCLUDEDIR}${_OPENSSL_ROOT_HINTS_AND_PATHS}PATH_SUFFIXESinclude
)# add for ios
IF(IOS AND NOT OPENSSL_INCLUDE_DIR)set (OPENSSL_INCLUDE_DIR "/usr/local/opt/opensslios@1.1/include")set (SSL_LIBRARY "/usr/local/opt/opensslios@1.1/lib/libssl.a")set (CRYPTO_LIBRARY "/usr/local/opt/opensslios@1.1/lib/libcrypto.a")list(APPEND OPENSSL_LIBRARIES ${CRYPTO_LIBRARY} ${SSL_LIBRARY})
ENDIF()
- 打開.pro項目文件報錯,無法展開項目文件樹
failed to parse default search paths from compiler output
解決方法:在qmake構建步驟添加額外參數
-early QMAKE_DEFAULT_LIBDIRS=$(xcrun -show-sdk-path)/usr/lib
參與來源:https://bugreports.qt.io/browse/QTBUG-117225
- 設置AppIcon無效,解決方法:1)在Xcode中將xcassets文件添加到Build Phases中的Copy Bundle Resources中;2)也可以在cmake如下添加:
set_target_properties(${MODULE_NAME} PROPERTIES RESOURCE "xxx.xcassets")