2

我对 Mac OSX 应用程序包有疑问。如果我想运行我的应用程序包,则不会发生任何事情(双击myApp.app)。

我可以./myApp.app/Contents/MacOS/myApp毫无问题地通过执行来运行应用程序。

目录结构:

myApp.app/
    Contents/
        Info.plist
        PkgInfo
        Resources/
        Frameworks/
        MacOS/
            myApp

我的Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleExecutable</key>
    <string>myApp</string>
    <key>CFBundleIconFile</key>
    <string>icon</string>
    <key>CFBundleIdentifier</key>
    <string>com.whatever.test</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>${PRODUCT_NAME}</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0.0</string>
    <key>CFBundleSignature</key>
    <string>com.whatever.test</string>
    <key>CFBundleVersion</key>
    <string>1.0.0</string>
    <key>LSMinimumSystemVersion</key>
    <string>${MACOSX_DEPLOYMENT_TARGET}</string>
    <key>NSHumanReadableCopyright</key>
    <string>Copyright © 2014. All rights reserved.</string>
</dict>
</plist>

编辑:

Console.app 结果:

08.02.14 16:30:45,041 com.apple.launchd.peruser.501[1077]: (com.whatever.test.72544[20350]) Job failed to exec(3) for weird reason: 13
08.02.14 16:30:45,043 Finder[1094]: 8837325: Attempting to SIGCONT to pid #20350 failed, with errno=#3, or the process failed to actually start
08.02.14 16:30:45,046 Dock[1091]: no information back from LS about running process LSASN:{hi=0x0;lo=0x168168}
4

3 回答 3

0

鉴于您缺少_CodeSignature目录,我认为您的代码没有正确签名。因此GateKeeper可能会阻止代码运行。

你有两个选择:

  • 代码签署您的代码。
  • Control单击应用程序包,然后选择Open- 它会绕过代码签名检查。
于 2014-02-08T15:28:59.457 回答
0

这一行:

08.02.14 16:30:45,041 com.apple.launchd.peruser.501[1077]: (com.whatever.test.72544[20350]) Job failed to exec(3) for weird reason: 13

Permission Denied根据此手册页,我认为您有问题:

https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/intro.2.html

于 2014-02-08T15:42:02.897 回答
0

这是一个工作目录问题。getcwd在执行“myApp.app”时使用会给出/

我通过使用捆绑目录而不是修复它getcwd

#include <CoreFoundation/CoreFoundation.h>

std::string getBundleDir()
{
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
    char path[PATH_MAX];
    if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX))
        return "";

    CFRelease(resourcesURL);

    chdir(path);

    return path;
}
于 2014-02-08T17:13:08.890 回答