Problems with Open-Source Downloads read and

Mac deployment (clang) : @BUNDLEIDENTIFIER@ in Info.plist replaced with com.yourcompany

  • Hi,

    I am developing on MacOSX 10.8 with Clang x86 64bit, with Qt 5.2.1 (and 5.2.0 before that).

    Here is my problem : in my .app, in Info.plist, the key CFBundleIdentifier equals com.yourcompany.MyApp. It is a problem because I want to deploy my application, and I want to replace com.yourcompany by my own value.

    I have looked for a solution, and I found that normally, this value is set by setting QMAKE_TARGET_BUNDLE_PREFIX in the .pro ( ).
    Unfortunately, after looking into Qt's code, I realized that this solution was only available when compiling with pbuilder : when using Clang, "@BUNDLEIDENTIFIER@" is replaced automatically with com.yourcompany, and the value of QMAKE_TARGET_BUNDLE_PREFIX is not read.

    Qt/5.2.1/Src/qtbase/qmake/generators/mac/pbuilder_pbx.cpp :

    QString bundlePrefix = project->first("QMAKE_TARGET_BUNDLE_PREFIX").toQString();
    if (bundlePrefix.isEmpty())
    bundlePrefix = "com.yourcompany";
    plist_in_text = plist_in_text.replace("@BUNDLEIDENTIFIER@", bundlePrefix + "." + QLatin1String("${PRODUCT_NAME:rfc1034identifier}"));

    Qt/5.2.1/Src/qtbase/qmake/generators/unix/unixmake2.cpp :

    QString bundleIdentifier = "com.yourcompany." + var("QMAKE_BUNDLE");
    if (bundleIdentifier.endsWith(".app"))
    t << "@$(DEL_FILE) " << info_plist_out << "\n\t"
    << "@sed ";
    foreach (const ProString &arg, commonSedArgs)
    t << arg;
    t << "-e "s,@ICON@," << icon.section(Option::dir_sep, -1) << ",g" "
    << "-e "s,@BUNDLEIDENTIFIER@," << bundleIdentifier << ",g" "

    For now, the only solutions I found are :

    1. make my own Info.plist, but it would be complicated if it is just to change one key...
    2. replace manually the default value. That is the solution that I chose, because I use a bash script to deploy my application by creating a .pkg file. This way, I just have to do :

    @sed -i '' -e 's/com.yourcompany/com.MyCompany/g'

    I could keep going like this, but I came on this forum because I think that it deserved to be mentioned somewhere, and in case someone has a better solution. I didn't report a bug, because I am not sure that it is one : it has already been reported but only fixed for the pbuilder compilation, so maybe there is a reason why it is not done for Clang.

    I hope this will be useful for other people who might have the same problem.

    If you know a better solution, please tell me !

    Thanks ! :)


    EDIT : with Qt 5.2.0, the CFBundleIdentifier key equals "@BUNDLEIDENTIFIER@", and is not replaced with com.yourcompany anymore. This was fixed in 5.2.1 : now it is replaced with com.yourcompany again.

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    I can't really comment on why it hasn't been fixed for both however a fix for that is in progress

  • Hi and thank you for your answer :)

    Is it possible to follow the progress of fixes ? It would be helpful to know when they are available.

    Thanks !


  • Lifetime Qt Champion

    If a bug report has been opened then the bug report itself, and/or the related submissions :)

  • Ok thank you, I will look if I find a bug report about it :)

  • Lifetime Qt Champion

    There's currently no bug report attached to this one

  • Ok, thanks ! I just posted a comment on the bug report I talked about.

  • The problem is fixed with Qt 5.3 RC !!

    Qt/5.3/Src/qtbase/qmake/generators/unix/unixmake2.cpp :

    QString bundlePrefix = project->first("QMAKE_TARGET_BUNDLE_PREFIX").toQString();
    if (bundlePrefix.isEmpty())
    bundlePrefix = "com.yourcompany.";
    QString bundleIdentifier = bundlePrefix + var("QMAKE_BUNDLE");


    t << "-e "s,@ICON@," << icon.section(Option::dir_sep, -1) << ",g" "
    << "-e "s,@BUNDLEIDENTIFIER@," << bundleIdentifier << ",g" "

    The only thing is that you must put a "." at the end of QMAKE_TARGET_BUNDLE_PREFIX, which is not the case with pbuilder...

  • Lifetime Qt Champion

    Good catch, a fix for that is under review

  • Hi,
    i've got custom .plist file in my app...

    with 5.3.1 i got following error while compiling app for iOS

    CFBundleIdentifier '@BUNDLEIDENTIFIER@' contains illegal character '@'

    The same app was compiled with 5.3.0 without any errors. For now i've set CFBundleIdentifier with my company string and it works ok.


  • Lifetime Qt Champion

    How does your plist look like ?

  • It was the default one from /ios/mkspecs/macx-ios-clang/, plus i've added two additional keys at the end

    @<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
    <plist version="1.0">
    <string>Created by Qt/QMake</string>
    <string>This file was generated by Qt/QMake.</string>

  • Lifetime Qt Champion

    At what stage do you get that error ?

  • I've created now new project just for test purposes.
    The only thing that i've done now was copying default plist file and adding

    QMAKE_INFO_PLIST = my.plist in .pro file.

    The error appears at following stage :

    ProcessProductPackaging /Applications/
    cd /Users/Robert/WORK/development/QT/projects/build-Err-iphoneos_clang_Qt_5_3_1_for_iOS-Debug
    export PATH="/Applications/"
    builtin-productPackagingUtility /Applications/ -entitlements -format xml -o /Users/Robert/WORK/development/QT/projects/build-Err-iphoneos_clang_Qt_5_3_1_for_iOS-Debug/
    (null): error: CFBundleIdentifier '@BUNDLEIDENTIFIER@' contains illegal character '@'
    invalid bundle identifier '@BUNDLEIDENTIFIER@'

  • Lifetime Qt Champion

    I would say that you where lucky before. AFAIK these are placeholder values meant to be replaced with something sensible or if nothing is given, removed.

Log in to reply