10 poin oleh GN⁺ 2025-12-09 | 1 komentar | Bagikan ke WhatsApp
  • Aplikasi macOS memiliki komponen yang lebih kompleks daripada program baris perintah, dan mengelola sumber daya antarmuka seperti jendela dan menu dalam struktur terpisah
  • Pada Classic Mac OS, kode eksekusi dan sumber daya disimpan di resource fork file, tetapi sejak Mac OS X beralih ke struktur bundle
  • Bundle aplikasi berpusat pada direktori Contents, dan terdiri dari subfolder seperti MacOS·Resources·Frameworks serta file inti seperti Info.plist
  • Setelah itu, elemen seperti code signing, tanda terima App Store, dan notarization ditambahkan, sehingga strukturnya berkembang untuk memperkuat keamanan dan integritas
  • Struktur mandiri (app bundle) ini menjadi fondasi utama yang menyederhanakan instalasi, pembaruan, dan penghapusan, sekaligus meningkatkan keamanan dan efisiensi pemeliharaan

Struktur aplikasi di Classic Mac OS

  • Pada Mac OS awal, resource UI seperti jendela dan menu dipisahkan dari file eksekusi dan disimpan di resource fork
    • Sebagai contoh, resource milik QuarkXPress 4.11 ditampilkan di ResEdit
    • Kode eksekusi disertakan dalam resource CODE, dan informasi type serta creator file juga disimpan agar dapat dikenali oleh Finder

Struktur bundle di Mac OS X

  • Mac OS X memperkenalkan struktur bundle yang berasal dari NeXTSTEP
    • Aplikasi berbentuk direktori dengan ekstensi .app, dan di dalamnya terdapat folder Contents
    • Folder MacOS berisi file eksekusi aplikasi GUI dan alat baris perintah
    • Folder Resources menyimpan file resource seperti ikon aplikasi dan komponen GUI
    • Sebagian aplikasi menyertakan folder Frameworks untuk menanamkan dylib (dynamic library)
    Iklan
  • File Info.plist bersifat wajib, dan mendefinisikan nama file eksekusi, ikon, versi minimum macOS, jenis dokumen, nomor versi, dan lain-lain
  • File PkgInfo mempertahankan informasi type/creator dari Classic Mac OS, tetapi tidak wajib
  • Saat aplikasi dijalankan, launchd memulai kode eksekusi, sementara LaunchServices dan RunningBoard menjalankan prosedur inisialisasi berdasarkan informasi di Info.plist

Keamanan dan perluasan di macOS

  • Sejak Mac OS X 10.5 Leopard (2007), code signing diperkenalkan dan folder _CodeSignature ditambahkan
    • File CodeResources memuat hash direktori kode (CDHash) untuk memverifikasi integritas aplikasi
  • Aplikasi yang didistribusikan lewat App Store menyertakan tanda terima toko di folder _MASReceipt
  • Sejak 2018, notarization diperkenalkan, sehingga ticket yang diterbitkan Apple dapat di-staple ke bundle melalui file CodeResources
  • Bundle aplikasi modern menyertakan sendiri komponen yang dahulu diinstal di folder sistem
    • Folder Library: LaunchDaemons, LoginItems, dan lain-lain
    • Folder XPCServices: layanan eksekusi terpisah yang digunakan aplikasi
    • Folder Plugins / Extensions: mencakup fitur ekstensi aplikasi dan App Intents
    • Sebagian aplikasi juga memiliki file version.plist
    Iklan

Keunggulan bundle aplikasi

  • Dengan mengintegrasikan semua komponen ke dalam bundle, instalasi, pembaruan, dan penghapusan menjadi lebih mudah
  • Kemungkinan ada komponen yang hilang berkurang, dan keamanan diperkuat melalui perlindungan tanda tangan dan notarization
  • Aplikasi App Store juga menyertakan tanda terima dan ticket notarization untuk memastikan keandalan
  • Tidak ada perbedaan struktur antara arsitektur Intel dan Arm; file eksekusi Mach-O disimpan dalam bentuk binary universal (fat) yang memuat kode untuk kedua platform
    • Di dalam file yang sama juga terdapat signature untuk masing-masing arsitektur

Gambaran visual struktur aplikasi

  • Dalam diagram, kuning pucat menunjukkan komponen yang wajib atau ada di hampir semua aplikasi
  • Hijau menunjukkan item yang hanya ada pada aplikasi yang didistribusikan melalui App Store, sedangkan biru berarti ticket notarization opsional
  • Selain itu, elemen tambahan seperti workflow Automator dan skrip dapat disertakan
  • Secara keseluruhan, aplikasi macOS telah berevolusi menuju struktur mandiri yang berfokus pada keamanan

1 komentar

 
GN⁺ 2025-12-09
Komentar Hacker News
  • Bagian yang ditandai biru adalah notarisation ticket (tiket notarisasi), yang pada praktiknya bukan sesuatu yang opsional
    Aplikasi yang tidak dinotarisasi terlalu merepotkan dari sudut pandang pengguna, jadi pada akhirnya harus membayar biaya pendaftaran pengembang Apple sebesar $99 per tahun
    Jika hanya build dan menjalankannya untuk penggunaan pribadi, tidak masalah, tetapi untuk distribusi, macOS akan menampilkan peringatan sehingga aplikasi terlihat seperti rusak
    Dulu masih bisa dijalankan dengan klik kanan, tetapi sekarang harus masuk sampai ke pengaturan sistem untuk mengizinkannya
    Tangkapan layar terkait bisa dilihat di dokumen dukungan Apple dan berita pengembang
    Saya suka filosofi keamanan Apple, tetapi saya pikir sistem notarisasi untuk aplikasi di luar App Store merugikan semua pihak
    Saya tidak bisa menemukan contoh nyata di mana notarisasi benar-benar mencegah masalah keamanan

    • Saya pikir notarisasi macOS itu merepotkan, tetapi setelah mencoba distribusi Windows, ternyata itu lebih parah
      Untuk mendapatkan kepercayaan Windows Defender, Anda harus membeli sertifikat, dan baik perusahaan maupun individu harus melalui verifikasi identitas yang mendalam
      Penandatanganan harus dilakukan dengan token perangkat keras, jadi hanya satu orang yang bisa mendistribusikan rilis
      Selain itu, otoritas sertifikat bisa mengunci kunci secara sewenang-wenang, jadi akan sangat buruk jika itu terjadi saat Anda perlu merilis patch keamanan
      Dalam hal ini, ekosistem macOS terasa jauh lebih baik

    • Saya sedang mengembangkan bahasa pemrograman yang dikompilasi ke beberapa platform, dan penandatanganan serta notarisasi sama sekali tidak cocok dengan proses ini
      Sistem penandatanganan seperti ini hanyalah alat kontrol, dan berisiko disalahgunakan seperti pada kasus Epic
      Jika biner yang tidak ditandatangani tidak bisa dijalankan secara wajar, saya menganggap platform itu tertutup dan tidak mendukungnya
      Platform tertutup seperti iOS atau Android sampai batas tertentu bisa digantikan dengan PWA
      Hanya saja, kepercayaan saya bahwa Google akan terus mengizinkan aplikasi bertanda tangan sendiri sudah melemah

    • Saya hanya tahu dua kasus di mana Apple mencabut sertifikat aplikasi di luar App Store
      Salah satunya adalah Research App milik Facebook, dan yang lainnya Screenwise Meter milik Google
      Keduanya adalah aplikasi yang pada dasarnya bersifat spyware yang menargetkan remaja, dan pencabutan sertifikat itu sampai melumpuhkan alat internal
      Setelah itu, Screenwise Meter tampaknya kembali masuk ke App Store
      Artikel terkait: Wired, EFF

    • Sekitar setengah isi folder aplikasi saya tidak dinotarisasi, dan pada praktiknya tidak ada masalah berarti

    • Setelah notarisasi, stapled ticket (tiket terlampir) bersifat opsional
      Jika tiket tidak dilampirkan, pengguna harus memeriksa status notarisasi melalui koneksi internet

  • Saat mengembangkan AppBundler.jl, saya punya banyak keluhan soal struktur aplikasi macOS
    Pemaksaan struktur folder Frameworks memang terlihat rapi, tetapi pada praktiknya membundel jadi merepotkan sehingga saya menyiasatinya dengan folder Libraries
    Masalah terbesar adalah penandatanganan kode — rasanya boros harus menempelkan tanda tangan ke semua biner
    Sulit dipahami mengapa ini dibuat begitu rumit, padahal cukup mengumpulkan hash file lalu menandatanganinya sekali saja
    Selain itu, entitlements yang hanya ditempelkan pada biner launcher juga tidak efisien
    Karena standar notarisasi makin diperketat seiring waktu, aplikasi bisa saja tiba-tiba tidak lolos di kemudian hari

  • Saya mendaftar ke Apple Developer Program untuk menandatangani dan menotarisasi aplikasi Tauri, tetapi sudah gagal selama 3 minggu
    Karena tidak punya Mac, saya mencoba lewat GitHub Actions, tetapi katanya notarisasi pertama memang sering memakan waktu lama
    Saya sudah menghabiskan hampir $100 biaya GitHub, tetapi notarisasinya masih juga belum selesai
    Tim dukungan Apple menolak membantu karena saya tidak punya Mac dan menggunakan Tauri
    Proses autentikasi API notarisasi juga seperti mimpi buruk — saya harus membuat JWT dengan PKCS8, tetapi dokumentasinya nyaris tidak ada, jadi saya terpaksa menulis program Node sendiri
    Ini adalah pengalaman pengembang (DX) terburuk yang pernah saya alami

    • Saya diberi saran untuk membeli Mac mini bekas seharga $150 dan menandatangani dari sana
      Mencoba menyelesaikan ini tanpa perangkat keras Apple disebut sebagai buang-buang waktu
  • Saat melihat tangkapan layar OS pertama, hati saya langsung ciut
    Dulu itu UI yang praktis dan rapi, tetapi sekarang ruang hanya terbuang untuk sudut membulat dan ikon seperti gelembung
    Meski begitu, kualitas perangkat keras Mac bagus, jadi saya tetap tidak bisa pindah ke ThinkPad

    • Sudut membulat justru adalah fitur yang lebih baik untuk penglihatan manusia
      Ada penelitian yang menyebut sudut tajam menyebabkan kelelahan visual
      Tulisan terkait: Round Rects Are Everywhere

    • Saya juga tidak terlalu suka macOS terbaru, tetapi tangkapan layar itu juga tidak sempurna
      Terlalu banyak garis dan kurang warna, sehingga perhatian mata terpecah
      Secara pribadi, saya merasa Aqua UI era Leopard punya keseimbangan yang bagus antara kepadatan informasi dan kedalaman visual

    • Jika dilihat dari rasio piksel, UI lama justru memakan lebih banyak ruang
      Berdasarkan resolusi 5K, MacBook Pro modern lebih efisien
      Mac klasik juga sebenarnya sudah punya sedikit sudut membulat
      Referensi: Infinite Mac

    • Komputer bukan hanya alat kerja, tetapi juga alat untuk kesenangan
      Hanya saja, UI masa kini terasa sudah terlalu jauh dari kepraktisan

    • Sebagian besar layar dipenuhi informasi tak berguna seperti 101101, jadi sulit menyebutnya praktis

  • Pernyataan bahwa launchd adalah pihak yang menjalankan alat baris perintah di macOS itu keliru
    Pada kenyataannya, seperti sistem UNIX lain, proses dijalankan dari shell dengan fork/spawn

  • Sistem bundle NeXTSTEP menjadi inspirasi bagi desain file JAR Java

    • Tetapi JAR pada dasarnya hanya file ZIP dengan ekstensi yang diganti
  • Pada Mac OS klasik, aplikasi Power Mac menyimpan kode PPC di data fork
    Hal yang sama berlaku untuk biner CFM-68K, dan resource CODE hanya dipakai oleh kode 68K yang lebih lama

  • Saya punya kenangan menyenangkan saat dulu memodifikasi aplikasi dengan ResEdit

  • Ledakan birokrasi seperti pada diagram terakhir bukan pertanda baik
    Itu semakin mengurangi alasan untuk “upgrade” ke macOS 26

    • Ada juga tanggapan bahwa tidak perlu berlebihan hanya karena ada beberapa folder tambahan di app bundle
  • Struktur saat ini memang “standar” macOS, tetapi bukan satu-satunya cara
    Jika RPATH diatur dengan baik, library bisa ditempatkan di subfolder arbitrer dan tetap lolos notarisasi
    Misalnya, jalur AppName.App/Contents/Libraries juga berfungsi
    Namun, manfaat praktis dari cara ini hampir tidak ada, dan dari sekitar 100 aplikasi di sistem saya, tidak ada satu pun yang memakai folder /Libraries

    • iOS jauh lebih ketat dan tidak jelas dalam hal ini
      Alih-alih .dylib, harus memakai format .framework, dan ini adalah aturan yang tidak terdokumentasi
      Saat pengajuan, ini bisa terdeteksi otomatis dan menyebabkan penolakan