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

Xcode编译的App仅能在编译Mac启动,签名异常求助

问题描述

已定位到签名异常问题。移除CocoaPods后,将MSAL作为常规包依赖重新构建Xcode项目。该项目在编译设备上运行正常,但将.app文件拷贝至其他Mac设备无法启动,仅Intel Mac生成如下崩溃日志:

{
  "app_name":"ui_test",
  "timestamp":"2023-10-03 16:46:47.00 +0200",
  "app_version":"1.0",
  "slice_uuid":"62be6a29-6e5b-37a4-b396-1dbdf81d3f43",
  "build_version":"1",
  "platform":0,
  "bundleID":"tardik.newtodomsal",
  "share_with_app_devs":0,
  "is_first_party":0,
  "bug_type":"309",
  "os_version":"macOS 13.6 (22G120)",
  "roots_installed":0,
  "name":"ui_test",
  "incident_id":"94B57AAB-CF8D-4A6A-8545-4D622547DA91"
}
{
  "uptime":7700,
  "procRole":"Default",
  "version":2,
  "userID":501,
  "deployVersion":210,
  "modelCode":"MacPro7,1",
  "coalitionID":1952,
  "osVersion":{
    "train":"macOS 13.6",
    "build":"22G120",
    "releaseType":"User"
  },
  "captureTime":"2023-10-03 16:46:47.8577 +0200",
  "incident":"94B57AAB-CF8D-4A6A-8545-4D622547DA91",
  "pid":3353,
  "cpuType":"X86-64",
  "roots_installed":0,
  "bug_type":"309",
  "procLaunch":"2023-10-03 16:46:47.8008 +0200",
  "procStartAbsTime":7793359661050,
  "procExitAbsTime":7793416434750,
  "procName":"ui_test",
  "procPath":"\/Volumes\/VOLUME\/ui_test.app\/Contents\/MacOS\/ui_test",
  "bundleInfo":{"CFBundleShortVersionString":"1.0","CFBundleVersion":"1","CFBundleIdentifier":"tardik.newtodomsal"},
  "storeInfo":{"deviceIdentifierForVendor":"BF901324-EBC4-57EB-80A2-EA437BC60DE6","thirdParty":true},
  "parentProc":"launchd",
  "parentPid":1,
  "coalitionName":"tardik.newtodomsal",
  "crashReporterKey":"FE05737C-5218-4DB2-B9C6-BE508F19E65F",
  "codeSigningID":"",
  "codeSigningTeamID":"",
  "codeSigningFlags":16777216,
  "codeSigningValidationCategory":0,
  "codeSigningTrustLevel":0,
  "wakeTime":6126,
  "sleepWakeUUID":"AF336868-DAC2-4830-A714-F1D0473DEE13",
  "sip":"enabled",
  "exception":{"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGKILL (签名无效)"},
  "termination":{"flags":66,"code":1,"namespace":"CODESIGNING","indicator":"Taskgated 签名无效"},
  "extMods":{"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":439,"task_for_pid":9},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread":0,
  "threads":[{
    "triggered":true,
    "id":104306,
    "threadState":{
      "r13":{"value":0},
      "rax":{"value":0},
      "rflags":{"value":512},
      "cpu":{"value":0},
      "r14":{"value":0},
      "rsi":{"value":0},
      "r8":{"value":0},
      "cr2":{"value":0},
      "rdx":{"value":0},
      "r10":{"value":0},
      "r9":{"value":0},
      "r15":{"value":0},
      "rbx":{"value":0},
      "trap":{"value":0},
      "err":{"value":0},
      "r11":{"value":0},
      "rip":{"value":4382367856,"matchesCrashFrame":1},
      "rbp":{"value":0},
      "rsp":{"value":140702045277168},
      "r12":{"value":0},
      "rcx":{"value":0},
      "flavor":"x86_THREAD_STATE",
      "rdi":{"value":0}
    },
    "frames":[{
      "imageOffset":20592,
      "symbol":"_dyld_start",
      "symbolLocation":0,
      "imageIndex":0
    },{
      "imageOffset":1,
      "imageIndex":2
    }]
  }],
  "usedImages":[
    {
      "size":638976,
      "arch":"x86_64",
      "source":"P",
      "base":4382347264,
      "uuid":"3df96f32-b9c9-3566-a6b7-4daebc6d6563"
    },
    {
      "source":"P",
      "arch":"x86_64",
      "base":4303515648,
      "size":180224,
      "uuid":"62be6a29-6e5b-37a4-b396-1dbdf81d3f43",
      "name":""
    },
    {
      "size":0,
      "source":"A",
      "base":0,
      "uuid":"00000000-0000-0000-0000-000000000000"
    }
  ],
  "vmSummary":"只读库区域: 总计=1180K 驻留=0K(0%) 已换出或未分配=1180K(100%)\n可写区域: 总计=8192K 已写入=0K(0%) 驻留=0K(0%) 已换出=0K(0%) 未分配=8192K(100%)\n\n                                虚拟区域 \n区域类型                        大小    数量(未合并) \n===========                     =======  ======= \nSTACK GUARD                       56.0M        1 \nStack                             8192K        1 \nVM_ALLOCATE                          4K        1 \n__DATA                              48K        2 \n__DATA_CONST                        48K        2 \n__DATA_DIRTY                        16K        1 \n__LINKEDIT                         384K        3 \n__TEXT                             800K        2 \n共享内存                             4K        1 \n===========                     =======  ======= \n总计                             65.3M       14 \n",
  "legacyInfo":{
    "threadTriggered":{

    }
  },
  "logWritingSignature":"c8aecb4bac96e31f0d308bbfed9c73b1b8f822c9",
  "trialInfo":{
    "rollouts":[
      {
        "rolloutId":"60186475825c62000ccf5450",
        "factorPackIds":{

        },
        "deploymentId":240000062
      },
      {
        "rolloutId":"6391cacc75b0720ff1f8c695",
        "factorPackIds":{
          "COREOS_ICD":"63957f508061fa721c8edc4a"
        },
        "deploymentId":240000007
      }
    ],
    "experiments":[
      {
        "treatmentId":"6dd670af-0633-45e4-ae5f-122ae4df02be",
        "experimentId":"64406ba83deb637ac8a04419",
        "deploymentId":900000017
      }
    ]
  },
  "reportNotes":[
    "dyld_process_snapshot_get_shared_cache 失败"
  ]
}
问题分析

从崩溃日志可明确核心问题:

  • exception.signal显示SIGKILL (签名无效),termination.indicator标注Taskgated 签名无效,直接指向签名验证失败
  • codeSigningID和codeSigningTeamID为空,说明应用未被正确签名或签名信息在拷贝过程中丢失
  • 编译设备能正常运行是因为Xcode调试模式下的临时签名仅对当前设备有效,无法通过其他设备的系统验证
解决方案

1. 配置有效签名身份

  • 打开Xcode项目的"Signing & Capabilities"页面,选择你的开发团队,开启"Automatically manage signing",让Xcode自动处理签名流程;若手动管理签名,需确保所选证书在目标设备上受信任。
  • 构建时选择Archive而非直接运行,归档后的包签名更完整,适合跨设备分发。

2. 确保MSAL框架签名正确

  • 进入项目"Build Phases"的"Embed Frameworks"阶段,确认MSAL框架已添加,且勾选Code Sign On Copy,让Xcode在嵌入框架时自动重新签名。
  • 使用官方发布的MSAL框架版本,避免使用未签名的自定义构建包。

3. 验证签名完整性

  • 在编译设备上用终端命令验证签名:
    codesign --verify --verbose=4 /path/to/your/ui_test.app
    
    有效签名会输出valid on disk和satisfies its Designated Requirement。
  • 拷贝到目标Intel Mac后,再次运行上述命令,确认签名未损坏。

4. 适配Intel Mac架构

  • 在项目"Build Settings"中,设置Architectures为Standard Architectures (arm64, x86_64),生成兼容Intel和Apple Silicon的通用二进制包。
  • 检查Valid Architectures是否包含x86_64,避免架构不兼容触发签名验证失败。

5. 使用合规分发方式

  • 不要直接拷贝.app文件,通过Xcode的Product > Archive归档项目,再选择"Distribute App",根据需求选择Developer ID(对外分发)或Ad Hoc(内部测试)签名导出安装包,确保包签名完整可跨设备运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:03:08