Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: I Built a Java IDE for iPad (apps.apple.com)
189 points by coolius 6 months ago | hide | past | favorite | 55 comments
Includes OpenJDK 17 and IntelliSense. I don't know what led me to make this but here it is.



The app store page doesn't mention debugging, so I assume it's not there.

And probably not "go to definition". Completion quality is also questionable. These are very hard problems, even for a language with strict typing like Java. It's not easy to get these basic lookups correct and smooth.

Personally I wouldn't call it an IDE (yet).


>It's not easy to get these basic lookups correct and smooth.

Exactly, Intellij has been in the autocompletion industry for what, almost 2 decades? And still they present me with types in the autocomplete drop-down that I have never ever used in any of my projects. Yes I know, but I got tired eventually from excluding them. In my brain autocomplete is not hard, yet for an IDE guessing seems really really hard. AI improved this, at the cost of a second latency. No thankee sir.


Yet IntelliJ has always (figuratively, I dunno about its first years) been famous for having by far the best auto-completion ever. People used to become very upset when they were forced to use Eclipse after experience with IntelliJ.


True, it was good and lightning fast back then. Granted, the language (java) was arguably simpler then. Autocompleting a lambda is nightmarish at the moment. Nowadays it gets in the way more often than not. I feel it's starting to implode very slowly.


My experience with InteliJ has made me stick to Eclipse and Netbeans, unless external forces require me to use it.


If you’re talking about the new autocompletion AI that they added a few months ago, you should be able to turn that off in the settings.


And so I did after thirty seconds of using it.


> autocompletion industry

This is a great line.


Why auto complete for a static language would be hard? Everything is known in advance.

Genuine question.


Because Java is static and relatively simple, the level of autocompletion is absolutely fantastic. E.g. a simple case, typing:

int a = obj.

Would show first only methods that return integers. But this gets far more sophisticated with completion anticipating your preference, naming variables for you, filling in the parameters with sensible values etc.

Going back to the simple list of options is a bit of a pain. Also, this needs to be written in Java since it needs to read the API classes to make suggestions. But his editor code is probably in Swift.


I’m very curious, are you running the JDK inside the app? What difficulties did you run into trying to embed an external runtime?


I got OpenJDK 17 to compile for iOS, but I had to disable JIT compilation as iOS doesn't allow running unsigned Code. Running the JVM itself is possible as long as the binaries are signed, and located at the correct paths. The paths issue really made me jump through hoops because Apple doesn't sign binaries unless they are bundled in Frameworks at the root of the bundle. That forced me to create symlinks to replicate the directory structure expected by the JVM while satisfying Apple's stupid policy.

Of course this whole thing only occured when I tried to submit to the App Store and the whole app was finished. I wasn't going to give up at that point.


I don't use Java much these days, but for some reason I find this project inspiring. If only because of the level of commitment to get it working.

I just wanted to say great job!


OpenJDK isn’t mentioned once in the apps description, and it is GPL which means this entire application may have to be GPL (IANAL)


OpenJDK has the classpath exception in its version of the GPL, which allows non-GPL code to link to it without triggering GPL requirements.


This is a common misconception. The Classpath exception only applies to the class library, not to Hotspot (the core of the JVM implementation). The class library is also more tightly integrated with Hotspot than it used to be.

And of course the Classpath exception does not waive the notification and other requirements for the OpenJDK libraries that are distributed under the Classpath exception.


Where did you get a non-GPL version of OpenJDK?


Alternatively, where can I get the source for the app?


Fair question if you've bought the app.


You can download it for free and you can then compile stuff with it, so you don't need to buy anything for this


The appstore ToS explicitly forbids submitting apps containing code under the GPL or similar licenses, which was one of the main reasons I asked.


Impressive. Can you please work together with Oracle and make this available to everyone :) ?

And did you also try to use GraalVM?


Is there any technical reason why one couldn’t run e.g clang or go compilers in this way? I assume you’re running javac on-device?


No technical reason, but you won't be able to run a compiled binary due to policy. You need to use an interpreter.


I wonder if qemu with cpu=host counts...


Maybe run a VM inside Safari via QEMU and WASM that boots a Linux desktop environment


WASM is indeed one possible workaround. That's how a-Shell [1] manages to include a C compiler and run resulting programs at (I believe) better-than-interpreted speeds.

[1] https://holzschu.github.io/a-Shell_iOS/


The app is monetized by limiting the number of “runs” you can do per month. Based on iOS limitations I think we can assume this means the compilation is done on a remote server.

EDIT: nevermind! I tried running a program with airplane mode on and it still worked. Now I’m really interested to hear how this was accomplished.


Probably a OpenJDK Zero VM build. That's a configuration without JIT or template interpreter, but a "plain" C++ switch dispatch interpreter that requires no runtime code generation.


I felt out of the loop, thinking that Zero VM was some kind of new distro for OpenJDK but chasing <https://packages.debian.org/sid/openjdk-22-jre-zero#:~:text=...> to <https://sources.debian.org/src/openjdk-22/22.0.1%2B8-1/debia...> lead me to https://github.com/openjdk/jdk/tree/jdk-22-ga/src/hotspot/cp...

It seems that it's a specific CPU target for the Hotspot JIT for non-mainstream architectures (or for research purposes, as I saw mentioned once)


No, it's just a tier where it doesn't JIT. You can build it for your computer, too.


Didn't Apple recently allow to run "emulators"? So code that generates code on the app store?


More like code that runs code, not code that generates code. Assuming the latter means that it's generating native code and attempting to execute it natively, that's not allowed.


Code that generates code - specifically user-specified code - has been allowed on the App Store for years now. They have a very patronizing term for it, too: "learn-to-code apps".

Granted, Apple's never going to give you the entitlements necessary to make this performant or let you create separate temporary containers for compiled apps like Swift Playgrounds can. But you can absolutely ship a dev environment on iPadOS as long as you're willing to deal with those limitations.


Emulators don't have to generate code. At the simplest level, a CPU emulator is a switch statement.


Emulators don't necessarily generate code (maybe if they use JIT). They run arbitrary code, but that's other thing.


I don't have a compatible device but I'm curious how the pricing works. Does it work like a subscription where you pay monthly for unlimited runs per month? Or do you just need to pay for enough runs and buy more if you run out?


In university, my friend used an iPad for all his notetaking. He had a keyboard for it, and used it like a little laptop. Bet he would have been all over this!

The UI is good, looks clean


This is very common. A majority of my engineering maths students are writing lecture notes and exercises on a digital device, the plurality on iPad (Surface next most common). Many of these iPad users have a laptop as well as or instead of a keyboard for their tablet though, as the extra screen and flexibility are worth it.


This is awesome! I definitely think it makes coding way more accessible to beginners and would allow me to work on cool side projects, without having to carry a laptop around. Can't wait to try it out.


Can you use it to write iPadOS applications that you compile and run on the device?


This is my biggest hang up about the iPad. Hardware is great. The OS is… passable. Sort of.

For me: I can’t do computer things that I want to do (mainly code, but sometimes game, etc).

I ended up buying a used Surface Pro X. A bit slow, but I like that I can run something like VS Code and a Node server, or even a real web browser with network debugging tools, all using a touchscreen while on a bus or in an airplane.

(For my gaming fix, I find that GeForce Now or Moonlight work pretty well for streaming my existing games — not as practical to do on a bus though.)


I understand what you are saying. The iPad is the best choice for some people and the worst choice for others. I have an older iPad Pro and it’s by far my favorite computer mostly because it doesn’t really feel like a computer.

My favorite apps are Procreate and GoodNotes. For me, either one is a killer app that justifies having an iPad.

I also have a ThinkPad for my personal projects and a desktop workstation for my job. Each machine has its strengths and weaknesses. Each was chosen because it was a great choice for what I need to do with it.

I’m one of the few people that hope the iPad doesn’t get more computer-like. I miss the days when you had an Atari or Amiga or PC or Mac and they were all very different and exciting and in competition with each other. Now we are approaching a very boring endgame where cross platform apps look the same everywhere and there’s nothing fun about any of it.


> I’m one of the few people that hope the iPad doesn’t get more computer-like.

Genuine question; what loss of features or capabilities are you expecting if the iPad does become more computer-like? I don't understand how features like sideloading, compiling or emulating limits your ability to use Procreate and GoodNotes.


While I’d love an iPad running macOS (You know there’s a lucky Apple engineer with one), The worry having the features is that it will require futzing with to get it to work right. Right now an iPad is like a Video game console. You just plug it in and it works. There is an expectation of a very, very smooth user experience. The fear is that in adding computer-like features, it won’t be as smooth anymore. Don’t know if I agree with that, but that’s the concern anyway.


I guess I just don't agree with it either. None of the features I mentioned should have any negative impact on the end-user unless the OEM deliberately implements it wrong.


One solution is to tape a pi to your iPad case. :)

No internet connection required.

This should work for node but not compiled languages. I think that the compilation would happen on the slower Pi but maybe someone can figure out a way to compile but not run on the iPad.

https://magpi.raspberrypi.com/articles/connect-raspberry-pi-...


While not perfect. For Swift, I’ve actually doing inițial app development using Swift Playgrounds.

I’m even maintaining project that still keeps working as Swift Playgrounds.

Here is an open source example of such: https://github.com/talaviram/OpenSpoken/tree/main/OpenSpoken...

But I also have internally a bigger app that is doing similar approach (not open source code though) - https://www.smartercurrency.app

I’ve yet tried and I guess it’s limited for trying to do any ObjC++ / C++ / Metal. But I do believe Apple is using playgrounds as a playground for Xcode successor.

The biggest issue though, is version control (git…) which requires more work to get things properly.


> I guess it’s limited for trying to do any ObjC++ / C++ / Metal

The last time I tried, I couldn't get it to work, except...

One of the documented ways of creating compiled Metal kernels is to provide the source code as a string in your Swift code. And that works in Swift Playgrounds. It will compile and run your C++ Metal kernels, but it either works or doesn't. You get no compiler output.


That's the main drawback I find with the iPad. So much memory, so much processor, and not being able to use an app that allows me to create iOS apps. It's the reason why I only have an old iPad Air, it's enough for browsing, reading ebooks, and watching a movie on a trip. Anything bigger would be too bulky with the MacBook.


> and not being able to use an app that allows me to create iOS apps

Maybe you already know about this and you just mean there isn't an app that provides the equivalent of your full MacOS dev environment, but you can absolutely build and run iOS apps on your iPad with Swift Playgrounds.

It has a lot of shortcomings, but I've used it to create a couple little personal apps that I can run without distributing them through the App Store.


They are basically running 1 platform now. They should merge the iPad and MacBook lines already.


I fear this would only hamstring macos, not empower ios.


So... Continuous for Java? Meaning it can compile and run in device?

https://apps.apple.com/us/app/continuous-net-c-and-f-ide/id1...


So far, sort of. Continuous does have the advantage of having both C# and F# (although it’s a bit crashy these days on modern iOS). I can take the code I test there and build it on a desktop system as well, but haven’t figured out how easy it is to round-trip stuff in this yet (should be as easy, if not easier, but re-using libraries might be trickier).




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: