Files
UTM/CodeSigning.xcconfig.sample
T
osy 3359543d2c ios: run qemu-img in a helper extension on iOS 26
QEMU tools cannot run in the app process on iOS: a process may load QEMU
only once and qemu-img calls exit(). So disk snapshots of a stopped VM,
reclaiming space, compression, resizing and conversion on import were
macOS-only.

iOS 26 brings ExtensionKit, so qemu-img now runs in an ExtensionKit
extension (iOSHelper, and iOSHelper-SE for UTM SE since an extension's
bundle identifier must be prefixed by its host's). The helper speaks the
same QEMUHelperProtocol as the macOS XPC helper but loads the tool into
its own process, one tool per process. UTMProcess accepts an injected
connection so the remote path is shared with macOS, including file
access through bookmarks, whose implicit security scope grants the
resolving process access. UTMHelperProcess launches the helper and,
because the system hands a process that is still exiting to a launch
that comes too soon, tears it down with a handshake on the interruption
callback and runs helpers one at a time.

UTMQemuImage now reads the tool's output until it ends instead of
racing the exit message, resumes its continuations off the XPC reply
queue (a call made from that queue blocks in NSXPC), and stops the
process explicitly since the connection's exported object kept it from
ever being deallocated on macOS. The last stderr line becomes the error
text when the tool gives none.

Assisted-by: Claude:claude-fable-5-1
2026-09-23 23:10:06 -05:00

67 lines
2.9 KiB
Plaintext

// Your Team ID. See `Documentation/iOSDevelopment.md` for help finding this.
DEVELOPMENT_TEAM = XYZ0123456
// Prefix of unique bundle IDs registered to you in Apple Developer Portal.
// You need to register:
// - com.myuniquename.UTM
// - com.myuniquename.UTM.iOSHelper (iOS)
// - com.myuniquename.UTM-SE.iOSHelper (iOS)
// - com.myuniquename.QEMUHelper (macOS)
// - com.myuniquename.QEMULauncher (macOS)
PRODUCT_BUNDLE_PREFIX = com.myuniquename
// Set to YES if you have a valid paid Apple Developer account
DEVELOPER_ACCOUNT_PAID = NO
// Set to YES if you have access to VM entitlements in your account
DEVELOPER_ACCOUNT_VM_ACCESS = NO
// Name of the iOS development signing certificate, you probably do not need
// to change this.
CODE_SIGN_IDENTITY_IOS = Apple Development
// The values below are specific to macOS development. If you do not define
// these keys, the build will default to ad-hoc signing. You will need to
// follow `Documentation/MacDevelopment.md` to disable library verification and
// remove unsupported entitlements.
// Name of the macOS development signing certificate. Comment out this line to
// use ad-hoc signing.
CODE_SIGN_IDENTITY_MAC = Apple Development
// Create a Mac provisioning profile for com.myuniquename.UTM with the
// Hypervisor entitlements and get its UUID. If you do not have access to these
// entitlements, comment out the line and delete the following entitlements
// - com.apple.vm.device-access
// from the following file
// - Platform/macOS/macOS.entitlements
PROVISIONING_PROFILE_SPECIFIER_MAC = 00000000-1111-2222-3333-444444444444
// Create a Mac provisioning profile for com.myuniquename.QEMUHelper with the
// Hypervisor entitlements and get its UUID. If you do not have access to these
// entitlements, comment out the line and delete the following entitlements
// - com.apple.vm.networking
// from the following file
// - QEMUHelper/QEMUHelper.entitlements
PROVISIONING_PROFILE_SPECIFIER_HELPER = 00000000-1111-2222-3333-555555555555
// Create a Mac provisioning profile for com.myuniquename.QEMULauncher with the
// Hypervisor entitlements and get its UUID. If you do not have access to these
// entitlements, comment out the line and delete the following entitlements
// - com.apple.vm.networking
// from the following file
// - QEMULauncher/QEMULauncher.entitlements
PROVISIONING_PROFILE_SPECIFIER_LAUNCHER = 00000000-1111-2222-3333-555555555555
// If you are signed in to your developer account on Xcode, leave this as is
// Otherwise, change it to 'Manual' and fill in the profile specifiers below
CODE_SIGN_STYLE_IOS = Automatic
// If using manual iOS signing, fill the profile specifiers for each app and
// for the helper extension embedded in UTM and UTM SE
PROVISIONING_PROFILE_SPECIFIER_IOS =
PROVISIONING_PROFILE_SPECIFIER_SE =
PROVISIONING_PROFILE_SPECIFIER_REMOTE =
PROVISIONING_PROFILE_SPECIFIER_IOS_HELPER =
PROVISIONING_PROFILE_SPECIFIER_SE_HELPER =