CMake 未正确将 CFBundleVersion 和 CFBundleShortVersionString 插入 Info.plist

标签 cmake info.plist

根据documentation ,CMake 应使用 MACOSX_BUNDLE_BUNDLE_VERSIONMACOSX_BUNDLE_SHORT_VERSION_STRING 目标属性的值来填充生成的 中的 CFBundleVersionCFBundleShortVersionString >Info.plist.

这是我的 CMakeLists.txt 示例:

cmake_minimum_required(VERSION 3.12)

project (foo)

set(SOURCES foo.m)
set(HEADERS foo.h)

add_library(foo
    SHARED
    ${SOURCES}
    ${HEADERS}
)

set_target_properties(foo PROPERTIES
    OUTPUT_NAME Foo
    FRAMEWORK TRUE
    FRAMEWORK_VERSION A
    MACOSX_FRAMEWORK_IDENTIFIER test.foo
    MACOSX_BUNDLE_SHORT_VERSION_STRING 1.42.0
    MACOSX_BUNDLE_BUNDLE_VERSION 1.42.0
    MACOSX_RPATH TRUE
    # "current version" in semantic format in Mach-O binary file
    VERSION 1.42.0
    # "compatibility version" in semantic format in Mach-O binary file
    SOVERSION 1.42.0
    PUBLIC_HEADER "${HEADERS}"
    XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym"
)

这是 CMake 生成的 Foo.framework/Resources/Info.plist 的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>Foo</string>
    <key>CFBundleIconFile</key>
    <string></string>
    <key>CFBundleIdentifier</key>
    <string>test.foo</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string></string>
    <key>CFBundleShortVersionString</key>
    <string></string>
    <key>CSResourcesFileMapped</key>
    <true/>
</dict>
</plist>

因此,CFBundleIdentifierCFBundleExecutable 已正确替换,但 CFBundleVersionCFBundleShortVersionString 则不然。我在这里缺少什么?

最佳答案

您应该使用此处记录的另一组选项:https://cmake.org/cmake/help/v3.0/prop_tgt/MACOSX_FRAMEWORK_INFO_PLIST.html

那就是

MACOSX_FRAMEWORK_SHORT_VERSION_STRING
MACOSX_FRAMEWORK_BUNDLE_VERSION

因为在你的情况下它不是一个常规的 bundle ,它是一个框架(即 bundle 中的库)

关于CMake 未正确将 CFBundleVersion 和 CFBundleShortVersionString 插入 Info.plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52298319/

相关文章:

xcode4 - 在 Xcode 4 中预处理 Info.plist

c++ - 如何正确链接到CMake中的库(使用Boehm GC)?

opengl - cmake 不使用 QtOpenGL 链接 libGLU

cmake - 使用 CMake 链接 GLEW

docker - 如何防止每次部署到 bitbucket 时 docker 都编译库?是否有 Bitbucket 管道缓存?

cmake - VTK安装错误找不到libvtkCommonCore-6.3.so.1

ios - iOS 开发中 Info.plist 变量的最佳实践是什么?

MacOS:未捆绑/unix 可执行文件的版本信息

iphone - 如何确保iPod 2G用户不能在iTunes中购买我的游戏?