2 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Setelah menyelesaikan pengaturan awal akun Apple dan sertifikat, otomatisasi build, penandatanganan, dan distribusi aplikasi Mac serta iOS dapat dilakukan hanya dengan alat CLI di dalam Xcode.app
  • Dari pembuatan proyek dengan XcodeGen melalui regenerasi .xcodeproj di project.yml, hingga notarization Mac dan instalasi ke iPhone dapat ditangani dengan xcodebuild, notarytool, stapler, dan devicectl
  • Distribusi Mac dijalankan berurutan lewat satu scripts/release.sh: archive, penandatanganan Developer ID, notarization, stapling tiket, verifikasi Gatekeeper, dan instalasi ke /Applications, lalu langsung berhenti jika terjadi kegagalan
  • Untuk kompilasi dan pengujian cepat, CODE_SIGNING_ALLOWED=NO bisa digunakan, tetapi build dengan tanda tangan sementara ini tidak akan lolos Gatekeeper dan izin iCloud KVS serta App Group juga tidak terikat ke team ID yang sebenarnya
  • Kunci privat untuk penandatanganan dan kata sandi notarization disimpan di login keychain, dan bila perintah serta aturan distribusi dicatat di CLAUDE.md atau AGENTS.md, agen seperti Claude Code dapat menjalankan ulang seluruh workflow tersebut

Cakupan yang Bisa Ditangani tanpa Xcode GUI

  • Xcode tetap harus terpasang, tetapi tidak perlu dijalankan; xcodebuild, notarytool, stapler, dan devicectl semuanya adalah alat shell di dalam Xcode.app yang bisa dijalankan secara mandiri
  • Pengaturan awal seperti login Apple ID, pembuatan sertifikat Developer ID, dan penyimpanan kata sandi notarization memerlukan GUI atau terminal interaktif
  • Setelah pengaturan awal selesai, pembuatan proyek, build, archive, ekspor aplikasi bertanda tangan, notarization, verifikasi, instalasi, hingga distribusi ke iPhone fisik bisa dilakukan tanpa mouse
  • Saat buntu dalam penulisan konfigurasi atau skrip, Anda bisa memberikan kebutuhan pekerjaan dan nilai spesifik proyek ke Claude Code atau alat coding LLM lain untuk membangun workflow tersebut

Memilih Toolchain Xcode Lengkap

  • Pertama, pastikan hasil xcode-select -p adalah /Applications/Xcode.app/Contents/Developer
  • Jika yang dipilih adalah Command Line Tools mandiri, tentukan toolchain Xcode lengkap dengan perintah berikut
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • /Library/Developer/CommandLineTools yang dipasang lewat xcode-select --install memang berisi clang dan git, tetapi tidak menyertakan SDK iOS, notarytool, devicectl, dan alat pengembangan aplikasi lengkap lainnya
  • Jika Xcode sudah terpasang, paket Command Line Tools terpisah tidak diperlukan
  • Persetujuan lisensi dan pemasangan komponen tambahan juga bisa dilakukan dari CLI
sudo xcodebuild -license accept
sudo xcodebuild -runFirstLaunch

Mereproduksi Proyek dengan XcodeGen

  • XcodeGen mengelola konfigurasi proyek Xcode dalam YAML dan meregenerasi .xcodeproj setiap kali build dilakukan
  • Bisa diunduh dari GitHub atau dipasang lewat Homebrew
brew install xcodegen
  • .xcodeproj adalah folder yang terlihat seperti file di macOS, dan karena Xcode terus mengubah file serta referensi di dalamnya, konflik atau perubahan yang tidak perlu bisa muncul di repositori Git
  • Dengan hanya meng-commit project.yml ke Git dan mengabaikan .xcodeproj yang dihasilkan, konfigurasi proyek bisa tetap reproducible
xcodegen generate

Pengaturan Akun Pengembang Apple dan Sertifikat

  • Anda harus menambahkan Apple ID di Settings → Accounts pada Xcode
  • Distribusi aplikasi dan notarization memerlukan akun Apple Developer berbayar
  • Buat sertifikat distribusi di Settings → Accounts → Apple ID → Manage Certificates… → + → Developer ID Application
  • Apple Development dan Developer ID Application memiliki kegunaan yang berbeda
    • Apple Development digunakan untuk menjalankan aplikasi di perangkat sendiri atau mengirimkannya ke iPhone untuk debugging lokal
    • Developer ID Application diperlukan untuk mendistribusikan .app yang dinotarize agar lolos Gatekeeper di Mac milik orang lain
  • Saat sertifikat Developer ID Application dibuat, sertifikat beserta kunci privat pasangannya akan dipasang di login keychain
  • Penandatanganan aktual menggunakan kunci privat, dan kunci ini tidak bisa diunduh ulang, jadi jangan dihapus dan backup keychain harus dibuat

Menyimpan Kredensial Notarization di Keychain

  • Notarization aplikasi Mac adalah proses mengunggah aplikasi bertanda tangan ke Apple untuk diperiksa dari malware
  • notarytool melakukan autentikasi dengan profil yang disimpan di keychain, dan saat pertama kali membuat profil Anda perlu memasukkan kata sandi khusus aplikasi secara interaktif
xcrun notarytool store-credentials App-Name \
  --apple-id "you@example.com" \
  --team-id YOUR-TEAM-ID
  • Jangan meminjam profil notarization milik aplikasi lain; buat sesuai nama aplikasi untuk menghindari kegagalan diam-diam di lingkungan lain
  • Kata sandi khusus aplikasi berbeda dari kata sandi Apple ID, dan dibuat di Sign-In & Security → App-Specific Passwords pada situs Apple ID
  • Jika kata sandi Apple ID diubah, kata sandi khusus aplikasi bisa kedaluwarsa tanpa peringatan terpisah
    • Jika muncul 401 invalid credentials saat notarization, periksa dulu apakah kata sandi khusus aplikasi sudah kedaluwarsa sebelum mencurigai seluruh konfigurasi
  • Penyimpanan profil bisa diverifikasi dengan perintah berikut
xcrun notarytool history --keychain-profile App-Name
  • Jika kata sandi khusus aplikasi disimpan di vault 1Password yang bisa diakses Claude Code, pembuatan profil notarization untuk aplikasi baru juga bisa diserahkan ke agen
  • Anda memang bisa mengotomatisasi input kata sandi dengan --password, tetapi karena kata sandi dapat tertinggal di riwayat shell, lebih baik masukkan sekali secara manual lalu simpan di keychain atau 1Password

Pemisahan Konfigurasi Penandatanganan Lokal dan Rahasia

  • Team ID dan bundle prefix yang diperlukan untuk penandatanganan aktual disimpan di Local.xcconfig
cp Local.xcconfig.example Local.xcconfig
BUNDLE_PREFIX     = your.real.prefix
DEVELOPMENT_TEAM  = YOUR-TEAM-ID
  • Tambahkan Local.xcconfig ke .gitignore agar konfigurasi lokal per proyek tidak masuk ke repositori
  • Karena kunci privat penandatanganan tetap berada di login keychain dan kata sandi khusus aplikasi untuk notarization tetap berada di profil keychain notarytool, rahasia tidak tercatat di Git

Mengotomatisasi Distribusi Mac dengan release.sh

  • scripts/release.sh di repositori menjalankan seluruh pipeline distribusi aplikasi Mac dengan satu perintah
./scripts/release.sh
  • Skrip bekerja dalam urutan berikut

    1. Memeriksa lebih dulu apakah xcodegen dan profil notarization tersedia
    2. Meregenerasi proyek dengan xcodegen generate
    3. Membuat archive Release dengan xcodebuild archive
    4. Mengekspor aplikasi bertanda tangan Developer ID dengan ExportOptions.plist dan xcodebuild -exportArchive
    5. Mengemas aplikasi ke ZIP lalu mengirimkannya ke Apple dengan notarytool submit --wait
    6. Menempelkan tiket notarization dengan stapler staple
    7. Memverifikasi apakah Gatekeeper mengizinkannya lewat spctl
    8. Menghentikan proses lama lalu menyalin aplikasi ke /Applications
    9. Mendaftarkan aplikasi yang terpasang dengan lsregister
    10. Memverifikasi ulang tiket dan status Gatekeeper pada bundle yang sudah terpasang
  • Meskipun model sudah mengetahui prosedur distribusi umum, informasi spesifik proyek seperti nama scheme, team ID, nama profil notarization, dan lokasi instalasi tetap harus diberikan oleh pengguna

  • Jika skrip pertama gagal, perlu ada iterasi perbaikan berdasarkan hasil eksekusi, tetapi setelah workflow stabil, Anda cukup menjalankan perintah distribusi tanpa modifikasi tambahan

  • Mencegah Kegagalan dan Distribusi yang Tidak Sempurna

    • set -euo pipefail membuat skrip langsung berhenti jika satu saja perintah gagal, sehingga kondisi tidak lengkap tidak dianggap sukses
    • cd "$(dirname "$0")/.." memastikan skrip berpindah ke root repositori tak peduli dari direktori mana ia dipanggil
    • Blok preflight check memeriksa xcodegen dan profil notarization sebelum archive yang memakan waktu dijalankan
    • Bukan hanya aplikasi hasil ekspor, tetapi juga aplikasi yang sudah disalin ke /Applications diperiksa ulang untuk menangkap kerusakan bundle saat proses salin
    • Jika membutuhkan profil notarization lain, Anda bisa menimpanya dengan variabel lingkungan
    TZED_NOTARY_PROFILE=<name> ./scripts/release.sh
    

Menyampaikan Aturan Distribusi ke Agen

  • Jika release.sh bisa melakukan distribusi dengan satu perintah, CLAUDE.md atau AGENTS.md membuat agen memakai perintah itu di setiap sesi tanpa perlu instruksi tambahan
  • Di dalam dokumen, catat perintah untuk meregenerasi proyek, menjalankan unit test, build macOS cepat, dan distribusi aktual
xcodegen generate
swift test

xcodebuild -project YOUR-APP-NAME.xcodeproj \
  -scheme YOUR-APP-NAME-macOS \
  -destination 'platform=macOS' \
  CODE_SIGNING_ALLOWED=NO build

./scripts/release.sh
  • Perbedaan dua jalur build itu juga perlu dijelaskan dalam dokumen
    • Build CODE_SIGNING_ALLOWED=NO cocok untuk CI dan pengecekan lokal cepat
    • Untuk distribusi aplikasi menu bar yang nyata, lolos atribut karantina, dan sinkronisasi iCloud, dibutuhkan release.sh yang melakukan penandatanganan Developer ID dan notarization
  • Jika Anda mengarahkan agar metode dari satu aplikasi dirujuk oleh repositori lain, Claude Code dapat menyalin konfigurasi yang sama ke aplikasi berikutnya

Build Cepat Tanpa Tanda Tangan dan Pengujian

  • Unit test berbasis Swift Package Manager dijalankan tanpa build Xcode
swift test
  • Pengecekan kompilasi cepat untuk aplikasi macOS dilakukan dengan penandatanganan dimatikan
xcodebuild -project TZed.xcodeproj \
  -scheme TZed-macOS \
  -destination 'platform=macOS' \
  CODE_SIGNING_ALLOWED=NO build
  • Build simulator untuk aplikasi iOS dan ekstensi widget juga dapat dijalankan dengan cara yang sama
xcodebuild -project TZed.xcodeproj \
  -scheme TZed-iOS \
  -destination 'generic/platform=iOS Simulator' \
  CODE_SIGNING_ALLOWED=NO build
  • Build dengan tanda tangan sementara yang dibuat dengan CODE_SIGNING_ALLOWED=NO dapat dipakai untuk kompilasi dan menjalankan simulator
  • Namun build ini akan ditolak Gatekeeper, dan karena tidak memiliki team prefix, izin seperti iCloud KVS dan App Group tidak akan terikat, sehingga tidak bisa digunakan untuk distribusi

Distribusi Headless ke iPhone Fisik

  • Distribusi ke perangkat iOS tidak memiliki tahap notarization seperti aplikasi Mac, dan menggunakan xcodebuild serta devicectl
  • Aplikasi untuk perangkat fisik dibangun dan ditandatangani dengan sertifikat Apple Development serta development provisioning profile
xcodebuild -project TZed.xcodeproj \
  -scheme TZed-iOS \
  -destination 'generic/platform=iOS' \
  -allowProvisioningUpdates \
  -derivedDataPath build/ios \
  archive -archivePath build/TZed-iOS.xcarchive
  • .app yang dihasilkan dipasang dengan menentukan UDID perangkat yang terhubung
xcrun devicectl device install app \
  --device <DEVICE-UDID> build/ios/…/TZed.app
  • devicectl list devices menampilkan perangkat yang terhubung, sudah dipasangkan, dan UDID-nya
  • Menentukan -allowProvisioningUpdates akan mengambil development provisioning profile yang diperlukan

Cara Code Signing Bekerja tanpa GUI

  • Saat sertifikat Developer ID Application dibuat, Apple menerbitkan sertifikat, lalu Mac membuat kunci privat pasangannya dan menyimpan keduanya di login keychain

  • codesign yang dipanggil oleh xcodebuild menandatangani biner dengan kunci privat, lalu menyertakan sertifikat yang terhubung ke sertifikat root Apple agar penandatangan bisa diverifikasi

  • Jika menggunakan signingStyle: automatic, xcodebuild akan memilih sertifikat yang sesuai dengan team ID dan mengambil provisioning profile yang diperlukan dari Apple

  • Karena itu, provisioning profile tidak perlu di-commit ke repositori

  • Entitlement, Notarization, dan Stapling

    • File .entitlements pada tiap target berisi izin seperti sandbox, network client, iCloud KVS, dan App Group
    • Entitlement terikat saat ditandatangani dengan team ID yang sebenarnya, sehingga build bertanda tangan sementara tidak akan membuat iCloud dan App Group berfungsi normal
    • Penandatanganan dan notarization adalah tahap yang berbeda
    • Penandatanganan membuktikan siapa yang membuat aplikasi
    • Notarization adalah proses Apple memeriksa aplikasi bertanda tangan dari malware lalu menerbitkan tiket
    • Stapling menempelkan tiket itu ke aplikasi agar Gatekeeper tetap mempercayainya saat offline
    • Untuk aplikasi menu bar LSUIElement yang menggunakan UI tersembunyi, notarization diperlukan agar lolos dari deteksi XProtect
  • Perintah Verifikasi Manual

    codesign -dv --verbose=4 /Applications/TZed.app
    spctl -a -vvv -t exec /Applications/TZed.app
    stapler validate /Applications/TZed.app
    
    • codesign memeriksa penandatangan dan sertifikat
    • spctl memeriksa apakah Gatekeeper akan mengizinkan aplikasi dijalankan
    • stapler validate memverifikasi bahwa tiket notarization sudah ditempelkan

Alat Standar yang Dijalankan Agen

  • Tidak diperlukan server MCP build terpisah atau plugin khusus; Claude Code menjalankan CLI standar dalam shell non-interaktif
  • Alat yang digunakan adalah xcodebuild, xcrun notarytool, xcrun stapler, spctl, codesign, devicectl, xcodegen, dan swift
  • CLAUDE.md menyampaikan ke agen aturan seperti konvensi penamaan profil notarization, perbedaan antara build cepat dan distribusi aktual, serta keharusan memakai release.sh saat distribusi
  • Hanya notarytool store-credentials awal yang tetap menjadi tahap interaktif; setelah itu seluruh proses bisa diotomatisasi

Mengganti Pekerjaan Xcode GUI dengan CLI

  • Pembuatan .xcodeproj yang biasanya dikelola Xcode digantikan oleh project.yml dan xcodegen generate
  • ⌘B atau tombol Run setara dengan xcodebuild … build
  • Product → Archive ditangani dengan xcodebuild … archive
  • Distribusi aplikasi lewat Organizer dapat digantikan oleh xcodebuild -exportArchive
  • Upload lewat Organizer dilakukan dengan xcrun notarytool submit --wait
  • Penempelan tiket otomatis menggunakan xcrun stapler staple
  • Proses instalasi drag-and-drop ke /Applications ditangani dengan cp -R dan lsregister
  • Aksi Run ke iPhone fisik digantikan oleh xcodebuild archive dan devicectl device install
  • Setelah instalasi Xcode dan XcodeGen, pengaturan kredensial awal, serta penulisan release.sh dan CLAUDE.md selesai, distribusi build baru berikutnya bisa dijalankan hanya dengan satu kalimat atau satu perintah

1 komentar

 
GN⁺ 4 jam lalu
Komentar di Hacker News
  • Ada banyak hal yang tidak bisa diselesaikan di sandbox, jadi saya menjalankan agen AI langsung di Mac. Namun setelah melihat insiden xAI mengunggah direktori home yang bahkan berisi kunci SSH, saya jadi benar-benar mempertimbangkan ulang pilihan ini
    Saya tidak terlalu khawatir mesin itu sendiri rusak. Sebagian besar sudah dicadangkan atau di-commit ke Git, jadi bisa dipulihkan dalam beberapa jam. Namun saya sama sekali tidak ingin direktori .ssh dikirim ke agen AI, dan itu jangan coba dicegah lewat prompt, melainkan harus diblokir di level sistem. Saya sedang mempertimbangkan membuat pengguna terpisah dan menerapkan izin 700 pada direktori home. Keamanannya terasa seperti mundur ke era 1990-an, tetapi sisi lainnya adalah kita bisa menyelesaikan pekerjaan dengan kecepatan yang belum pernah ada sebelumnya. Saya sendiri juga memakai cara berisiko ini, jadi bukan bermaksud menyalahkan orang lain

    • Tidak harus menjalankannya di host Mac. Mac terbaru mendukung virtualisasi dengan kehilangan performa yang nyaris tidak terasa, sehingga VM macOS atau Linux dengan arsitektur yang sama bisa digunakan dengan mudah untuk pengembangan
      Untuk solusi siap pakai, bisa memakai Tart https://tart.run/ atau VirtualBuddy https://github.com/insidegui/VirtualBuddy yang open source, atau membuat sendiri dengan vibe coding alat yang membungkus OS API https://developer.apple.com/documentation/virtualization. Belakangan juga ada Apple container https://github.com/apple/container
    • Saya sedang membuat tool wrapper yang menjalankan Claude sebagai pengguna terpisah bernama agent. Setahun lalu saya gagal karena OAuth dan keychain, tetapi baru-baru ini berhasil mengimplementasikannya berkat panduan Claude bahwa CLAUDE_CODE_OAUTH_TOKEN bisa digunakan
      Diperlukan tool pendamping untuk mengatur izin lewat ACL, tetapi saat ini berfungsi di macOS. Tingkat risikonya kira-kira berada di antara sandbox Claude bawaan dan isolasi container/mesin penuh. Seiring membaiknya sandbox Claude sendiri, saya sempat meragukan imbal hasil proyek pertahanan berlapis ini, tetapi melihat kemungkinan bocornya direktori home, ada cukup alasan untuk terus melanjutkannya. Belum saya rilis sebagai open source, tetapi saya bersedia berdiskusi dengan orang yang tertarik
    • Saya menjalankan AI di container Docker headless dan hanya memberinya akses ke Git, sehingga ia hanya bisa berkontribusi kode. Jika butuh secret, alurnya adalah menyediakan container Docker yang disimpan di repository, dan jika butuh infrastruktur, minta ia membuat tiket Jira
    • Saya penasaran bagaimana menangani pendaftaran bundle identifier tanpa membuka Xcode
  • Untuk bersenang-senang, saya sedang membangun dan menguji aplikasi iOS hanya dengan Linux, dan ternyata sangat sederhana; https://github.com/xtool-org/xtool bekerja dengan sangat baik
    Tanpa perlu mengunggah ke TestFlight atau App Store, dari Linux pun aplikasi bisa dipasang langsung ke iPhone melalui USB. Kalau belum yakin, minta agen coding membuat aplikasi iOS Hello World dan mengunggahnya; itu cara mudah untuk mulai

    • Saya bekerja dengan cara yang sama, kecuali bahwa saya menjalankan Linux di WSL pada Windows. Saya memindahkan IPA ke ponsel dengan Sideloadly, dan berjalan lancar
    • Setelah aplikasi ditransfer lewat USB, apakah iPhone harus tetap terhubung?
    • Apakah agen coding sudah mengenal xtool?
  • Proyek open source saya, Axiom, membantu tool eksekusi coding melakukan pekerjaan pengembangan untuk sistem operasi Apple secara efektif
    Selain berbagai teknologi dan agen, proyek ini juga mencakup tool untuk LLM seperti xclog, xcprof, xcsym, dan xcui. Tool-tool ini mengekspos fungsi yang diperlukan secara efisien dari sisi token dan juga berguna untuk teknologi atau agen di luar Axiom. Axiom: https://charleswiltgen.github.io/Axiom/, tool CLI: https://charleswiltgen.github.io/Axiom/tools/

    • Apakah ini juga akan berjalan dengan baik pada codebase Kotlin Multiplatform? Ada kode native Swift, tetapi saya penasaran bagaimana performa atau perilakunya saat sebagian logika dibagikan
    • Menurut saya frontier berikutnya untuk tool aplikasi iOS adalah server build Linux yang bisa di-host sendiri, dan saya penasaran pendapat Anda tentang itu
    • Apakah bekerja juga dengan Flutter?
  • Membaca kalimat “Saya membuat Claude Code menulis skrip yang melakukan pengarsipan, penandatanganan Developer ID, notarization, stapling, hingga instalasi ke /Applications tanpa membuka Xcode, dan berhenti dengan jelas jika gagal di tahap mana pun” terasa agak aneh. Sebab tulisan yang sedang kita baca ini sendiri seolah-olah Claude sedang berbicara kepada kita
    Hampir di setiap tahap tulisan, terasa janggal juga karena berulang kali ada arahan seperti tanyakan lagi ke LLM, misalnya “tunjukkan tulisan ini ke Claude Code atau tool coding LLM pilihan Anda dan biarkan ia menyelesaikannya”, “kalau tidak tahu, tanya LLM untuk membantu pengaturannya”, “tujuan memakai LLM adalah menghindari pekerjaan manual yang tidak diinginkan”, dan “minta ia membuat workflow”

    • Tulisan ini bukan ditulis Claude, melainkan saya tulis sendiri
    • Ini terlihat seperti struktur melingkar: menunjukkan situs web yang dibuat Claude kepada Claude, lalu membuat Claude menyiapkan lingkungan build
    • Karena ada kesalahan-kesalahan dalam tulisan itu, saya sempat mengira ini bukan tulisan AI, tetapi sekarang mungkin saja AI memang sengaja membuat kesalahan
  • Dari sudut pandang saya yang sudah lebih dari setahun mengembangkan aplikasi Mac dan iOS dengan agent, menurut saya tulisan ini bukan saran yang baik. Terutama, Xcode MCP yang unggul harus berjalan saat Xcode sedang dibuka
    Dengan alat MCP, Anda bisa mengakses berbagai fungsi jauh lebih cepat dan ringkas daripada xcodebuild, dan juga bisa membuat serta merender #Preview yang tidak mungkin dilakukan jika Xcode ditutup. MCP dan agent bawaan di Xcode 27 juga mengendalikan simulator dengan sangat baik melalui DeviceHub. DeviceHub menggantikan Simulator.app, dan tampaknya agent bisa memahami serta menanganinya tanpa harus mengakali API aksesibilitas dengan alat seperti axe
    Xcode MCP memang tidak sempurna. Masalah jendela izin yang muncul setiap kali menjalankan agent saya akali dengan persetujuan otomatis menggunakan Keyboard Maestro. Meski begitu, Xcode 27 sangat meningkatkan kegunaan vibe coding di Xcode. Sekarang saya menjalankan Codex dari UI agent bawaan Xcode sendiri, tanpa menangani MCP secara terpisah, dan lingkungan eksekusi ini lebih mampu mengarahkan model agar memanfaatkan alat yang tersedia. Pada akhirnya, kita mendapatkan hal terpenting: umpan balik yang lebih cepat dan validasi yang lebih kuat

    • Ada Xcode-mcp-proxy yang mem-proxy Xcode MCP sambil mengeklik dialog dan memulihkan koneksi. Saya penasaran, untuk pengujian aplikasi macOS apakah Anda memakai Peekaboo, atau otomatisasi tangkapan layar biasa
    • Xcode MCP dari Sentry juga layak dicoba. Jauh lebih komprehensif dan tidak perlu membiarkan Xcode berjalan
  • Jika ingin sebisa mungkin tidak menyentuh IDE iOS dan Android, React Native dan Expo juga pilihan yang baik
    Xcode dan Android Studio hanya dipakai saat memasang simulator perangkat, sementara sisanya hingga distribusi ke store ditangani oleh toolchain Expo. Bahkan di Windows yang tidak bisa memasang Xcode, dengan aplikasi terkelola Expo Anda bisa menjalankan aplikasi iOS langsung di iPhone. Untuk titik awal berbasis RN dan Expo, Ignite yang terawat dengan baik sangat bagus: https://github.com/infinitered/ignite

  • Secara ketat, ini tetap menggunakan Xcode. Xcode adalah GUI yang sangat banyak bug-nya, yang membungkus berbagai utilitas UNIX dan aplikasi level sistem yang umumnya stabil
    Merilis aplikasi lewat CLI adalah praktik lama, dan setidaknya sudah mungkin sejak 2012, saat saya merilis aplikasi Xcode pertama saya

    • Saya tahu fakta itu. Namun poin utamanya adalah yang memakai Xcode bukan saya, melainkan Claude
    • Setelah mencoba membuka Xcode, hambatan masuknya membuat saya bahkan tidak terpikir untuk membuat program untuk macOS
  • Untuk setidaknya sebagian debugging, semua orang pada akhirnya harus menggunakan Xcode
    Build sudah bisa ditangani sebagian besar oleh agent dari command line, dan jika diberi instruksi eksplisit sesuai situasi, build bisa dilakukan lebih cepat. Jika Anda memakai grup sinkronisasi sistem berkas Xcode, XcodeGen mungkin hanya pekerjaan tambahan yang tidak perlu
    Di iOS, yang paling saya rekomendasikan adalah menambahkan fitur App Store Connect ke agent: https://github.com/rorkai/App-Store-Connect-CLI. Dengan begitu, bukan hanya Anda tidak perlu selalu menyalakan Xcode, Anda juga tidak perlu berada di dekat MacBook. Cukup ubah dengan Codex dari iPhone, lalu instruksikan asc untuk melakukan build dan mengunggah ke TestFlight, unduh versi baru, jalankan, dan ulangi

    • Saya hampir menyelesaikan seluruh aplikasi iOS dengan agent, dan agent juga menangani peluncuran di App Store serta promosi sosial. Xcode hanya saya pakai untuk memeriksa build di perangkat terlebih dahulu dan menentukan arah prompt berikutnya
  • Saya terus terganggu oleh kenyataan bahwa developer dengan anggaran terbatas yang tidak mampu membeli Mac pada dasarnya tersisih dari pengembangan iOS. Setiap kali harga produk Apple naik, semakin banyak orang yang tidak bisa ikut serta dalam pengembangan

    • Memang disayangkan jika ada orang yang tidak bisa mengakses teknologi, tetapi belakangan ini Apple juga menyediakan perangkat yang murah dibanding produk pesaing dengan spesifikasi serupa atau lebih rendah. Apple Silicon MacBook Air dengan memori yang memadai adalah salah satu contohnya
  • Jika melakukan vibe coding untuk aplikasi, dalam jangka panjang Expo adalah pilihan yang lebih baik. Karena berbasis React, data pelatihan LLM berisi jauh lebih banyak kode React daripada Swift, dan kualitas kode yang dihasilkan juga lebih tinggi
    Semua pekerjaan bisa dilakukan dari command line, dan karena berupa web view, debugging juga mudah. Setelah dikompilasi menjadi aplikasi iOS native, rasanya mirip dengan aplikasi native lainnya. Dengan kombinasi Expo dan Fastlane, pengajuan dan distribusi iOS bisa diotomatisasi sepenuhnya, sehingga versi baru dapat diunggah ke App Store dengan satu perintah

    • Bukankah ada juga langkah yang tidak bisa diotomatisasi, seperti mendaftarkan aplikasi itu sendiri saat membuat aplikasi baru?
    • Expo yang dimaksud itu https://expo.dev/? Saat ini ketika dibuka, muncul pemberitahuan bahwa “kode rusak dan terjadi kesalahan yang perlu diperiksa”