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
相关产品推荐
相关产品推荐

