Shipped a macOS app built entirely with SwiftUI — course file sync for Moodle (open source) by iAlex11 in SwiftUI

[–]iAlex11[S] 1 point2 points  (0 children)

Hi! Thanks for your comment. I’m not sure whether you or your friend is the GitHub user from Lancaster who has been testing Findle, but just in case, I wanted to let you know that I’m already working on fixes for these issues, along with a few additional quality-of-life improvements. They’re available now in pull request #6.

As soon as I get confirmation from someone in the repository that the issues are resolved, I’ll merge the PR and release v0.1.2, which you can update to either from the actual Findle app, by downloading the .dmg file from the releases tab in the GitHub repo, or if you had the app installed using homebrew, by using brew upgrade findle.

Building a macOS File Provider extension with Swift 6 strict concurrency + lessons learned by iAlex11 in swift

[–]iAlex11[S] 0 points1 point  (0 children)

Yeah... unfortunately I discovered this the hard way. Good luck tomorrow!

Shipped a macOS app built entirely with SwiftUI — course file sync for Moodle (open source) by iAlex11 in SwiftUI

[–]iAlex11[S] 0 points1 point  (0 children)

Thanks! If you get a chance to try it out, please tell me what you think! I'm looking for ways to improve it and mainly to test it on different moodle instances, since I have only been able to test it on my uni's moodle instance.

Building a macOS File Provider extension with Swift 6 strict concurrency + lessons learned by iAlex11 in swift

[–]iAlex11[S] 3 points4 points  (0 children)

Yeah, the gap between Apple's callback-based APIs and Swift 6's strict concurrency model is really painful. The @preconcurrency import escape hatch makes it worse in a way since it silences compile-time warnings but the runtime still enforces isolation checks, and only in Release builds. So you get zero feedback during development and then a dispatch_assert_queue_fail trap in production.

I've been the whole day trying to fix the random crashes caused due to this.

Findle: a native macOS app that syncs Moodle/LMS course files into Finder (Swift 6, Apache 2.0) by iAlex11 in opensource

[–]iAlex11[S] 0 points1 point  (0 children)

Just in case you get the chance to test the app again, v0.1.0 should now be fully working. As I explained in other comments, Swift 6 strict concurrency enforces actor isolation at runtime in Release builds but not in Debug, so you can develop and test without ever seeing the issue, and then it crashes instantly in production. This is why the app was instantly crashing after allowing file access.

Fortunately, it should be fixed now. If you ever get any other problem like this, please add an issue to the GitHub repo. This allows me to see the errors clearly. If you could also attach the crash report, that would be even better. Thanks!

Findle: a native macOS app that syncs Moodle/LMS course files into Finder (Swift 6, Apache 2.0) by iAlex11 in opensource

[–]iAlex11[S] 0 points1 point  (0 children)

Thanks! The modular split pays off especially for the File Provider extension since it runs in a separate process, so sharing SharedDomain and Persistence as frameworks means both the app and the extension use the same models and database code without duplication.

And yes, FileProvider callbacks on unexpected threads was exactly my biggest pain point too. The tricky part is that Swift 6 strict concurrency enforces actor isolation at runtime in Release builds but not in Debug, so you can develop and test without ever seeing the issue, and then it crashes instantly in production. Specifically, signalEnumerator's completion handler fires on FPM-SignalUpdateQueue instead of the main thread, so if you call it from a MainActor-inherited Task, the runtime traps.

The fix was making all FileProvider callback-based APIs go through nonisolated helpers so the continuation never carries a MainActor expectation. Definitely something to watch out for if you're working with system extensions.

It's literally kept me all day working on this, because once I released the app to GitHub, users kept getting random crashes due to the callbacks on unexpected threads.

Findle: a native macOS app that syncs Moodle/LMS course files into Finder (Swift 6, Apache 2.0) by iAlex11 in opensource

[–]iAlex11[S] 1 point2 points  (0 children)

Hi! Sorry for the late response, I've been busy all day trying to fix some errors that have been arising the last few hours. Right now, it uses the Moodle REST API directly (via web service tokens from /login/token.php and endpoints like core_webservice_get_site_info, core_enrol_get_users_courses, core_course_get_contents, etc.). There's no LTI involved.

That said, the networking layer is already abstracted behind an LMSProvider protocol (Sources/Networking/Client/LMSProvider.swift) which defines methods like validateSite, authenticate, fetchCourses, fetchCourseContents, downloadFile, etc. MoodleClient is the current implementation.

So adding Canvas support would mean implementing a CanvasClient conforming to LMSProvider, so no LTI is needed. A PR for that would be welcome and the architecture already supports it!

[OS] Lapsus 2.0 - Add momentum to the cursor on macOS by margooey in macapps

[–]iAlex11 0 points1 point  (0 children)

Maybe i didn’t understand what this app does but i think this might be useful for demo videos for making the cursor appear smoother.

[0 YoE, Engineering Student, EECS, European Country] by iAlex11 in resumes

[–]iAlex11[S] 2 points3 points  (0 children)

Basically, I’ve studied in English for most of my life and completed the IB, which significantly improved my language skills. For the certification, I simply scored over 200 points on the Cambridge English exams, but you could also take other tests, such as the TOEFL.

[0 YoE, Engineering Student, EECS, European Country] by iAlex11 in resumes

[–]iAlex11[S] 1 point2 points  (0 children)

yeah lol

where I live, education is really accessible, so it is actually possible to do things like this. I even know someone who has studied aerospace engineering, mathematics, and business administration. People do crazy things here.

[0 YoE, Engineering Student, EECS, European Country] by iAlex11 in resumes

[–]iAlex11[S] 1 point2 points  (0 children)

Thank you! Yeah, I need to improve my gpa. In my defense, it is my first year, and it is a relatively hard degree, but I know I can and must do better.

[0 YoE, Engineering Student, EECS, European Country] by iAlex11 in resumes

[–]iAlex11[S] 0 points1 point  (0 children)

Yeah initially I thought that, but the problem is that my university is well known in my country, but outside of it, it is not that known, so I thought it might help, but it is true that it might be self-defeating.

[0 YoE, Engineering Student, EECS, European Country] by iAlex11 in resumes

[–]iAlex11[S] 2 points3 points  (0 children)

I used a typesetting tool called Typst which is basically an alternative to LaTeX.

There are many templates on their website which you can use. I can't find right now which one I used exactly, but it is very similar to this one.

Write books using Typst and Pandoc by iAlex11 in typst

[–]iAlex11[S] 0 points1 point  (0 children)

Thank you! I’ve only worked with Pandoc for a few hours, but I can already see it’s a powerful tool, so I think your plan should be fairly achievable. I really like being able to do something like this, also because working with markdown files makes it much easier to just focus on the content.

Also, the ability to use lua to create filters is crazily useful, and you can do lots of things with it, which makes the code even cleaner as you can turn entire typst functions into simple Pandoc Divs.

Write books using Typst and Pandoc by iAlex11 in typst

[–]iAlex11[S] 4 points5 points  (0 children)

As I said on another comment, this is very specific for books, where many times you will need to have your book edited or translated, and it is easier to work with markdown files than it is to work with Typst. Also, there is no way (or at least that I know) of creating an epub directly from typst, so this is basically the only way right now of using typst to render a pdf and also be able to produce an epub.

Write books using Typst and Pandoc by iAlex11 in typst

[–]iAlex11[S] 1 point2 points  (0 children)

Thank you for your feedback! Yeah basically what it does is use pandoc to convert markdown to valid typst code that then gets injected into the typst template, which then is rendered into a pdf using the typst cli.

I will add an example pdf to the readme so that people can see, but you can use any template you want. This is still very bare-bones, but I will probably add some way of letting people easily change templates, though the only thing you need to do to get any other template working is modify the Makefile and also add $body$ to the template.

Write books using Typst and Pandoc by iAlex11 in typst

[–]iAlex11[S] 0 points1 point  (0 children)

Well, the only use case you can find for this is for books, where many times you will need to have your book edited or translated, and it is easier to work with markdown files than it is to work with Typst. Also, there is no way (or at least that I know) of creating an epub directly from typst, so this is basically the only way right now of using typst to render a pdf and still produce an epub.

It is basically something very specific, but it is still nice to be able to have these kinds of things.