Need help?
<- Back

Comments (218)

  • codazoda
    One down-side to this is that it does require you to run the agent on your Mac instead of in a Sandbox. I do this too and there are lots of problems I can't solve in a sandbox. I know a lot of you are throwing your hands up at the years of security practices we're throwing out the window when we do that.The fact that xAI uploaded someone's home directory, including their SSH keys, is giving me serious pause at my choices here.Generally, I don't worry about my machine being "blown up". I don't have a TON of unreproducible stuff on my machine. Everything is backed up, committed to git, and the like. I can restore most of it in a couple hours.That said, I really, really don't want my .SSH directory sent to an AI agent and it's silly to prompt your way around that. You need to block it at the system level. I'm considering a separate user and then 700 permissions on my home directory.I feel like we're back to 1990's security here. The double-edged sword is that it's helping us get things done at a pace like never before.I'm not throwing shade here, I'm among the guilty.
  • kxxx
    I've been building and testing my iOS app just for fun via Linux only.Surprisingly, it's very easy. This works like a charm: https://github.com/xtool-org/xtoolYou do not need to upload to TestFlight or the App Store; you can just install the app locally to your iPhone via usb -- even from Linux!When in doubt, just ask your coding agent of choice to help you create and upload a Hello World iOS app. It's really easy.
  • CharlesW
    If it's okay to mention my own complementary open source project, Axiom¹ does a good job of helping coding harnesses know how to do this effectively for Apple OS development.In addition to a deep roster of skills and agencts, Axiom includes several for-LLM tools². xclog, xcprof, xcsym, and xcui are designed to be used by LLMs, and expose capabilities in a token-efficient way. These tools are equally helpful for non-Axiom skills/agents.¹ Axiom: https://charleswiltgen.github.io/Axiom/ ² Axiom CLI tools: https://charleswiltgen.github.io/Axiom/tools/
  • Tiberium
    It's kind of funny to be reading this:> I had Claude Code create mine: I told Claude, more or less: I want to archive, Developer ID-sign, notarize, staple, and install this app to /Applications without ever opening Xcode. Write me a script that does the whole chain and fails loudly if any step breaks.Even though the text we're reading is Claude talking to us as well :)Also it was weird to see the mention of "ask your LLM" at almost every stage in the blog post:> point Claude Code or your LLM coding tool of choice to this blog post, and let it figure it out> When in doubt, ask your LLM of choice about them and have it help you get set up. It’s the one that’s going to be using Xcode for you anyway.> The whole point of using the LLM in the first place is to avoid doing things manually that you don’t want to do.> Again, if in doubt, ask Claude Code or your LLM of choice to create this for you.> Again, this is why you talk to your LLM, tell it what you want, and have it help build your workflow.
  • zm2529
    I mainly run the app from Xcode because it’s the easiest way to view the logs. If I build and install the app this way instead, what’s the best way to view the logs?
  • ChrisMarshallNY
    Technically, you are using Xcode.Xcode is a [buggy as hell] GUI wrapper for a lot of system-level UNIX utilities and apps [which are generally, not so buggy].Using CLI to release apps is a pretty old practice; at least as long as I've been doing it (I released my first Xcode app in 2012).
  • octavore
    Shameless plug: I've been working on strudel [0], a CLI that uses a lot of the same ideas in this post and allows you to build/sign/notarize Mac (and iOS) apps without touching Xcode. It has a dry run mode so you can see the actual commands being run, which was important to me to have so there's no mystery about what's happening.I should blog about more this, but I also went to some effort to add support free iOS provisioning with just an Apple ID (using internal APIs); and creating a nice DMGs for macOS app distribution (reverse engineered .DS_store files for this). And there's also a built-in command to install skills for coding agents, which was fun.This [1] is an example app I built with it, a simple utility to manage macOS file extension handling.[0] https://github.com/octavore/strudel[1] https://github.com/octavore/tots.app
  • pmarreck
    The first Mac app I ever built, which was at least 6 months ago using only AI, was purely LLM without XCode at all.
  • searls
    I've been using agents to develop Mac and iOS apps for over a year now and I would say this post is bad advice, particularly because the excellent Xcode MCP requires Xcode to be running. The MCP tool gives you faster, better access to a number of functions for which xcodebuild is much slower and much chattier and a number of others (like the #Preview generation and rendering) that aren't possible at all while Xcode is closed. Also, in Xcode 27, the MCP & built-in agents are able to drive simulators with DeviceHub extremely well. (If you haven't been following, DeviceHub replaces Simulator.app and as far as I can tell, it's actually scrutable by agents without relying on hacking at the accessibility APIs with tools like axe.)Xcode MCP is not perfect, by any stretch (stupidly, it issues a permission prompt on every single agent launch—something I defeated with a Keyboard Maestro hack to auto-accept it), but Xcode 27 is such a huge leap forward in the ergonomics of vibe coding with Xcode that I've actually stopped dealing with the MCP and (after an afternoon of futzing) have started using the app's own agent UI for driving Codex because that harness better steers the model to take advantage of the tools available.All of this redounds to two things: faster feedback and more robust verification. The two things that matter most.
  • WhitneyLand
    Everyone will still need to use Xcode for at least some debugging, no way around that.As for the builds, your agent probably already knows how to do a lot of this from the command line, although explicit suggestions can help it build faster for different situations.As for XcodeGen, you may find it unnecessary overhead if you're already using Xcode file system synced groups.For iOS my biggest suggestion would be to enable App Store Connect skills for your agent (https://github.com/rorkai/App-Store-Connect-CLI).With this not only do you not need Xcode all the time, you also don't even need to be near a MacBook.Just make changes via Codex on your iPhone, the tell asc to build and upload to TestFlight, download and run the new version, iterate.
  • mvkel
    In my experience, the better long-term choice if you're going to vibe code an app is to use Expo.Its basis is React, so the code output quality is much higher than Swift because there is much more React code in LLM training data.Everything is in the command line, and debugging is a breeze because it's a web view. But once it's compiled to native iOS, it feels like any other native app.Expo + Fastlane = fully automated iOS submission and deployment. I issue one command and see a new version in the App Store.
  • gen2brain
    I have a nice setup on my Linux for iOS apps. I compiled the OSXCross toolchain, and also copied iPhoneOS.sdk and iPhoneSimulator.sdk from the macOS VM. With some wrappers, I can compile iOS apps (Obj-C) on my Linux machine, sign them with zsign, and use go-ios to install them on the device.At first, I just used simulator builds to test (and debug) on the macOS VM, in the simulator, but that was slow and painful. Finally, I bought a used iPhone, all bruised, just so I could test it on a real device. The main issue for me was signing, one cannot register a macOS VM (maybe with some kext hacks?), I managed to enable developer mode on the phone (crazy process, but it worked with Xcode in a VM), I registered the phone on the website, and paid those damn 99$.I used that for my cross-platform UI library with native controls, based on IUP. Now, future users of the UI toolkit do not need to care about Mac, iOS, or tooling; it just works. You can check the toolkit (WIP) here https://github.com/gen2brain/iup-go .
  • dvduval
    What continues to bother me is just that developers who don’t have the budget are pretty much pushed out of iOS development because they can’t afford a Mac. And every time that Apple increases the price of their products, more people are blocked from being able to develop on them.
  • mrbombastic
    This is cool but also makes me worried about the tendency with llms for all of us to make bespoke solutions rather than building a better community tool or extending an existing tool to solve the problem. fastlane exists to solve exactly this problem in the mobile space.
  • 21-DOT-DEV
    The comments here clearly point out that building and shipping have been the automatable parts (and for some time now).To anyone who's chased a crash that only reproduces on a physical device knows the fix was never more log statements added by ai but rather a breakpoint, the debugger, and thirty unglamorous minutes of stepping through code line-by-line (terminal lldb technically counts, but barely).
  • gwking
    I have one weird trick for people who are exploring this vein. I last opened an Xcode project about five years ago so I could be way behind the times.Having spent many years fighting with Xcode professionally, I was thrilled when swift build came out, and then appalled at how badly Xcode adopted it. Eventually I realized that you can set up your entire app as a swift package, and then the Xcode project with a single main source file that calls some `app_main()` (or whatever you want to call it) function in your package.I cannot remember exactly but there was something annoying about setting up a new project; I think by default Xcode assumes that you want a swift package to be treated as a dependency that is checked out from git, but there was a way to drag and drop a local dependency in the same project directory and then it worked.What this buys you is that files are no longer tracked by Xcode, so renames/merges no longer trigger project.pbxproj surgery. Instead you specify the swift package directories and are done.I used this for some large personal projects and was very happy with it.At one point I also wrote my own build tool that imitated all of the steps that Xcode took so that I could truly be Xcode-free. That also worked (and was not even that hard) but I went back to Xcode because the debugger UI was better than what I could get out of VS Code at the time, and especially because I was playing around with the Metal debugger.
  • chrisvenum
    React Native + Expo is also a good option if you want to touch the iOS/Android IDEs as little as possible. You use Xcode and Android studio to install the device sims and then expos tool chain handles the rest, even for deploying to stores. If you are on a windows computer and can’t install Xcode, you can even run your iOS app directly on an iPhone with their managed app.Ignite is a great starter using RN and Expo. Some great people maintaining it. https://github.com/infinitered/ignite
  • canthonytucci
    If you’re paying the $100/year to publish to the store you also get access to Xcode cloud, which you can point at a repo and it will build snd archive for you to distribute to testflight. I opened xcode to test locally in simulator the first time but haven’t had to since.Using godot iOS export.For regular old native ios dev replacing Xcode i don’t think i would do it.
  • qpe0
    I do it exactly like described here. Nice to see an article about it.
  • hyzyla
    Check also Sweetpad CLI. It’s basically wrapper around xcodebuild, but humans and agents. It’s my next project after Sweetpad VSCode extension for developing iOS/Swift applications in VSCode. Cli is still in beta, but I see on my own project that it’s already quite pleasant to use1. https://sweetpad.hyzyla.dev/2. https://github.com/sweetpad-dev/sweetpad
  • Schiendelman
    I've been using essentially this process (with Claude Code) for about six months. There are a couple of places where I've opened xcode; mostly to update the simulators for new betas of xcode 27, and once to add a target for Apple Watch (and I think something for HealthKit).Interestingly, since about Opus 4.6, Claude has been able to reason its way into this process on its own. It was clunky until 4.7, and in 4.8 it's managed to find its way around every reason I had to open xcode myself.
  • resonious
    This seems like a lot. I told my oh-my-pi agent to build my ios app for me and send it to me remotely. After some chugging, it gave me a tailscale funnel link. And it worked. I didn't have to dig into any of this stuff. I didn't use the words "Developer ID-sign", "notarize", or "staple" in my prompt.
  • coverband
    Regardless of the vibe coding aspect, there's good information here for anyone new to the mac/ios build/distribution workflows.
  • schainks
    I just set up my pipeline to do this exact thing for both the Apple and Android ecosystems, dispatching loads to my mac studio or Linux box accordingly. I moved the runners off GitHub because uptime for GitHub actions has been trash lately, and the Apple Silicon runners are pricey.Claude was great at figuring out what was broken when and either fixing it, or clicking as far as it could until it needed me.You could say I'm mostly just IRL hands for the AI now.
  • theraven
    Interesting this is coming across as novel. This is how CI build machines for Apple’s platforms have been setup in perpetuity.
  • mulmboy
    I went to build an open source app from GitHub and was pretty surprised that it requires Xcode and that Xcode can't really be installed without an apple id. I do not want to make one and I certainly will not sign my computer into one.I did end up somehow installing Xcode via some shady download and was on my way. But the whole ordeal left a very sour taste.
  • dools
    Shout out to fastlane! I would have loved to have found it sooner in my app shipping journey.
  • saagarjha
    Making your app buildable from the CLI is not something I do personally to use on my Mac but it is very useful when you're automating your CI. If you have GitHub Actions set up to build your app, so can Claude, assuming you have the right signing setup on your machine.
  • pjmlp
    The pain people go through not to use XCode, for me it does the job.
  • recsv-heredoc
    Having to have Xcode installed is more than half the problem. It makes Visual Studio look lightweight.
  • stephenhuey
    Thought this was going to be about the new Ruby Native!https://rubynative.com“From bundle install to your phone in minutes. To the App Store and Google Play without a line of native code.“
  • mctwo
    I don't see the point of this, if you use Claude or whatever frontier LLM you like, you need Xcode only to start emulators / install app on phones or to upload a binary.
  • pzo
    You can as well make it simpler and use those skills:https://github.com/software-mansion/argentorhttps://github.com/callstack/agent-deviceboth callstack and swmansion are mostly react native shops but those should work even in native ios/android as well
  • isodev
    In addition to the challenged Xcode, just using Swift seems to require a lot more tokens for both coding and dealing with build/platform quirks. Probably not super significant on indie scale but for anything more robust, it builds up quickly.React Native and Flutter seem to be much more predictable for the bots (and more fun for humans, since they have actual hot reload).
  • zitterbewegung
    Xcode 27 which is in beta ships a much better codex integration. There are problems in Xcode that are frustrating . Also, git integrations are a nice touch that allow you to force push too. Would be interesting to find out how well this works in a team based setting.
  • pupppet
    Doesn't that mean you need to distribute the app (TestFlight) before you can preview your app? How do you test locally without the simulators?
  • myHNAccount123
    Xcode 27 beta 3 has been the most stable release I've ever used. The type checking improvements were understated so I gotta laugh at this xcode avoidance.Areas they could improve - what ever the heck is going on in their diffing ui for source control.
  • qpx2022
    I use this script to build and notarize macOS apps, you might find it useful as well: https://github.com/muquit/NotarizeMacApp
  • waynecochran
    The main iPhone app I maintain for work is 100% claude edited now ... I don't touch the code anymore ... I do occasionally look at it. It does a way better job than I could. I do have Xcode open as claude does its thing ... and I occasionally sign and deploy with Xcode. No coding though.
  • gnachman
    Not using Xcode is the greatest improvement in quality of life I have known aside from recovering from a debilitating back injury. So good.
  • tomaskafka
    I find it hard to believe xcodegen is in a state where it would reliably generate xcodeproj for all edge states (widgets, watchos app, notification extensions …) - it certainly wasn’t when I last tried it for Weathergraph few years ago.That said, it might be well enough for simpler apps.
  • datadrivenangel
    I've built a few small MacOS dock widgets now by just telling Claude/OpenCode to build them. Works well enough if you're very explicit.The most useful one is a little weather sparkline to show local temperature forecasts. Useful every day.
  • josefrichter
    Wait, I am not aware that I've done ANY of those setup steps, yet I'm building iOS and macOS apps without XCode. Both Claude and Codex handle it just fine and didn't ask me for any setup steps.
  • franze
    built cable detective like this https://apps.apple.com/at/app/cable-detective/id6765963737?l... and the soon to come https://aifcc.franzai.com/ which is more ambitioushonestly would not even know what to do / click in xcode
  • matthewmueller
    Very cool! Does this assume you're never editing code by hand or can you use editors like VSCode or Cursor as well?
  • maxehmookau
    I don't know why XCode gets the hate it does. It's a solid IDE which I've used for years with only minimal issues. It's certainly no more or less buggy than anything JetBrains releases.
  • hyperhello
    Being outside of the approved development loop has rough edges. How do you keep the app from putting up that permission to access documents folder all the time while you rebuild it?
  • philocalyst
  • sgt
    Although this has been well known for years and documented.
  • scosman
    small issue: xcodebuild will just randomly fail sometimes. And the solution is to... open and close Xcode. I wish this wasn't true, but it is.
  • awaseem
    I’ve done this forever on Foqos. Have a makefile, never even open Xcode and the instructions are in the agents md
  • landseer100
    we are building revyl.com for exactly this. You should check out our CLI: https://github.com/RevylAI/revyl-cli, it lets your agents xcode build and spin up multiple simulators in parallel (all in the cloud). Would love your feedback!
  • tdhz77
    I do something similar in GitHub actions. Every new app is setup in a few minutes to star getting rejected by iOS and Android.
  • grahar64
    I thought this would be a flutter post. Love flutter, ... , well I like flutter compared to Kotlin and Swift
  • stevenhubertron
    This is how i am developing keptrecipes.com. Been a pleasure this way TBH.
  • overgard
    Oh god, the app store does not need more slop. If you can't be bothered to open XCode (which I agree is a dumpster fire, but), you shouldn't be bothered to submit an app that a person has to review and another person has to filter out of their search results.
  • js2
    > notarytool authenticates using a stored keychain profile that you create once, interactively — it prompts for an app-specific password, and there’s no way around the prompt.You can use `--password <password>` (yeah, yeah, passwords on the command line are bad; I'm just challenging "there's no way around the prompt.")Later (contradicting itself):> The one step that stays interactive is notarytool store-credentials, and that’s a choice rather than a limitation: you could pass --password and script it, but that means putting an app-specific password in your shell history.You can configure your shell to ignore history when needed.https://stackoverflow.com/questions/6475524/how-do-i-prevent...https://superuser.com/questions/352788/how-to-prevent-a-comm...(And if it's in a script, it won't be in your history anyway.)> These passwords go stale silently whenever you change your Apple ID passwordYou can use an ASC API key instead. This can be either a team key ("developer" access level) or an individual key.https://developer.apple.com/documentation/appstoreconnectapi...
  • exographicskip
    Skimmed the article. Pretty close to my workflow using fastlane with tauri.Useful sanity check!
  • eptcyka
    What about debugging?
  • LatencyKills
    I spent seven years as a dev on the Xcode team and this is pretty much my exact workflow these days.
  • supermatt
    > Without Ever Opening Xcode"Next, open Xcode"
  • zerr
    The thing is, in a perspective, who would need any apps at all? Users will get what they want from AI directly.
  • myko
    I prefer Tuist (writing Project.swift) to XcodeGen but otherwise, yeah, this tracks
  • murlax
    Tangentially, I despise Xcode and love the Expo ecosystem and all the lovely tooling that they have built. It is React Native but Expo honestly makes it so trivial to build stuff from the CLI without ever needing to open that abomination of an app. And with AI, I have built a lot of side project apps onto my iPhone, like a homelab app for monitoring my cameras with push notifications whenever someone is at the door, starting my irrigation and a whole lot more. Plus Tailscale of course. Kind of a crazy world that we live in now.
  • anon
    undefined
  • inopinatus
    If you prefer your builds composed of declarative and incremental targets, seehttps://github.com/inopinatus/sublime_url/blob/main/MakefileSame shit with a bit of structure.
  • NamlchakKhandro
    Or use Gondolin, or SmolVMs
  • aabajian
    I shipped my iOS app without opening Xcode (well, I had to open it to get some provisioning stuff to work). I still use Visual Studio Code to kick off the simulator, but other than that, I use no IDE at all. Claude writes all the code in Flutter.IDEs are dead, prove me wrong.
  • sneak
    You still have to open Xcode (to get the certs), and you still have to accept the Xcode EULA. Title is quite misleading if not outright false.
  • rvz
    By using "Claude Code"** and giving Anthropic all your secrets, env vars, certificates and your source code to them.
  • bilekas
    Honestly I thought this was the standard because god help me Xcode is terrible.
  • onesandofgrain
    Don't make apps for iOS. The apple ecosystem is horrendous
  • mailship
    [flagged]
  • qiaobax
    [flagged]
  • jkwang
    [flagged]
  • samso26
    [flagged]
  • VaporJournalAPP
    [flagged]
  • martinbfine
    [dead]
  • prakashrj
    [dead]