You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI Stepper在Mac(iPhone兼容模式)触发EXC_BAD_ACCESS崩溃

iOS应用在Mac兼容模式下Stepper崩溃的解决方案

一、检测应用是否处于Mac兼容模式

使用ProcessInfo的isiOSAppOnMac属性即可准确判断,该API从iOS 14.0开始支持,匹配你的部署目标:

let isRunningOnMacAsiOSApp = ProcessInfo.processInfo.isiOSAppOnMac

该属性仅在「专为iPhone设计」的iOS应用在Mac上运行时返回true,可区分原生Mac应用和常规iOS环境。

二、自定义Stepper替代方案

系统Stepper在Mac兼容模式下存在底层实现bug,我们可以实现一个轻量的自定义Stepper替代,保留核心功能同时避免崩溃:

import SwiftUI

struct CustomStepper: View {
    let title: String
    @Binding var value: Int
    let range: ClosedRange<Int>
    let step: Int
    
    init(_ title: String, value: Binding<Int>, in range: ClosedRange<Int>, step: Int = 1) {
        self.title = title
        self._value = value
        self.range = range
        self.step = step
    }
    
    var body: some View {
        HStack {
            Text(title)
            Spacer()
            Button(action: {
                value = max(range.lowerBound, value - step)
            }) {
                Image(systemName: "minus.circle")
            }
            .disabled(value <= range.lowerBound)
            
            Text("\(value)")
                .frame(minWidth: 40, alignment: .center)
            
            Button(action: {
                value = min(range.upperBound, value + step)
            }) {
                Image(systemName: "plus.circle")
            }
            .disabled(value >= range.upperBound)
        }
        .padding()
    }
}

// 使用示例
struct ContentView: View {
    @State var someValue = 5
    var body: some View {
        VStack {
            if ProcessInfo.processInfo.isiOSAppOnMac {
                CustomStepper("Stepper", value: $someValue, in: 0...10)
            } else {
                Stepper("Stepper", value: $someValue, in: 0...10)
            }
        }
    }
}

这个自定义组件模拟了系统Stepper的核心逻辑:范围限制、步长增减,同时在Mac兼容模式下启用,iOS真机/模拟器保留原生Stepper体验,也可根据需求调整样式匹配系统风格。

补充说明

该崩溃是SwiftUI框架在Mac兼容模式下的已知bug,已在Xcode 14.3/15、macOS Ventura 13.3.1/Sonoma 14.1.2版本中被复现,自定义组件是目前最直接的规避方案。

内容的提问来源于stack exchange,提问作者lorenzo gonzalez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:20:06