Urgent.News

650+ sources. One page. See who else covered it.

Editions

Tech

How to build and ship an iOS app without a Mac

If you want to put an app on the App Store, Apple requires you to build and sign it with Xcode, and Xcode only runs on macOS. That's true no matter what you built the app with — Swift, React Native, Capacitor, Flutter, whatever. At some point, something running on a Mac has to sign the thing. Not owning a Mac is a common enough problem that there are a few genuine ways around it, each with its…

Building and shipping an iOS app without a Mac is achievable through various methods, each with its own costs and benefits. Here are three options to consider:

1. Purchase a Mac: This straightforward approach involves buying a Mac mini, which starts at around $799. While it represents a one-time cost, it's a hardware investment you own, usable for other tasks as well. However, this option may not be ideal for short-term projects or one-off apps, as the initial expense could be a significant barrier.

2. Rent a cloud Mac: Services like MacStadium and MacinCloud provide remote access to Macs on an hourly or monthly basis. These services range from about $20 per month for a shared machine to $100+ for faster, dedicated hardware. This option eliminates the need for ownership but comes with ongoing costs and requires interactive use, similar to owning the machine. It may not be cost-effective for occasional or minimal build requirements.

3. GitHub Actions: This option utilizes GitHub's built-in CI/CD system to provide free macOS build machines for public repositories. GitHub Actions allows you to push code, which triggers the build process using signing certificates and provisioning profiles installed from encrypted secrets. The signed app is then uploaded to App Store Connect/TestFlight, all without the need for a physical Mac.

This approach is particularly beneficial for public repositories, as it offers free macOS build minutes. However, private repositories have a monthly cost for extended usage and billing for usage beyond the free allowance.

While the initial cost of building and shipping an iOS app without a Mac may seem daunting, the GitHub Actions option provides a cost-effective solution for public repositories. For those requiring regular iOS app development, purchasing a Mac remains the simplest long-term solution. Ultimately, the choice depends on your specific needs, project requirements, and budget considerations.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

How I Cut MCP Token Usage by 91% (and Learned a Humbling Lesson About Tokenizers)

The Problem When you add MCP servers to your AI coding agent, each one dumps its full JSON schema into context. 255 tools across all servers = 39,964 tokens.

  • MCP servers consume large token space by adding full JSON schema to context
  • Mcptoon compresses JSON schema by 91%, reducing 39,964 tokens to 3,511
  • Mcptoon returns results in human-readable TOON format, saving even more tokens

X Open Sources Its Ranking and Filtering Algorithms

An anonymous reader shared this report from TechCrunch: X is significantly expanding its open source codebase, which includes the app's "For You" algorithm and its core ranking engine, and adding a…

  • X open sources core ranking and filtering algorithms on GitHub
  • For You timeline algorithm and ranking model parameters released
  • Transparency tool lets users download aggregate stats as JSON

React useLatest Hook: Read Fresh State in Async Callbacks (2026)

Here's an autosave button that lies to the user: function Editor ({ docId }: { docId : string }) { const [ text , setText ] = useState ( "" ); const [ status , setStatus ] = useState < " idle " | "…

  • React useLatest hook reads fresh state in async callbacks
  • Prevents stale closures causing outdated data issues
  • Works with setTimeout, setInterval, event listeners

Why your TestFlight build doesn't show up after a successful upload

You push, the build runs, the archive and export steps succeed, the upload step succeeds, the workflow finishes green. You open App Store Connect to check on it and TestFlight shows...

  • Build number must change with each upload, even if marketing version stays same
  • Use github.runnumber in GitHub Actions for dynamic build number
  • Verify dynamic build number substitution in archive step

More from Sunday 16 August →