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

Mac Catalyst应用如何获取命令行启动传入的参数

Mac Catalyst 访问命令行启动参数方案

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 方法的launchOptions参数不会携带命令行传入的自定义参数是正常表现。该入参仅用于承载系统传递的启动上下文,例如URL唤起、通知点击、快捷指令启动等触发来源,和进程级别的命令行参数属于完全独立的两套传递体系。

可直接使用的实现方式

Mac Catalyst应用运行在macOS环境下,可以直接通过标准接口读取进程启动参数,不需要依赖UIKit的启动回调,在应用生命周期的任意阶段都可以获取:

  • Swift项目直接调用标准库接口
    Swift标准库提供的CommandLine.arguments在Catalyst环境下完全兼容,返回值为字符串数组,数组第0位为当前应用的可执行文件路径,后续元素为按空格拆分的所有传入参数。
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 获取所有命令行参数
        let launchArgs = CommandLine.arguments
        
        // 示例:判断是否传入指定参数
        if launchArgs.contains("--enable-debug-log") {
            // 执行对应参数的业务逻辑
        }
        return true
    }
    
  • Objective-C项目通过底层C接口获取
    可以通过Darwin层提供的_NSGetArgc、_NSGetArgv接口读取参数计数和参数列表:
    #import <crt_externs.h>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        int argCount = *_NSGetArgc();
        char **argList = *_NSGetArgv();
        NSMutableArray<NSString *> *launchArgs = [NSMutableArray array];
        for (int i = 0; i < argCount; i++) {
            [launchArgs addObject:[NSString stringWithUTF8String:argList[i]]];
        }
        // 处理获取到的参数即可
        return YES;
    }
    

调试提示:在Xcode中调试Catalyst应用时,可通过「Edit Scheme -> Run -> Arguments -> Arguments Passed On Launch」添加测试参数,读取逻辑和命令行启动传入参数完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:36:19