ACCES-Mathieu's Forum Posts

  • Ok I uploaded it via wetransfer but the link is not supposed to last more than a week.

  • Ok I just translated it and edited it so that all personal infos and passwords were removed.

    PLEASE let me know if I forgot to delete any kind of connection info.

    https://www.construct.net/en/tutorials/sign-notarize-nwjs-export-mac-2735

    Warning this tutorial is raw copy-paste of a .doc file so the formatting is real poor.

    I can't upload the zip file with all the needed scripts because they have unsupported extensions. How can I do that TheRealDannyyy

    Oh and BTW TheRealDannyyy you are allowed to edit this tutorial if you want to.

  • Hi MoonMonky,

    feel lucky that I read this because you didn't tagged me and I'm not always checking forum posts.

    I just made a quick test-sign with my signing method and it worked.

    Unfortunately, the signing method kinda evolved since this message with the help of a real developer. And even if some files are still used, NWsign.sh for example is not used anymore. I'll try to find some time to retrace what has changed in the process.

    cheers,

    M

  • Hi Construct. I know that you're pushing to convert your users to use C3 runtime, but some of us are still using C2 runtime in C3 for the maintenance and updates of their old products.

    In these circumstances, we need to use C3 as it was initially created, so can you explain me why you removed "Wrap" and "Align" options from the right-clic menu in your latest versions ? I know that "Wrap" still works because you have a keyboard shortcut for it, but there are no more "Align" possibilities for me now.

    Tagged:

  • It's FSecure FSAFE. It was blocking c2runtime.js

  • Indeed, it worked.

    Thanks for the pro-tip, Danny.

  • Hi Launcher team !

    When I'm trying to apply the NWJS release build update (v0.51.1), the installation fails and I have a message saying :

    Code 15

    Failed to delete old source folder!

    (Update process has been cancelled.)

    Any idea what I should do to complete the update please ?

    Thank you.

    Mat

  • Danny this is simply incredible. Thanks for this piece of art which will allow me to use C2 runtimes after Scirra blocks it in july.

    I've got some old projects that simply can not be transformed to C3 standards (old plugins) and keeping them accessible is a very important thing for me.

  • Thanks a lot of providing this info!

    I feel like this would be better off as a tutorial. It would reach a lot more people and you'd have several options to simplify it even further. I'll link to it if you decide to create it.

    Hi TheRealDannyyy

    I wish I had time to create a complete tutorial, but it'll be complicated, especially considering the time I lost to figure how to do this. Moreover, Apple's constant attempts to complicate their authorizations could make this procedure quickly obsolete.

    Nonetheless, I will consider doing this once the task list is complete.

  • The percentage of MacOS users on steam is so low ... in my opinion it's not worth publishing a MacOS version and taking the trouble.

    Who's talking about Steam ? NWJS is not only steam oriented, it concerns anybody wishing to distribute apps on Mac, Linux and Windows.

    And even if the user base is low, this thread helped me a lot in the early days of building desktop apps, that's why I want to contribute in any way possible.

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Guys, I thought I'd share with you the best signing and notarizing method for MacOS, since it's now the only way to distribute your apps on Mac.

    I found it right here https://github.com/nwjs/nw.js/issues/7117#issuecomment-581738908.

    You have to create a NWsign.sh file that contains this code :

    #!/usr/bin/env node
    
    const APP = "path/to/your/app.app";
    const IDENTITY = "identity of Developer ID cert";
    
    /****************************************************************************/
    
    console.log("### finding things to sign");
    
    const fs = require('fs');
    const child_process = require('child_process');
    
    const items = [];
    
    const frameworksDir = `${APP}/Contents/Frameworks/nwjs Framework.framework`;
    
    let currentVersionDir;
    for (const dir of fs.readdirSync(`${frameworksDir}/Versions`)) {
     if (fs.statSync(`${frameworksDir}/Versions/${dir}`).isDirectory) {
     currentVersionDir = `${frameworksDir}/Versions/${dir}`;
     break;
     }
    }
    if (!currentVersionDir) {
     console.error(`couldn't find "${frameworksDir}/Versions/[version]"`);
     process.exit(1);
    }
    for (const file of fs.readdirSync(`${currentVersionDir}`)) {
     if (file.endsWith('.dylib')) {
     items.push(`${currentVersionDir}/${file}`);
     }
    }
    for (const file of fs.readdirSync(`${currentVersionDir}/Helpers`)) {
     if (/^[a-z0-9_]*$/.test(file) || file.endsWith('.app')) {
     items.push(`${currentVersionDir}/Helpers/${file}`);
     }
    }
    for (const file of fs.readdirSync(`${currentVersionDir}/Libraries`)) {
     if (file.endsWith('.dylib')) {
     items.push(`${currentVersionDir}/Libraries/${file}`);
     }
    }
    for (const file of fs.readdirSync(`${currentVersionDir}/XPCServices`)) {
     if (file.endsWith('.xpc')) {
     items.push(`${currentVersionDir}/XPCServices/${file}`);
     }
    }
    items.push(frameworksDir);
    
    /****************************************************************************/
    
    console.log("");
    console.log("### signing");
    
    function exec(cmd) {
     console.log(cmd);
     const result = child_process.spawnSync(cmd, {shell: true, stdio: 'inherit'});
     if (result.status !== 0) {
     console.log(`Command failed with status ${result.status}`);
     if (result.error) console.log(result.error);
     process.exit(1);
     }
    }
    
    for (const item of items) {
     exec(`codesign --verbose --force --deep --strict --options runtime --timestamp --sign "${IDENTITY}" --entitlements neededToRun.entitlements "${item}"`);
    }
    
    exec(`codesign --verbose --force --deep --strict --options runtime --timestamp --sign "${IDENTITY}" --entitlements neededToRun.entitlements "${APP}"`);
    
    /****************************************************************************/
    
    console.log("");
    console.log("### verifying signature");
    
    exec(`codesign --verify -vvvv "${APP}"`);

    You just have to change the two first const

    1. with your app's path

    2. with the Developer ID Application of your developer.apple.com account. (you have to have this certificate installed in your mac keychain.)

    Then create another file :

    <?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>com.apple.security.automation.apple-events</key>
     <true/>
     <key>com.apple.security.cs.allow-dyld-environment-variables</key>
     <true/>
     <key>com.apple.security.cs.allow-jit</key>
     <true/>
     <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
     <true/>
     <key>com.apple.security.cs.disable-executable-page-protection</key>
     <true/>
     <key>com.apple.security.cs.disable-library-validation</key>
     <true/>
     </dict>
    </plist>

    Place it in the same folder and name it "neededToRun.entitlements"

    Once it's ready, go in the terminal and launch the NWsign.sh command.

    And VOILÀ your app is now signed and ready to notarize.

    If you need further help (on notarization for example), feel free to ask.

    Cheers guys !

  • Hi guys.

    Considering that Construct 2 and the C2 runtime will not be supported next year, we will have no choice but using the C3 runtime. I chose to continue using C2 runtime because the "exported game won't work" alert could be disabled with it, but it still is not the case with the C3 runtime.

    We are aware about the features that we will not be allowed to use when running the file:/// protocol.

    But if these features are not important in our projects, it has to be possible to unblock it, as it was possible on Construct2. https://www.construct.net/en/forum/construct-2/how-do-i-18/remove-warning-quotexported-81632

    What can I do now to run my html5 export when embedded on tablets ?

    Cheers.

    M

  • This might help ?

    Hello.

    Excuse me for the delay, but what is "This" ?

    Thanks !

  • Hi guys. Today I managed to notarize an app made with Construct. I went through Gatekeeper so I guess we have good news here !

  • As far as I'm aware, any MacOS app at all can be notarized. It's like adding a digital signature - it doesn't matter what's in the app or what it's made of, it's just adding a (cryptographic) "verified" stamp.

    Well, notarization is not that simple. That's why I was asking here if anyone has already succeeded in notarizing a Construct app.

    Even codesigning an app created by Construct is everything but easy. It took me a lot of time and researches to finally do it.