Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jan 13 08:28
    mrcarlberg updated the wiki
  • Jan 11 16:44
    mrcarlberg updated the wiki
  • Jan 11 15:02
    ezeaguerre starred cappuccino/cappuccino
  • Jan 10 06:17
    daboe01 commented #3000
  • Jan 07 23:00
    michaelbach synchronize #2998
  • Jan 07 21:56
    mrcarlberg commented #2998
  • Jan 07 21:03
    cappbot commented #3016
  • Jan 07 20:54
    daboe01 commented #3000
  • Jan 07 20:51
    daboe01 commented #3000
  • Jan 07 20:49
    daboe01 synchronize #3000
  • Jan 07 20:38
    cappbot labeled #3016
  • Jan 07 20:38
    cappbot milestoned #3016
  • Jan 07 20:28
    daboe01 commented #2575
  • Jan 07 20:27
    daboe01 opened #3016
  • Jan 07 18:34
    daboe01 commented #2967
  • Jan 07 16:12
    michaelbach commented #2998
  • Jan 07 15:20
    mrcarlberg commented #2998
  • Jan 07 15:14
    mrcarlberg commented #3013
  • Jan 07 07:36
    daboe01 commented #3013
  • Jan 07 07:34
    daboe01 commented #3013
Martin Carlberg
@mrcarlberg
Skärmavbild 2021-11-11 kl. 22.09.48.png
Michael Bach
@michaelbach
@mrcarlberg "Group folders": they would be nice, but they are lost on rebuilding of xyz.xcodeproj, e.g. after Reset the project in XcodeCapp, right?
David Richardson
@enquora

@mrcarlberg I had come to the same conclusions over the last few years. The best approach available now has been to use Xcode’s sidebar groups to provide useful organization. It works, but one must be careful to not select ‘Group with folder’. I had noticed #2963 when it was posted, but failed to grasp its significance. fwiw, there has long been a Ruby gem to synchronize Xcode’s virtual folder with the on-disk structure: https://github.com/venmo/synx

An analagous automated tool would nicely complement #2963

Martin Carlberg
@mrcarlberg
@michaelbach Yes, XcodeCapp will destroy the project file. We don't use XcodeCapp because of this problem. We run nib2cib and objj2objcskeleton manually or by a script
@enquora An automated tool to keep the Info.plist file synchronized with the file structure should be nice for #2963.
Michael Bach
@michaelbach
@mrcarlberg Ah, thank you.
David Richardson
@enquora

Anyone able to describe in detail how an app built for release bootstraps itself? I’m in the process of hardening ours, starting with prohibiting everything, then specifically allowing the pathnames required by the app.

Strangely, one of the first URL requests is for main.j, which isn’t a file in the Release build artifacts, despite having a reference in index.html. Having trouble understanding where the request for main.j originates - although I’m guessing it’s a fallback built into the Objective-J runtime file.

Insight welcomed. It will also help in process of defining the offline operation requirements.

Martin Carlberg
@mrcarlberg
@enquora This is the generic bootstrap steps (the simplified version :smiley: ). If you have built for release all the source files are already compiled and stored together for each bundle in one file. See below:
  1. index.html is read and parsed by the browser
  2. The file Frameworks/Objective-J/Objective-J.js is read and executed. It will setup the Objective-J runtime.
  3. The file ./Info.plist is read and parsed to get stuff like path to main file (usually main.j), is it prebuilt etc...
  4. The main file is read.
  5. The file is parsed to create an AST tree of the code by the Objective-J compiler if not yet compiled. If it is pre built each source file in the bundle is stored together precompiled in one file. Each file will then be extracted from the common file instead of loaded separately. For example Frameworks/Foundation.sj etc.
  6. If the file does any @import then read each of the imported files.
  7. For each imported file continue on step 5 and building a dependent tree of all source files.
  8. When the last files without any imports are read and if needed parsed by the Objective-J compiler. Usually Foundation/CPObject.j and some other similar classes. The load system now starts execute each source file from the leafs of the recursive tree that is built when loading all the imported files above. If the source files are not pre built the compiler will generate the compiled javascript code from the previously generated AST tree before executing it.
  9. The dependency tree is walked back down to the main file.
  10. When the main file is executed as the last file the load system will check if there exists a main function. The function is called.
Martin Carlberg
@mrcarlberg
And this description is now available on our wiki with a new link under the new In depths header from the main wiki page :smile: : https://github.com/cappuccino/cappuccino/wiki/Bootstrap
https://github.com/cappuccino/cappuccino/wiki
Martin Carlberg
@mrcarlberg
@enquora Also, to answer your question about the main.j file. The Cappuccino runtime and load system will not access main.j separately if your app is prebuilt, only the common <Your App>.sj file.
daboe01
@daboe01
@mrcarlberg thank your for this explanation. very much appreciated.
David Richardson
@enquora
@mrcarlberg Just what is needed - thanks. Particularly helpful for setting up service workers to run offline.
David Richardson
@enquora
A peripheral question, but what is the purpose of the Build/AppName.build folder? It’s obvously part of the build process, but it isn’t erased afterwards and doesn’t seem to be part a deployment cycle. Is it used for diffing/incremental compilation?
Martin Carlberg
@mrcarlberg
@enquora Build/AppName.build is, as you say, used in the build process. It stores all the compiled source files before the common source file is being created. It is not removed after the build process as it is also used the next time you build to only recompile the files that are changed. You can remove it by doing jake clean or just remove from command line with rm or from the FInder.
David Richardson
@enquora

@mrcarlberg Do you know if the Jakefile syntax is sufficiently close to that of a Makefile for a make linter to be usable?

I’ve just had a modification to the standard Jakefile in a project which unintentionally introduced invalid characters. Running jake produced very unhelpful feedback — it complained the problem was in the Cappuccino’s narwhal bootstrap.js file :-(

Perhaps I hadn’t had my morning coffee, but it took an hour for the eureka moment when I realized the problem was in the Jakefile itself.

Martin Carlberg
@mrcarlberg
@enquora The Jakefile syntax is very different from a Makefile so I don't think that is possible. Sometimes the error messages can be very "unhelpful". A good thing is that they are much better i the Node version :smiley:
Gustavo "Mucho Love"
@mucholove
Hello! I haven't touched my computer for the last few weeks and am getting an error—probably because my CAPP_BUILD file is external. Here's the deal:
gtavares@Gustavos-MacBook-Air Browser % ./gtktest 
/Users/gtavares/Developer/cappuccino/node_modules/@objj/runtime/ lib/objective-j.js:3946
                        throw new Error("Could not load file at " + aURL + (compilingFileUrl ? " when compiling " + compilingFileUrl : "") + "\nwith includeURLs: " + StaticResource.includeURLs());
                        ^

    Error: Could not load file at Foundation/Foundation.j when compiling file:/Users/gtavares/Desktop/Browser/gtktest
with includeURLs:     /Users/gtavares/Desktop/Browser/Frameworks/,/Users/gtavares/Developer/cappuccino/dist/objective-j/Frameworks/
    at completed (/Users/gtavares/Developer/cappuccino/node_modules/@objj/runtime/lib/objective-j.js:3946:31)
I have my Cappuccino inside /Users/gtavares/Developer/cappuccino/ and my $CAPP_BUILD set to /Users/gtavares/Developer/cappuccino/Build
This is running a shell script with the header #!/usr/bin/env objj
Gustavo "Mucho Love"
@mucholove
As an example—when I compile it without the import line—it goes pretty far, but of course it misses the first few categories I extended from Foundation
gtavares@Gustavos-MacBook-Air Browser % ./gtktest 

@implementation CPBundle (IsEqual)
                ^
ERROR line 62 in file:/Users/gtavares/Desktop/Browser/gtktest:62: Class CPBundle not found 

/Users/gtavares/Developer/cappuccino/node_modules/@objj/runtime/lib/objective-j.js:3702
                throw "Compilation error";
                ^
Compilation error
(Use `node --trace-uncaught ...` to show where the exception was thrown)

Node.js v17.0.1
David Richardson
@enquora

@mucholove Returned here to a project after a month’s absence to find nib2cib refusing to compile xibs that previously worked. Only changes to the machine are a handful of new commits to Cappuccino (including my fixes for nib2cib), and the 12.0.1 update to Monterey.

Has your system also moved from macOS 12.0 to 12.0.1 in your downtime interval?

In my case, the problem seems to be permissions problems at the ibtool phase — despite that command working just fine when run manually in the terminal. Don’t have time just now to sort it out though — reverted to using a trusty High Sierra installation.

Gustavo "Mucho Love"
@mucholove
@enquora — yes, I am on Monterey now
OMG. So nutty
David Richardson
@enquora
which version? 12.0.1, or initial release?
Gustavo "Mucho Love"
@mucholove
12.0.1
David Richardson
@enquora
It was a security update - I’m wondering if it didn’t include significant tightening of permissions.
Gustavo "Mucho Love"
@mucholove
Wow—well, let me see if I can get it to run
The thing I'm confused about is this: includeURLs: /Users/gtavares/Desktop/Browser/Frameworks/,/Users/gtavares/Developer/cappuccino/dist/objective-j/Frameworks/
The URL where the frameworks are located dosen't include: /Users/gtavares/Developer/cappuccino/Build/
David Richardson
@enquora
I won’t have time to look into this further until the weekend, but are your paths and project all on the same volume and container? No symlinks, for instance
No symlinks off-volume
Gustavo "Mucho Love"
@mucholove
One volume, no containter—not running Docker or similar
David Richardson
@enquora
And to confirm, none of the handful of changes in Cappuccino in October and November pulled in?
Gustavo "Mucho Love"
@mucholove
I'm using the Node branch
From the looks of it, Node hasn't been merged with master/main—but I may be wrong
Commit hash: b6310328
David Richardson
@enquora
It’s an independent branch. I’m not using it yet, so don’t remember exactly what changes have occured recently.
Martin Carlberg
@mrcarlberg
@mucholove The includeURLs are the paths to the current working directory /Users/gtavares/Desktop/Browser/gtktest and the current installed version of the Objective-J framework /Users/gtavares/Developer/cappuccino/dist/objective-j/Frameworks. What is missing is the path to the current installed Cappuccino framework /Users/gtavares/Developer/cappuccino/dist/cappuccino/Frameworks. I think this is a bug in the @objj/runtime node module. I will look into why this is happening.
Also, keep in mind that the path to the current Build directory is usually not included in the includeURLs but could be added manually with the environment variable OBJJ_INCLUDE_PATHS
David Richardson
@enquora
@mrcarlberg nib2cib is failing here, whether using narwhal or node. Can confirm it is working for yourself using node?
I presume you’re using your new MacBook Pro, so must be using one of the two versions of Monterey and Xcode 13?
error is Property List error: Unexpected character N at line 1 / JSON error: JSON text did not start with array or object and option to allow fragments not set. around line 1, column 0.
This happens with both with Xcode 13.1 and 13.2.
David Richardson
@enquora
Also, narwhal’s File and System module processes run as root creating permission problems with directories and files. Narwhaljs.org documentation is Spartan — do you know of a simple way to specify the user and group which should be used for system processes?
It appears imagesize needs to be replaced in the node version — it is used by nib2cib if a xib contains images.
Does this seem correct?
Martin Carlberg
@mrcarlberg
@enquora I'm on Monterey running a M1 Max with Xcode 13.1. I have no problems with nib2cib or Xcode 13.1. I'm using the latest Node version.
@enquora The easiest way to solve Narwhal problems is a move to the Node version :smiley:
David Richardson
@enquora
It’s a bad look simply capping legacy version at Big Sur, but I began wondering this morning if that is our best policy.
Doesn’t address the not-yet-available imagesize required if a xib contains an image :-) For the immediate need it can be loaded programmatically, and will be in the final version. I’m wondering what else isn’t quite there, though?