A code editor (IDE) to make and test native iPhone/iPad apps without owning a Mac.
---
IMPORTANT: Setting up this app very involved, especially on windows. If you do not want to attempt it, there is a video on the demo link (release page).
---
Features:
- Code editor with Swift language features (autocomplete, error reporting, etc)
- Install & Test apps on device via a custom made sideloader
- SDK generator for compiling swift projects targeting iOS
- Debugging utilities such as the app console, syslog and screenshots
- Pages to manage your certificates, app ids, and more
- Much more (and more to come)!
truf
Check their projects out: PolyPanic, CapeInjector
Laeth English
Check their projects out: 3DRenderer, Universe Simulator
thet pai
Check their projects out: Relation, Notesverse-TUI, my personal website!, TimeKeeper, PhyoID
advaitconty
Check their projects out: Wakatime Playgrounds, Elara: The ultimate time tracker, where time meets tranquility, Elara for Windows XP, Unplug - your digital life, your rules
Tymek
Check their projects out: Wasona, Agin CI, Agin Slides, Agin Sensors, Agin Auth
radioblahaj
Check their projects out: Airport Stats in the Terminal, Musings -- journaling and feelings tracker, Personal Website
Olivér Pirger
Check their projects out: Libre Invites, Link: URL shortener, Overwatch Diff Avoider, SoundStash
ZeusyBoy
Check their projects out: Personal Website, FlyRight, Physbox, Panda Clicker
Griffin McLaughlin
Whoops! Looks like they don't have a project yet. Maybe ask them to start one?
Ras_rap
Check their projects out: Universal Configuration Language, Minecraft Magic, Kraken event, Kraken event, SD Tools, Ras Games, Private Equity Marker, Pair O' Dice, Portfolio, OpenPlace
andrei1010
Check their project out: PolarLearn
Once you ship this you can't edit the description of the project, but you'll be able to add more devlogs and re-ship it as you add new features!
Ship 2
This ship is currently being voted on by the community. Check back later!
I forgot to add one of the projects I made while debugging and testing isideload (a core component of this app) so this devlog is accounting for that time. I was originally going to publish it as a separate app and I might still do but I never did. So I guess you get a glimpse of my developer tools I used for testing!
I got unxip-rs working on windows and finally fixed the issue with the Move Files step taking several hours on windows. Also, I added the ability to select a custom anisette server, which led me to discover a major bug with my preferences system. All fixed now tho!
Unxip has been causing me nonstop problems, so instead of trying to fix them, I re-implemented unxip in rust :D
It's a bit slower, but it is more stable and uses way less memory, plus it will cut the app size down all the way to 13mb on windows and 23mb on linux
So, I thought I was going to be done with this project for a while but I keep crawling back...
I've added:
- Automatic WSL installation to make windows setup easier
- Improved help text and links to the troubleshooting page
- An AUR Build
- The ability to generate the darwin SDK from Xcode.app in case unxip fails
Now that I've made a post-ship devlog, I guess that means I have to add more features so I can ship again, right? 😉
Just realized that I linked the unxip program on Ubuntu 24.04, making it useless for anyone on 22.04 or 20.04. I booted up a docker image of ubuntu 20.04 to rebuild it, as well as fixed some bugs with my github actions script. I also attempted some fixes for the .AppImage but they ultimately didn't work
The bugs just keep on coming. This time I fixed:
- LSP not starting like 80% of the time on windows
- SDK not actually being passed to sourcekit (I never noticed because my main pc has a sourcekit config file with the sdk)
- Some other windows related bugs
I also added New Folder and Refresh options to the file explorer
I was intending to ship last night after I made the first alpha release but it turns out windows was super broken. Some notable bugs:
- Would load forever if wsl wasn't installed
- Would be stuck on installing darwin sdk forever in some cases
- Would open up a separate window every time a wsl process was created (which is quite often, resulting in windows spamming you whenever you use the app)
- Windows being windows
I think I fixed most of them, finally
Worked on some last minute bug fixes and polishing to get it ready for a ship!
I fixed some bugs with themeing and apple IDs and also implemented the ability to read the stdout so you can actually properly debug your app.
Added auto updates and fixed some bugs with built versions of YCode (some styles weren't correctly applied and the LSP wouldn't start correctly)
Added an import icon button and changed the default icon to be the crosscode logo
I rebranded to CrossCode (Cross as in X but also as in Cross-Platform) and made a new logo. I also update the syslog viewer a bit
Fix some bugs related to signing in with your apple id, added a spot to see the app version, and made it so that YCode can re-open your most recent project automatically.
Also, considering renaming to CrossCode (Cross as in X for XCode, but also Cross as in Cross-Platform) since YCode is already used by a few similarish projects on github.
If anyone is actually reading these, what do you think about the name CrossCode?
I improved the onboarding screen to make it more intuitive to new users as well as some other fixes
Went on a bit of a bug fixing spree. I fixed the main window showing during loading, and added a --showMainWindow parameter to help if anyone encouters a silent error later. I finally fixed the theme selector which has been broken for a long time, and now light theme is actually light instead of light with spots of dark.
At long last, windows support for sourcekit is here! Don't be fooled by the timestamps, this took many hours, just not all of them were in a code editor. Still a weird issue with getting it to startup, it takes a couple of restarts sometimes. I don't like windows very much
I ended up re-making the tab bar from scratch and changing how i use monaco editor to get go to definition to work. It's still a bit buggy but it works pretty well now! Plus I also made the open file button in the menu work finally
Added a tab to view the LSP output for debugging, and also fixed a couple bugs with the autostart
Set the LSP to autostart when you open a project, improved project validation, and added this limited memory warning. Almost done with LSP support!
Worked some more on the isideload and zsign crates to get them to work on windows and to experiment with them
I extracted the sideloading code into a seperate crate, isideload (https://github.com/nab138/isideload). Lot of debugging and stuff but its done now.
I worked on updating dependencies and fixing bugs in apple-private-apis. I even made a pr to the original repo. Also started working on extracting the sideloading code from ycode into its own separate project (temporarily called isideload)
While procrastinating fixing errors with monaco-vscode-api, I decided to make proper rust bindings for zsign so I don't have to rely on precompiled binaries anymore. I was able to make them and publish them on crates.io! https://crates.io/crates/zsign-rust
I audibly gasped when I finally got the error to show up. Due to monaco-vscode-api and monaco-languageclients poor documentation I've spent the last couple days playing with different configurations and looking at existing projects to figure out how to get the lsp to work properly. And finally it works!! Still a lot of work to do until its ready but it works!!
Windows support is finally here! After fixing numerous bugs and making some efficiency improvements, ycode is now capable of:
- Detecting swift sdks in wsl
- Generating and installing the darwin sdk in wsl
- Building a project
- Installing a built project to the device.
I also fixed a few bugs:
- Cancelling logins now works gracefully instead of causing any future login attempts to hang
- Swift 6.1 was changed to be the required toolchain (was originally swift 6.0 because I had the wrong xcode version)
So excited to be done with windows (for now).
Switched over to extracting the xip in the wsl filesystem but still have to fix some issues with symlinking. I love windows!!!!
Worked on darwin SDK installation in windows. After getting the xip extraction to work, It failed as it was unable to symlink the files like they should be. I'm going to have to redo this part to do the sdk preparation entirely within wsl so that the symlinks work properly. Yippee.
Worked on windows support some more and got WSL installed swift toolchains to show up in the app. That means they had to pass the internal validation as well, which meant I had to rewrite the whole swift invocation system to support running through wsl. The joys of windows.
Once again my devlog time isn't working right... Anyways I finally got the app to open on my windows desktop which took about 2 hours of installing various toolchains and dependencies... I love windows so much!!!!
Got the app to compile on windows again (still doesn't work though). Problem was that I was relying on a unix filesystem import which obviously doesn't work on windows, so I wrote a small wrapper that just invokes ln on wsl if its windows. Working on getting windows properly supported is my next goal
First successful install of an iOS app built on linux with swift instead of theos!
I added support for a ycode.toml config file to specify the version number and bundle id, and later other options.
I created a packer to take the compiled executable and required resources and put them into a .app
I updated the templates to use this new project structure
I spent some time working on a reusable operation view that will inform the user of errors and also make sure they know that things are working instead of just starting at a blank spinner. I think it turned out quite nice!
Been doing some research and stuff. Got bored and decided to start working on an operation view that basically will just show all the steps of an operation like installing the darwin sdk so that theres something nicer to look at than a spinner. Not much to show of it yet.
Cleaned up some edges and did some research into how I will package the app. Also started playing with an iOS emulator to see how feasable integrating one might be, but it's taken me a few hours to setup and I'm still not done, so... unlikely that it will get added anytime soon.
Finished the sdk generation code, YCode is now able to take a downloaded Xcode.xip and convert it into a darwin sdk that swift can use to build an iOS app with. Also made some nice UI for doing so and detecting if the darwin sdk is already installed.
Decided to ditch theos so that I could build SPM support into YCode. Started by allowing the user to select a swift toolchain
Made some real templates. I'm doing research on swift package manager integration, and am thinking about replacing theos with something custom to support it.
Got project creation working! Still need to make a proper template but the app is all setup to have the user select a template and fill out the info, and it will copy the template and fill in the user data.
Added an early access disclaimer to the app and created a github action to build and upload recompiled linux and windows versions for testers
Added an app ID page to preferences and a developer settings page. While making the app ID page, I discovered a few bugs in the app ID registration code that prevented deploying in some cases, so those have been patched.
I updated the splash screen to use just a single HTML file so that it appears faster, and I updated the IDE onboarding page to fix styling, add the logo, and other misc changes.
Redid how Preferences are handled and how their look, and used the new system to make a snazzy certificate management page. If YCode is your only use of sideloading you shouldn't need it, but for someone like me who codes on different machines and sideloads apps, this is invaluable
Even more internal cleanups, fixed several UI bugs, added more features to the integrated file browser, and added a project clean button to the toolbar.
Did a ton of internal cleanups as well as making the build and deploy button actually build and deploy!
nice!
Sideloading works!!! It's been such a long journey to get here (even before SOM I had spent well over 30 hours on attempts that ultimately failed) and I'm so glad it's finally working. Now I just need to polish everything up and I can start working on the actual IDE part of this project
Finished code to register app ids & app groups and to download provisioning profiles. Now have everything I need to sign the app ready (except for the code of course!)
Not much tangible progress but I spent some time porting over structures from Sideloader that will be important to signing the app.
Big refactor! Not only did this clean things up in the backend a lot, but I also made it so that your current Apple session is saved so to make sideloading faster.
Successfully added device as a development device with apples auth servers. One step closer to sideloading