[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)