首页 > 解决方案 > 在命令行中打开的 MacCatalyst 应用程序中发送 HTTP 请求

问题描述

我有一个 MacCatalyst 应用程序,它可以通过两种方式工作:

当应用程序在命令行中启动时,我需要向 API 发出 HTTP 请求。但是,这不起作用,我不知道为什么。

这是我的案例的简化示例(我的应用程序是用 Objective C 编写的)

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char * argv[]) {
  @autoreleasepool {
    if(argc >= 2 && [condition on argv[1]]){
      @try {
        NSURL* requestUrl = [NSURL URLWithString:@"https://google.com"];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:requestUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [request setHTTPMethod:@"GET"];

        NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithRequest: request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
          // never called
          fprintf(stdout, "%s", [@"Request Complete" UTF8String]);
          if (error != nil) {
            // return error
            return;
          }
          // use data
        }];
        [dataTask resume];
      }@catch(NSException* e) {
        fprintf(stdout, "%s", [@"Exception" UTF8String]); // never called
      }@catch(NSError*e) {
        fprintf(stdout, "%s", [@"Error" UTF8String]); // never called
      }
    } else {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
  }
}

在上述情况下,dataTask completionHandler 从未被调用,没有抛出异常或错误,我在控制台中没有收到错误,脚本只是在 [dataTask resume] 之后停止。

我还尝试使用委托和使用后台会话来处理上传或下载任务,但它们都没有工作,也没有抛出任何错误,也没有提供任何关于什么不工作或不允许什么的信息。使用委托时,不会调用任何委托回调。

有谁知道发生了什么?

标签: objective-cmac-catalyst

解决方案


推荐阅读