[HN Gopher] Show HN: I Built a Java IDE for iPad
___________________________________________________________________
Show HN: I Built a Java IDE for iPad
Includes OpenJDK 17 and IntelliSense. I don't know what led me to
make this but here it is.
Author : coolius
Score : 177 points
Date : 2024-04-30 15:21 UTC (1 days ago)
(HTM) web link (apps.apple.com)
(TXT) w3m dump (apps.apple.com)
| aduffy wrote:
| I'm very curious, are you running the JDK inside the app? What
| difficulties did you run into trying to embed an external
| runtime?
| robrtsql wrote:
| 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.
| lnxg33k1 wrote:
| Didn't Apple recently allow to run "emulators"? So code that
| generates code on the app store?
| glhaynes wrote:
| 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.
| kmeisthax wrote:
| 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.
| trollied wrote:
| Emulators don't have to generate code. At the simplest
| level, a CPU emulator is a switch statement.
| mrbungie wrote:
| Emulators don't necessarily generate code (maybe if they
| use JIT). They run arbitrary code, but that's other thing.
| lewurm wrote:
| 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.
| mdaniel wrote:
| 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/openjd
| k-22/22.0.1%2B8-1/debia...> lead me to https://github.com/o
| penjdk/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)
| saagarjha wrote:
| No, it's just a tier where it doesn't JIT. You can build
| it for your computer, too.
| Rohansi wrote:
| 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?
| coolius wrote:
| 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.
| cyberpunk wrote:
| 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?
| throwaway11460 wrote:
| No technical reason, but you won't be able to run a
| compiled binary due to policy. You need to use an
| interpreter.
| cyberpunk wrote:
| I wonder if qemu with cpu=host counts...
| greenavocado wrote:
| Maybe run a VM inside Safari via QEMU and WASM that boots
| a Linux desktop environment
| lxgr wrote:
| 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/
| indigoabstract wrote:
| 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!
| jimbobthrowawy wrote:
| Where did you get a non-GPL version of OpenJDK?
| jevinskie wrote:
| Alternatively, where can I get the source for the app?
| Benjamin_Dobell wrote:
| Fair question _if_ you 've bought the app.
| echoangle wrote:
| You can download it for free and you can then compile
| stuff with it, so you don't need to buy anything for this
| hnarn wrote:
| OpenJDK isn't mentioned once in the apps description, and it
| is GPL which means this entire application may have to be GPL
| (IANAL)
| kryptiskt wrote:
| OpenJDK has the classpath exception in its version of the
| GPL, which allows non-GPL code to link to it without
| triggering GPL requirements.
| fweimer wrote:
| 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.
| karussell wrote:
| Impressive. Can you please work together with Oracle and make
| this available to everyone :) ?
|
| And did you also try to use GraalVM?
| sdwr wrote:
| 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
| mkl wrote:
| 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.
| criddell wrote:
| Can you use it to write iPadOS applications that you compile and
| run on the device?
| davely wrote:
| 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.)
| criddell wrote:
| 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.
| talldayo wrote:
| > 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.
| fragmede wrote:
| 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.
| talldayo wrote:
| 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.
| alexpc201 wrote:
| 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.
| sharkjacobs wrote:
| > 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.
| 2muchcoffeeman wrote:
| They are basically running 1 platform now. They should
| merge the iPad and MacBook lines already.
| jayd16 wrote:
| I fear this would only hamstring macos, not empower ios.
| rock_artist wrote:
| While not perfect. For Swift, I've actually doing initial 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.
| Kon-Peki wrote:
| > 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.
| jorgeleo wrote:
| 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...
| rcarmo wrote:
| 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).
| pquki4 wrote:
| 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).
| pandemic_region wrote:
| >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.
| qwerty456127 wrote:
| 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.
| pandemic_region wrote:
| 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.
| MrBuddyCasino wrote:
| > autocompletion industry
|
| This is a great line.
| gbear605 wrote:
| 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.
| pandemic_region wrote:
| And so I did after thirty seconds of using it.
| wg0 wrote:
| Why auto complete for a static language would be hard?
| Everything is known in advance.
|
| Genuine question.
| wanderbuilds wrote:
| 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.
___________________________________________________________________
(page generated 2024-05-01 23:02 UTC)